菜鸟脱Armadillo保护的dll详细笔记
 

破文作者: machenglin
文章标题: 商业软件
软件名称: XX管理系统
软件大小: 21.97M(dll=576k)
下载地址: PM
加壳方式: Armadillo
保护方式: Enable Import Table Elimination、Enable Strategic Code Splicing
编写语言: Microsoft Visual C++ 6.0
使用工具: OD,PEID、HEX、LOADPE、ArmInline、Import
操作平台: WINXP SP2
软件介绍: dll的主要功能是对狗的调用。
详细过程: 该软件系商业软件,本教程只探讨对脱的dll的修复,不提供软件的名称和下载。现在Armadillo已经不成为猛壳。关于exe的教程很多,因dll比exe多了一个重定位表,我就面向初学者,尽量能把流程写的详细一些。

      

10058327 A> 55 push ebp ; OD程序入口点。 10058328 8BEC mov ebp,esp 1005832A 53 push ebx 1005832B 8B5D 08 mov ebx,dword ptr ss:[ebp+8] 1005832E 56 push esi 1005832F 8B75 0C mov esi,dword ptr ss:[ebp+C] 10058332 57 push edi 10058333 8B7D 10 mov edi,dword ptr ss:[ebp+10] 10058336 85F6 test esi,esi 10058338 75 09 jnz short AppClien.10058343

-----------------------------------------------------------------------------------------------------------
一、运行脚本。

在对付Armadillo保护方式脱壳脚本中,首先推荐fly大侠的系列脚本,请提前收集备用,别问我那里能下载。

从OD菜单--->插件--->ODbgScript--->运行脚本--->Armadillo V4.0-V4.4.dll.osc。

      

10005398 55 push ebp ; This is the OEP! Found By: fly 10005399 8BEC mov ebp,esp 1000539B 53 push ebx 1000539C 8B5D 08 mov ebx,dword ptr ss:[ebp+8] 1000539F 56 push esi 100053A0 8B75 0C mov esi,dword ptr ss:[ebp+C] 100053A3 57 push edi 100053A4 8B7D 10 mov edi,dword ptr ss:[ebp+10] 100053A7 85F6 test esi,esi 100053A9 75 09 jnz short AppClien.100053B4

-----------------------------------------------------------------------------------------------------------
二、用ArmInline修复

1、用ArmInline V0.96可以自动找到Enable Import Table Elimination,但需要手动定位IAT的起始、结束Size,否则不能

全部修复。

2、用ArmInline V0.96不能自动找到Enable Strategic Code Splicing,需要手动定位。

Alt+M 到内存窗口,根据:

大小=00010000~00020000之间,类型=Priv,访问=RWE,初始访问=RWE。

找到这里,这就是Enable Strategic Code Splicing区段。
===================================
内存映射,项目 38
地址=02020000
大小=0001D000 (118784.)
物主=02020000 (自身)
区段=
类型=Priv 00021040
访问=RWE
初始访问=RWE
===================================
3、在ArmInline V0.96填入相应的值,先Enable Strategic Code Splicing,后Enable Import Table Elimination,修复

之。

注意,别特别相信ArmInline工具,要自己确认一下,很多问题可能就是使用工具不当造成!

-----------------------------------------------------------------------------------------------------------
三、LordPE、Import

注意:在ArmInline修复后,用LordPE转存、Import修复。必须同一次进行,不能用未ArmInline修复前或前次用LordPE转存的dumped.exe来用Import修复!



-----------------------------------------------------------------------------------------------------------
四、优化

在OD中单独测试脱壳dll,能准确停在入口点,F9运行,初始化完成。

一般dll脱壳后,必须和主程序联调,才能知道脱壳是否成功。改脱壳dll为程序规定文件名,运行主文件,测试各功能菜单,OK,成功。实际上这个dll是有关“狗”的调用。看来这个dll的重定位表没有加密,不再修复重定位表。修复后的dumped_.dll字节为920K,加壳版为576K,原版为176K。优化dumped_.dll文件,应该基本和原版的176K接近。

1、用FixRes转存资源段rsrc区段,NewRVA=00030000,既原text1的虚拟地址,字节大小:FileAlignment=1000,转存为rsrc.bin。

2、用LordPE打开dumped_.dll--->区段--->mackt--->把段保存到磁盘。

3、dumped_.dll文件优化前为11个区段。留下前面text、rdata、data、reloc四个区断,消除区段text1后面全部区段。

4、用WinHex打开消除多余区段的dll文件。
WinHex菜单--->位置--->转到偏移量--->新位置--->30000(原text1的虚拟地址)--->选块范围--->编辑--->删除。

回到文件头,找到Armadillo壳标志“SR”,5352h,修改为00。

找到PE头,向下,选定text1至mackt区段名--->编辑--->填入选块--->用16进制填充--->OK。

保存文件。

5、用LordPE打开WinHex修复的文件,从磁盘载入资源段rsrc区段,修改VSize=mackt-rsrc=E2000-30000=B2000。

6、从磁盘载入资源段mackt区段,不重建PE。

最后测试:文件字节=205K,编程语言=Microsoft Visual C++ 6.0 DLL。



上一篇   下一篇