首页
社区
课程
招聘
[原创]超级菜鸟也脱Armadillo 1.xx - 2.xx
发表于: 2005-9-5 21:55 4401

[原创]超级菜鸟也脱Armadillo 1.xx - 2.xx

2005-9-5 21:55
4401
【破解作者】 swordkok
【使用工具】 PEID,OD,LordPE,ImportREC
【破解平台】 2000
【软件名称】 硕x闪客精灵MX2005 B50628
【下载地址】 http://http://www.sothink.com/
【加壳方式】 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks
【破解声明】 本人超级菜鸟,脱arm用来学习,参照了各位大大的脱文,在此表示感谢.

写之前我先问一个问题,希望大大们帮我一下.
脱壳前,程序2.41mb,脱壳以后4.48mb,我用loadpe->pe edit->区段->擦除.text1  .data1  .pdata三个区段,然后重建pe,程序减到1.9mb,能正常运行,但是只要关闭软件任何一个窗口就报错,虽然不影响使用,但是总觉得不完美,希望哪位大大告诉我该如何正确给脱壳后的文件减肥,谢谢~~~

【破解内容】

先用peid查壳,发现是Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks,运行程序后,用loadpe查看只有一个进程,应该是单线标准壳.

OD载入,设置忽略所有异常,插件隐藏OD

005C4CB3 >/$ 55             PUSH EBP
005C4CB4  |. 8BEC           MOV EBP,ESP
005C4CB6  |. 6A FF          PUSH -1
005C4CB8  |. 68 F8EE5E00    PUSH SWFDecom.005EEEF8

********************************************************

命令行下断BP GetModuleHandleA
F9运行

77E80ACE > 55               PUSH EBP           //中断
77E80ACF   8BEC             MOV EBP,ESP
77E80AD1   837D 08 00       CMP DWORD PTR SS:[EBP+8],0
77E80AD5   75 0E            JNZ SHORT KERNEL32.77E80AE5
77E80AD7   64:A1 18000000   MOV EAX,DWORD PTR FS:[18]

按f9多次中断,看堆栈中的内容,每次内容如下:
0012FF38   005C4D7B  /CALL 到 GetModuleHandleA 来自 SWFDecom.005C4D75
0012FF3C   00000000  \pModule = NULL

0012D260   77A03F02  /CALL 到 GetModuleHandleA 来自 OLEAUT32.77A03EFC
0012D264   779A0630  \pModule = "kernel32.dll"
0012D268   77A04081  返回到 OLEAUT32.77A04081 来自 OLEAUT32.77A03EC0
.
.(省略若干次)
.
00127D24   00E120C0  /CALL 到 GetModuleHandleA 来自 00E120BA
00127D28   00E20BAC  \pModule = "kernel32.dll"
00127D2C   00E21E1C  ASCII "VirtualAlloc"

00127D24   00E120DD  /CALL 到 GetModuleHandleA 来自 00E120D7
00127D28   00E20BAC  \pModule = "kernel32.dll"
00127D2C   00E21E10  ASCII "VirtualFree"

00127AC4   00E04C23  /CALL 到 GetModuleHandleA 来自 00E04C1D
00127AC8   00127C00  \pModule = "kernel32.dll"
00127ACC   0012CC74

此时可以删除77E80ACE > 55               PUSH EBP 处的断点
alt+f9返回

************************************************************

00E04C23   8B0D 948DE200    MOV ECX,DWORD PTR DS:[E28D94]   //返回到此
00E04C29   89040E           MOV DWORD PTR DS:[ESI+ECX],EAX
00E04C2C   A1 948DE200      MOV EAX,DWORD PTR DS:[E28D94]
00E04C31   393C06           CMP DWORD PTR DS:[ESI+EAX],EDI
00E04C34   75 16            JNZ SHORT 00E04C4C
00E04C36   8D85 DCFEFFFF    LEA EAX,DWORD PTR SS:[EBP-124]
00E04C3C   50               PUSH EAX
00E04C3D   FF15 90B0E100    CALL DWORD PTR DS:[E1B090]               ; KERNEL32.LoadLibraryA
00E04C43   8B0D 948DE200    MOV ECX,DWORD PTR DS:[E28D94]
00E04C49   89040E           MOV DWORD PTR DS:[ESI+ECX],EAX
00E04C4C   A1 948DE200      MOV EAX,DWORD PTR DS:[E28D94]
00E04C51   393C06           CMP DWORD PTR DS:[ESI+EAX],EDI
00E04C54   0F84 2F010000    JE 00E04D89     //我可爱的magic jmp,je直接改成jmp就可以了!=)
00E04C5A   33C9             XOR ECX,ECX
00E04C5C   8B03             MOV EAX,DWORD PTR DS:[EBX]
00E04C5E   3938             CMP DWORD PTR DS:[EAX],EDI
00E04C60   74 06            JE SHORT 00E04C68
00E04C62   41               INC ECX
00E04C63   83C0 0C          ADD EAX,0C
00E04C66  ^EB F6            JMP SHORT 00E04C5E

*************************************************************

接下来,Alt+M 查看内存,在401000区段上下“内存访问断点”,F9运行,中断在OEP处:
004B648D   6A 60            PUSH 60     //断在此处
004B648F   68 00495400      PUSH SWFDecom.00544900
004B6494   E8 D7200000      CALL SWFDecom.004B8570
004B6499   BF 94000000      MOV EDI,94
004B649E   8BC7             MOV EAX,EDI
004B64A0   E8 6B080000      CALL SWFDecom.004B6D10
004B64A5   8965 E8          MOV DWORD PTR SS:[EBP-18],ESP
004B64A8   8BF4             MOV ESI,ESP
004B64AA   893E             MOV DWORD PTR DS:[ESI],EDI
004B64AC   56               PUSH ESI
004B64AD   FF15 38745300    CALL DWORD PTR DS:[537438]               ; KERNEL32.GetVersionExA
004B64B3   8B4E 10          MOV ECX,DWORD PTR DS:[ESI+10]

不要动od,用loadpe选择该进程,full dump~~~~`
运行ImportREC 1.6,选择这个进程。把OEP改为000B648D,IT AutoSearch -> get imports -> show invalid -> cut thunks -> Fix Dump ->选择前面dump下来的exe
双击运行,正常,用peid查壳,显示Microsoft Visual C++ 7.0,脱壳成功~

【一点问题】 脱壳前,程序2.41mb,脱壳以后4.48mb,我用loadpe->pe edit->区段->擦除.text1  .data1  .pdata三个区段,然后重建pe,程序减到1.9mb,能正常运行,但是只要关闭软件任何一个窗口就报错,虽然不影响使用,但是总觉得不完美,希望哪位大大告诉我该如何正确给脱壳后的文件减肥,谢谢~~~

【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
鼓励一下新人
PE工具的重建某些时候会导致问题
可以手动去掉无效数据,挪移其它区段
2005-9-6 14:51
0
雪    币: 242
活跃值: (163)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
3
比我强多了,给你一下
2005-9-6 16:43
0
雪    币: 333
活跃值: (369)
能力值: ( LV12,RANK:490 )
在线值:
发帖
回帖
粉丝
4
【一点问题】 脱壳前,程序2.41mb,脱壳以后4.48mb,我用loadpe->pe edit->区段->擦除.text1  .data1  .pdata三个区段,然后重建pe,程序减到1.9mb,能正常运行,但是只要关闭软件任何一个窗口就报错,虽然不影响使用,但是总觉得不完美,希望哪位大大告诉我该如何正确给脱壳后的文件减肥,谢谢~~~

没问题的呀!我的脱壳减肥之后2.0M正常运行没有任何问题的呀!
有点要注意:
-------
00400020      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00400030      00 00 00 00 00 00 00 00 00 00 00 00 28 01 00 00  
这里的28 01 00 00 会被Armadillo修改,所以用ImportREC 1.6,选择进程时总是会出现出错提示:不可用的pe文件
这里我们要把它改回来。
2005-9-7 10:15
0
游客
登录 | 注册 方可回帖
返回
//