前言:一个反调试IsDebuggerPresent的CreackMe
IsDebuggerPresent函数的了解:
IsDebuggerPresent
作用
确定调用进程是否由用户模式的调试器调试。
语法
BOOL WINAPI IsDebuggerPresent(void);
参数
该函数没有参数
返回值
如果当前进程运行在调试器的上下文,返回值为非零值。
如果当前进程没有运行在调试器的上下文,返回值是零。
IsDebuggerPresent函数检测调试过程:
1、直接加载入OD,观察是否具有IsDebuggerPresent的windows api函数,来验证反调试是不是使用的是IsDebuggerPresent,发现确实存在
2、利用IsDebuggerPresent进行下断点,然后运行程序F9,然后单步走
关键的第一个api函数,PostQuitMessage
,其作用是发送结束消息
然后我们继续单步走,最后来到第二个关键的api 结束进程的函数ExitProcess
IsDebuggerPresent函数防调试的绕过
1、载入OD,进行IsDebuggerPresent api函数的断点,然后用户返回到执行代码,同时也可以发现返回值为00000001,不为0,所以IsDebuggerPresent判断为调试中,就会结束进程
2、分析汇编代码可知如下,那么让下面的je跳转进行跳转就可以了,那么直接修改jmp 进行无条件跳转,再F9
3、成功绕过
原文:https://www.cnblogs.com/zpchcbd/p/12075591.html