吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8767|回复: 20
收起左侧

[分享] 反调试技术以及反调试破解技术(一)静态反调试技术

[复制链接]
Toring 发表于 2017-3-13 18:46
为了保护自己的程序不被破译等,很多软件使用了反调试技术来阻止逆向程序员对自己程序进行爆破,这同时也催生了另一种技术--反调试破解技术的出现。反调试技术分为静态反调试技术和动态反调试技术。相比来说静态反调试技术更容易实现,破解一般也只需要一次,我们这次就先谈一下静态反调试技术,以及对应的破解之道。
1.PEB结构中有几个重要的成员标示了进程是否处于被调试状态。(以下以32位为例)

+0x002 BeingDebugged : UChar

+0x00c Ldr                      :  _PEB_LDR_DATA

+0x018 ProcessHeap       : Ptr32 Void

+0x068 NtGlobalFlag       : Uint4B


BeingDebugged成员在被调试状态会显示1,正常情况下为0。解决方法:更改该值为0。

Ldr:进程在被调试状态时堆内存区域会出现一些特殊的标志,未使用的堆内存区域全部填充着0xFEEEFEEE,而Ldr正好在堆内存中被创建(只在XP系统中有,Vista之后的系统没有这种标志)。解决方法:将该区域覆盖为NULL即可。

ProcessHeap:ProcessHeap.Flags(+0x00c)在正常情况下值为0x2,ProcessHeap.ForceFlags成员(+0x10)的值为0x0,当调试时,该值会改变。(只在XP中有效)。解决办法:只需将值改回去即可。

NtGlobalFalg:PEB.NtGlobalFlag会在调试情况下显示0x70,该值是以下Flags值or运算的结果:(附加到进程无效,只有启动调试有效)

FLG_HEAP_ENABLE_TAIL_CHECK      (0x10)

FLG_HEAP_ENABLE_FREE_CHECK      (0x20)

FLG_HEAP_VALIDATE_PARAMETERS (0x40)

解决方法:重置0即可

2.NtQueryInformationProcess()可以查询ProcessDebugPort(0x7),ProcessDebugObjectHandle(0x1E)ProcessDebugFlags(0x1F)

当进程处于调试状态时,系统会给它分配一个调试端口(Debug Port),正常状态dwDebugPort为,调试状态为0xFFFFFFFF

当进程处于调试状态时,ProcessDebugObjectHandle一个句柄值,正常状态为NULL

当进程处于调试状态时,ProcessDebugFlags为0,正常为1

3.NtQueryObject()函数可以枚举系统所有对象,通过观察系统是否有调试对象句柄,就可以知道是否有进程在被调试。(wcscmp(L"DebugObject",pObjectTypeInfo->TypeName.Buffer)==0),解决方法,改变该函数参数

4.ZwSetInformationThread()该函数顾名思义是给线程设置信息的。该函数有两个参数,第一个参数ThreadHandle为线程句柄,第二参数ThreadInformationClass表示线程信息类型,其值设置为ThreadHideFromDebugger(0x11),调用该函数后,调试进程将会与调试器分离开来,使调试器终止调试,同时终止自身进程。该函数对正常运行程序没有影响。

6.TLS(线程局部存储)TLS函数代码会先于main()函数执行,于是我们可以在这里进行对程序是否被调试的判断,例如判断是否被下了int3断点,PEB中的BeingDebugged是否为1等。

7.ETC利用API获得进程窗口,进程,计算机名称,虚拟机是否在运行状态等判断运行环境是否安全。

这篇文章仅仅是入门,大家想有更多了解可以百度更多相关文章

免费评分

参与人数 6吾爱币 +6 热心值 +5 收起 理由
zsyhn + 1 + 1 谢谢@Thanks!
fruitg + 1 我很赞同!
yeyulang + 1 + 1 谢谢@Thanks!
猫捉老虎 + 2 + 1 用心讨论,共获提升!
暖i + 1 + 1 厉害了哦
ljc666 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

2008temp 发表于 2017-3-14 14:08
麻麻的,还没等调试脱壳,有些软件在虚拟机里运行不是崩溃就是闪退,还有只能用explorer.exe父进程运行的,比较便太,不知道有没有什么方法
whatdos 发表于 2017-3-14 12:02
zaibuo 发表于 2017-3-14 12:20
海海海℃ 发表于 2017-3-14 15:40
来看看,哈哈
jht168888 发表于 2017-3-14 18:33
这个值得学习
开始的复活节 发表于 2017-3-14 18:49
开始学习
lufei 发表于 2017-3-14 19:52
楼主说的那些要是有源码就好了,可以练习一下。
暖i 发表于 2017-3-14 21:56
虚拟机闪退
wq210703 发表于 2017-3-15 09:38
看样子我真的应该去别的版块学习下初级的了,这些真心的看不懂啊,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 12:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表