学习:反调试之IsDebuggerPresent以及绕过

前言:一个反调试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、成功绕过

猜你喜欢

转载自www.cnblogs.com/zpchcbd/p/12075591.html