hook api 反OD调试的一种思路
by蓝云
本程序在backer的耐心指导下完成,非常感谢backer的帮助!!!
关于OD怎样在程序中下断点相信大家都知道,就是用WriteProcessMemory函数在要下断点的地方写入0xCC,也就是int 3的中断,
如果我们挂钩OD的WriteProcessMemory函数不让它下断点是不是就可以让OD不能正常跟踪了呢?有了这个思路,下面就是实践了。
首先得解决几个问题:
1.我们的目标是最好在OD正常加载本程序后就已经被hook,怎么解决?
这个问题其实很简单,我们知道全局类的初始化工作在main函数之前,OD正常加载后会停在WinMain函数处,如果把hook api 代
码放在一个全局类的构造函数中就可以了,呵呵,就这么简单。
2.要得到OD的输入表中的WriteProcessMemory函数的跳转地址
呵呵,用OD来调试OD不就很容易得到了么?
用OD调试OD后我们得到WriteProcessMemory函数的跳转地址放在0x0050D450这个地方。
3.如果前面的两个问题解决,现在剩下的就是程序在运行期间要判断自己的父进程是否是OD,如果是OD那么就可以肯定被OD加载,
问题是怎么方便的取得父进程?如果用列取进程列表的方式来获的父进程,这比较麻烦,但是的确是一种思路。我们不采取这种
思路,其实在ntdll.dll中有一个函数可以得到父进程,下面用代码来说话吧:
NTDLL.DLL中有一个函数叫NtQueryInformationProcess,用它可以将指定类型的进程信息拷贝到某个缓冲。其原型如下:
NT