反调试:IsDebuggerPresent

摘要:
IsDebuggerPresent函数确定调试器是否以用户模式调试调用进程。此函数没有参数返回值。如果当前进程正在调试器的上下文中运行,并且当前进程未在调试器的上下文内运行,则IsDebuggerPresent函数将检测调试进程:然后单步执行第一个关键api函数,最后到达第二个关键api以结束进程的函数ExitProcessIsDebuggerPresent。1.防止调试旁路。负载OD。

前言:一个反调试IsDebuggerPresent的CreackMe

IsDebuggerPresent函数的了解:

IsDebuggerPresent
作用
    确定调用进程是否由用户模式的调试器调试。
语法
    BOOL WINAPI IsDebuggerPresent(void);
参数
    该函数没有参数
返回值
    如果当前进程运行在调试器的上下文,返回值为非零值。
    如果当前进程没有运行在调试器的上下文,返回值是零。

IsDebuggerPresent函数检测调试过程:

1、直接加载入OD,观察是否具有IsDebuggerPresent的windows api函数,来验证反调试是不是使用的是IsDebuggerPresent,发现确实存在
反调试:IsDebuggerPresent第1张

2、利用IsDebuggerPresent进行下断点,然后运行程序F9,然后单步走

关键的第一个api函数,PostQuitMessage,其作用是发送结束消息
反调试:IsDebuggerPresent第2张

然后我们继续单步走,最后来到第二个关键的api 结束进程的函数ExitProcess
反调试:IsDebuggerPresent第3张


IsDebuggerPresent函数防调试的绕过

1、载入OD,进行IsDebuggerPresent api函数的断点,然后用户返回到执行代码,同时也可以发现返回值为00000001,不为0,所以IsDebuggerPresent判断为调试中,就会结束进程
反调试:IsDebuggerPresent第4张

2、分析汇编代码可知如下,那么让下面的je跳转进行跳转就可以了,那么直接修改jmp 进行无条件跳转,再F9
反调试:IsDebuggerPresent第5张

3、成功绕过
反调试:IsDebuggerPresent第6张


IsDebuggerPresent反调试的原理:

1、重新载入OD进行分析,运行程序,断下点来到如下

7C81F424 >  64:A1 18000000  MOV EAX,DWORD PTR FS:[18]                ; 将7FFDD018地址中的值7FFDD00赋值给eax
7C81F42A    8B40 30         MOV EAX,DWORD PTR DS:[EAX+30]            ; 将7FFDD30的地址的机器码7FFDE000赋值给eax
7C81F42D    0FB640 02       MOVZX EAX,BYTE PTR DS:[EAX+2]            ; 将7FFDE02的第一字节机器码赋值给eax,这里的第一字节的机器码也就是01
7C81F431    C3              RETN                                     ; 那么返回值中的eax值也就是01,判断为被调试,结束程序

2、那么也就是将eax中的值改为00000000,所以就可以绕过了

免责声明:文章转载自《反调试:IsDebuggerPresent》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ajax 异步加载显示等待效果Android Visibility控件显示和隐藏下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于hive当中的窗口分析函数总结

最近在看关于窗口分析函数的一些东西,在这里总结一下: (1)head()和 LAG()函数说明: head()按照指定的字段,然后取排序后当前行的后面多少行的这个字段的值。 举例: lead(CREATE_TIME,2) OVER(PARTITION BY ID ORDER BY CREATE_TIME) AS lead_time 这一句的意思...

Windows异常处理机制介绍

转自:http://hi.baidu.com/zwegpcwvtybivxq/item/a8b7e6c15e8b15155150581f 最近做了一个Windows下的异常处理模块,查阅了一些新的资料,结合我自己的理解,将一些点滴记录如下,希望对兄弟们有所帮助。 一、C++标准异常 也就是try、throw、catch这三个关键字。 try{    …… ...

Qt5之反射机制(内省)

Qt的元对象系统除了提供信号/槽机制的特性之外,它还提供了以下特性: QObject::metaObject() 返回关联的元对象 QMetaObject::className() 在运行时状态下返回类名 QObject::inherits() 判断类的继承关系 QObject::tr(),QObject::trUtf8() 提供国际化,翻...

使用 StateServer 保存 Session 解决 Session过期,登陆过期问题。

使用 StateServer 保存 SessionPost by roydux, 2008-4-23, Views:89 正常操作情况下Session会无故丢失。因为程序是在不停的被操作,排除Session超时的可能。另外,Session超时时间被设定成60分钟,不会这么快就超时的。          这次到CSDN上搜了一下帖子,发现好多人在讨论这个问...

(转)Android Studio 增加函数注释模板

此篇文章主要介绍如何在Android Studio中函数如何添加注释,使其和eclipse一样方便的添加注释 Android Studio默认函数注释为 /** * */ 下面方法将要改为如下格式 1 2 3 4 5 /**  *  * @author zony  * @time 15-11-25 下午2:41  */...

C语言之Sleep函数

Sleep函数: 功 能: 执行挂起一段时间   用 法: unsigned sleep(unsigned seconds);   注意:   在VC中使用带上头文件#include <windows.h>,在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include <unistd.h>  在VC中,Sle...