由于一开始我们清除了所有硬件断点,也就是 OD 记录的值为0,所以虽然中间一度通过 SetThreadContext 修改了线程的上下文,但由于我们在这个 API 调用之后设置了断点,OD 在捕获断点时再次把硬件断点清0,最后看到的就是全0的输出。 当然,无论是正着检测还是反着检测,总之,被调试时能检测到数值发生改变,那就好 办了。 最后来分析一下为什么线程上下文检测会成了 OD 的“难言之隐”。理论上,OD 通过插 件改变线程的上下文的数据是可行的,但关键是 OD 利用了这些上下文。做个简单的实验, 我们对 OD的 SetThreadContext下断,然后随便载入一个测试程序,会发现中断在这里。
如果接着跟踪,就会发现 OD 使用了线程上下文的数据,这些数据一旦被改变,调试就
|