想到一种检测非指令hook(不是hook代码,是hook地址表或寄存器)的思路:hook中都有保存和恢复寄存器环境的操作,跳回原函数后,寄存器环境已经被恢复,栈顶之上会残留之前保存的寄存器数据。所以,在函数开始,对比栈顶之上的内容是否和当前寄存器的数据一样,如果一样,就说明有hook。这个对比操作由检测方案hook目标函数的代码实现。
评论