【破解作者】 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,能正常运行,但是只要关闭软件任何一个窗口就报错,虽然不影响使用,但是总觉得不完美,希望哪位大大告诉我该如何正确给脱壳后的文件减肥,谢谢~~~
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法