静态反调试技术

本文详细介绍了Windows系统中静态反调试的目的和方法,包括检查PEB结构体的BeingDebugged、Ldr、ProcessHeap的Flags和Force Flags以及NtGlobalFlag等字段。文章还探讨了针对这些反调试技术的破解手段,并提到了不同Windows版本中这些技术的适用性和变化。
摘要由CSDN通过智能技术生成

声明

静态反调试目的

被调试的进程用静态反调试技术来侦测自身是否处于被调试状态,若侦测到处于被调试的状态,则执行非常规代码(主要是终止代码)来阻止。具体的实现方法包括调试器检测方法调试环境检测方法强制隔离调试器的方法等等。反调试破解方法主要用来从探测代码获取信息然后修改信息本身使反调试技术失效

注意

许多静态反调试技术对OS具有很强的依懒性。这意味着静态反调试技术在Windows XP 系统下可以正常使用,而在Windows Vista/7操作系统中可能失效

接下来的东西需要用到以下知识,请自行查看:

PEB

https://blog.csdn.net/CSNN2019/article/details/113113347

 +0x002 BeingDebugged    : UChar
 +0x00c Ldr              : Ptr32 _PEB_LDR_DATA
 +0x018 ProcessHeap      : Ptr32 Void
 +0x068 NtGlobalFlag     : Uint4B

BeingDebugged(+0x2)

kernel32.dll中有个名Kernel32!IsDebuggerPresent()的API,但普通的应用程序开发中并不常用:

BOOL WINAPI IsDebuggerPresent()

该API就是用来判断当前进程是否处于调试状态,并返回判断结果。而该API就是通过检测PEB.BeingDebugged成员来确定是否正在调试程序(是,则返回1;否,则返回0)。

老办法,查看一下OD:

在这里插入图片描述
代码如下:

75074E80 >  64:A1 30000000  mov eax,dword ptr fs:[0x30]
75074E86    0FB640 02       movzx eax,byte ptr ds:[eax+0x2]
75074E8A    C3              retn

提示:
Windows 7中,IsDebuggerPresent()API是在Kernelbase.dll中实现的。而在Windows XP 及以前版本的操作系统中,它是在kernel32.dll中。

先获取FS:[30]地址,即PEB地址,然后通过[PEB+2]访问BeingDebugged
在这里插入图片描述
这里取出来的是0的原因呢,是因为吾爱破解OD太强悍了,加了很多插件。。。
在这里插入图片描述
慢慢关闭就行,用原版OD或者IDA就能返回1。

破解之法:

用吾爱破解的OD(滑稽。。哈哈),用OD 的编辑功能把BeingDebugged改为0即可。

Ldr(0xc)

调试进程时,其堆内存区域中就会出现一些特殊标识,表示它正处于被调试状态。其中未使用的堆内存区域全部填充着0xEEFEEEFE,这证明正在调试进程。利用这点可判断进程正在被调试。

PEB.Ldr成员是一个指向_ PEB_ LDR DATA结构体的指针,而 PEB_ LDR _DATA结构体恰好是在堆里面创建的,所以扫描该区域即了轻松查找是否存在0xEEFEEEFE区域
在这里插入图片描述
PEB起始地址为0x3D2000,然后指针指向的区域是0x7710DCA0

在这里插入图片描述
在这里插入图片描述
我看了一下,我的没有。。。有的堆内存中,如果往下拖动滑动条,会看到填充着0xEEFEEEFE的区域。。

破解之法:

只要将填充着0xEEFEEEFE值的区域全部覆写为NULL即可

提示:
该方法仅仅适用于Windows XP系统,而在Windows Vista 以后的系统中则无法使用。另外,利用附加功能的将运行中的进程附加调试器时,堆内存中并不出现上述标识

ProcessHeap(+0x18)

PEB.ProcessHeap(+0x18)成员是指向HEAP结构体的指针

+0x000 Entry						:_HEAP_ENTRY
+0x008 Signature					:Unit4B
+0x00c
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值