IsDebuggerPresent
示在被调试器调试情况下,调用该函数会返回正在被调试。
并且该函数是被Kernel32.dll导出的,该函数没有参数,如果当前程序正在被调试的话,返回值为1,没有被调试的话,返回值为0
跟其他API函数一样,IsDebuggerPersent的返回值也保存在EAX中。
下面是一个带反调试函数`IsDebuggerPresent`的程序
用原版OD会自动停下(因为检测到有调试器)
链接:https://pan.baidu.com/s/1MFTdRcRarONy3OIbSKdLGA
下函数断点:`bp IsDebuggerPresent`
Ctrl+F9执行到返回,可以看到EAX为1,说明检测到调试器
接着运行,程序回自动停下来
我们把EAX的值改为0,程序成功运行
可以给程序打个补丁:
跟到函数返回接着F8,跳过结束进程的函数,把程序从存一份