首页 > 其他 > 详细

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

时间:2019-12-21 09:45:23      阅读:231      评论:0      收藏:0      [点我收藏+]

前言:一个反调试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、成功绕过
技术分享图片

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

原文:https://www.cnblogs.com/zpchcbd/p/12075591.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!