在研究FPU指令时,我发现了
OllyDbg的反调试技巧。到目前为止,我还没有在流行的参考资料中找到它。

首先是它。最后指令操作码”,位于+ 0x12。根据英特尔手册,仅当发生异常时才进行设置。

该值仅设置一次,重新启动(<<)程序时将不起作用。

但我不知道这些价值来自何处。当Olly调用调试对象的GetThreadContext()时,该值已设置。其他调试器似乎没有这种行为。

谁能确认这一点?在Win XP SP3和Intel P4上进行了测试。

#1 楼

上一条指令操作码主要是为使用异常处理程序而设置的,但它是为每条非控制FPU指令设置的(即由加载,存储,比较等设置)。 -零在我的系统上,但是它是不同的值,并且不是恒定的。

Olly 1所请求的上下文字段不如Olly 2所请求的那样多,这就是为什么这些值是不同。上下文结构初始化使一些字段未分配。某些位不是特定于Olly的。还要注意(0xd800 +)0x7ff的值不会解码为任何有意义的指令。

简而言之,这不是可靠的检测方法。