-
-
[原创]常见反调试手段及其规避方法(一)-IsDebuggerPresent
-
发表于:
2018-5-4 17:48
24151
-
[原创]常见反调试手段及其规避方法(一)-IsDebuggerPresent
软件中会使用各种手段防止Craker调试程序,为此我们必须了解常见的反调试技术的原理及规避方法。
调试器:OllyDbg
环境:win7 64位真机
首先我们打开这个程序,是可以正常打开的
使用OD载入目标程序,点击F9运行,左上角一开始是显示“暂停”,F9以后变为显示:已终止。也没弹窗,直接终止了。换言之用户打开就能正常运行,用调试器打开就会自动退出。为什么呢?
因为有IsDebuggerPresent函数在检测调试器,如果检测到正在调试就会退出。如何证实呢 你可以直接bp IsDebuggerPresent,发现确实能断下;也可以打开函数列表,或者按下ctrl+n查看,发现的确有这个函数。
确定用户是否在用调试器,是的话返回非零值。返回0就表示没有被调试。
在段首下断,断下,Ctrl+f9执行到段尾,大部分函数的返回值基本上都在eax里,此时EAX非零
看到,第二行执行了IsDebuggerPresent,之后第5行跳过了后面的获取文本框里的消息GetDlgItem,换言之是跳过了程序的正常的执行顺序。
执行关键跳后即将执行postquitmessage提交/发送退出信息,看来程序马上就要退出了。如下图
然后执行会执行ExitProcess,程序退出。那么这个IsDebuggerPresent究竟执行了什么呢
Mov eax,dword ptr fs:[18]
Mov eax,dword ptr ds:[eax+30]
Movz eax byte ptr ds:[eax+2]
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2018-5-6 11:18
被r0Cat编辑
,原因: