【文章标题】: 两种方法搞定ACProtect 1.09(Anti-Debug + Code Splicing + Stolen Code)
【文章作者】: wynney
【软件名称】: Calories
【下载地址】: 打包下载
【保护方式】: Anti-Debug + Code Splicing + Stolen Code
【编写语言】: Borland Delphi 4.0 - 5.0
【操作平台】: XP SP2
【作者声明】: 凑热闹~^_^
--------------------------------------------------------------------------------
【详细过程】
一、前言
前几天在某国外论坛上看到某老外求助脱这个软件,遂下载下来瞧了瞧,蛮有点意思。很巧合,在看雪论坛上同样看到了某兄
弟关于Anti-Debug求助,突然想起了这个软件。对于这个有点心得,于是,抽空就写这篇文章。这里说的两种方
法,其实只是前面的反Anti-Debug + 找Stolen Code + 找伪OEP的方法不一样而已,后面修复IAT、处理Code Splicing的方法
是一样的。所以我将把两种方法的反Anti-Debug + 找Stolen Code + 找伪OEP的过程分开来讲,修复IAT、处理Code Splicing
的方法放在最后一起讲
二、方法一
2.1、反Anti-Debug + 找Stolen Code + 找伪OEP
使用看雪老大的HideOD插件,设置如下:
1、选上:Process32Next,HideNtDebutBit,None
2、忽略除了内存访问、指定异常外的所有异常(也就是说这2个不打勾)
OD载入目标程序,HideOD插件点下HIDE,单步F8一下
hr 0012FFA4
Shit+F9,中断在最后一次内存访问异常
注意看堆栈
中断在retn后,Ctrl+T-->命令是一个-->push ebp-->Ctrl+F11运行跟踪,由于我们开始下的hr esp的缘故会中断在Stolen Code处
删除硬件断点,Alt+M-->00401000段F2-->Shift+F9中断在伪OEP
三、方法二
3.1、反Anti-Debug + 找Stolen Code + 找伪OEP
OD的隐藏插件设置随便(我设置的是全部勾选上),忽略所有的异常!OD载入目标程序
Ctrl+G-->CreateToolhelp32Snapshot-->找到段尾-->F2下断
F9运行,中断下来,注意看EAX=6C(在你那里可能不是这个值)-->右键归零(把EAX清0)
再次F9,此时注意看EAX=68(在你那里可能不是这个值)-->再次右键归零(把EAX清0)
此时EAX的值就是Anti-Debug的校验值,所以,清除为0,就可以防止Anti-Debug
取消7C864837处的断点,F9运行,由于前面下hr ESP的缘故,中断在Stolen Code
硬件断点不要取消,继续F9,第2次硬件中断
硬件断点不要取消,继续F9,第3次硬件中断
硬件断点不要取消,继续F9,第4次硬件中断
此时可以删除硬件断点,F8
四、还原Stolen Code + 试探性Dump + 修复IAT
修补好Stolen Code之后
试探性Dump:使用LoadPE纠正镜像,完整脱壳,打开ImportREC,OEP=00169498,获取输入表,有很多无效的,使用ACProtect插件修复
最后有两个指针无效,根据经验判断全部还原成MessageBoxA,保存下树文件,FixDump!
试运行程序发现无法运行。
用另外一个OD载入脱壳修复的文件(我们到达OEP的OD还有用,不能关哦),细细查看,发现这里
呵呵,就是Code Splicing在作怪了。
五、处理Code Splicing + Dump + Fix Dump
这里使用Splicing Remover,在网上找到了一个Splicing Remover不完整的Delphi源码,幸好我学的就是Delphi,于是自己补充完整了!
发现Code Splicing所在区段为
内存映射,项目 5
地址=00140000
大小=0000A000 (40960.)
物主= 00140000 (自身)
区段=
类型=Priv 00021004
访问=RW
初始访问=RW
打开Splicing Remover,按图示填写。Splicing Remover修复完毕之后,我们稍微找一个地方对比下(因为地方很多!)
修复前:
修复后:
像这样的地方还有很多很多,大家有兴趣可以仔细看看找找,好现在我们需要重新Dump了!
使用LoadPE纠正镜像,完整脱壳,打开ImportREC,直接载入我们保存的树文件,Fix Dump!
运行正常!~最后优化减肥下吧!
六、Splicing Remover主要代码(Delphi的)
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2006年08月10日 7:52:30