首页
社区
课程
招聘
请教FLY大侠一个脱壳问题
发表于: 2005-2-3 09:27 3470

请教FLY大侠一个脱壳问题

2005-2-3 09:27
3470
仿壹次脱壳法――脱Armadillo 3.00a-3.61双进程标准壳

【脱壳目标】 Frontbase Image to Icon v2.00
【加壳方式】 Armadillo 3.00a - 3.61 -> Silicon Realms Toolworks
【保护方式】 双进程标准方式加壳
【脱壳平台】 Win2000
【脱壳工具】 Peid、Ollydbg、Loadpe、Imprec1.6F
【脱壳说明】 在参考其他脱文的基础上,深入学习fly大侠撰写的《壹次脱壳法――Armadillo 双进程标准壳 快速脱壳Mr.Captor》,初步掌握Armadillo 3.00a-3.61双进程标准壳的脱壳技巧,及时提出在脱壳中遇到的一些难题,仅供大家学习、交流和解答。
【下载页面】
             http://www.abcdown.com/soft/5148.htm
             (网上有许多下载地址)
【脱壳步骤】
一、双进程向单进程转变
(一)设置Ollydbg,载入Frontbase Image to Icon v2.00
00511000 > 60               PUSHAD *进入OD后停在这儿*
00511001   E8 00000000      CALL image2ic.00511006
00511006   5D               POP EBP
00511007   50               PUSH EAX
00511008   51               PUSH ECX
00511009   EB 0F            JMP SHORT image2ic.0051101A
(二)下断点:BP OpenMutexA   
77E6C503 > 55               PUSH EBP*断在这,看看堆栈*
77E6C504   8BEC             MOV EBP,ESP
77E6C506   51               PUSH ECX
77E6C507   51               PUSH ECX
77E6C508   837D 10 00       CMP DWORD PTR SS:[EBP+10],0
BP OpenMutexA断下 时的堆栈:
0012F574   004E6043  /CALL 到 OpenMutexA 来自 image2ic.004E603D
0012F578   001F0001  |Access = 1F0001
0012F57C   00000000  |Inheritable = FALSE
0012F580   0012FBB4  \MutexName = "20C::DAA088927B"*注意0012FBB4*
(三)按Ctrl+G,输入401000 , 键入以下代码
00401000    60               PUSHAD
00401001    9C               PUSHFD
00401002   68 B4FB1200   PUSH 12FBB4      * 堆栈里看到的值*
00401007    33C0             XOR EAX,EAX 
00401009    50               PUSH EAX
0040100A    50               PUSH EAX
0040100B    E8 6D97A677      CALL KERNEL32.CreateMutexA
00401010    9D               POPFD
00401011    61               POPAD
00401012   -E9 ECB4A677      JMP KERNEL32.OpenMutexA
在401000处新建起源,F9运行,再次中断在OpenMutexA处。
二、、Magic Jump,避开IAT加密
(一)取消以前断点,下断:BP GetModuleHandleA
(注明:winxp平台下BP GetModuleHandleA+5 断点)
77E63DFC G> 55               PUSH EBP*断在这儿,注意看堆栈*
77E63DFD    8BEC             MOV EBP,ESP
77E63DFF    837D 08 00       CMP DWORD PTR SS:[EBP+8],0
77E63E03    74 18            JE SHORT KERNEL32.77E63E1D
77E63E05    FF75 08          PUSH DWORD PTR SS:[EBP+8]
77E63E08    E8 87FFFFFF      CALL KERNEL32.77E63D94
BP GetModuleHandleA中断时的堆栈:
0012EFA4   78001E28  /CALL 到 GetModuleHandleA 来自 MSVCRT.78001E22
0012EFA8   780332D4  \pModule = "KERNEL32"
(二)按F9多次,注意看BP GetModuleHandleA时的堆栈变化
(说明:程序将中断若干次,判断返回程序的最佳时机,然后Alt+F9返回程序)
中断后第一次按F9时的堆栈:
0012F02C   77A03922  /CALL 到 GetModuleHandleA 来自 OLEAUT32.77A0391C
0012F030   779A0630  \pModule = "kernel32.dll"
0012F034   77A03AA1  返回到 OLEAUT32.77A03AA1 来自 OLEAUT32.77A038E0
中断后第二次按F9时的堆栈:
0012F020   77A06ACB  /CALL 到 GetModuleHandleA 来自 OLEAUT32.77A06AC5
0012F024   779A0994  \pModule = "KERNEL32"
0012F028   77A03B4A  返回到 OLEAUT32.77A03B4A 来自 OLEAUT32.77A06AC0
中断后第三次按F9时的堆栈:
0012EF5C   779A832B  /CALL 到 GetModuleHandleA 来自 OLEAUT32.779A8325
0012EF60   77A1ADA8  \pModule = "KERNEL32.DLL"
0012EF64   779A7982  返回到 OLEAUT32.779A7982 来自 OLEAUT32.779A8320
中断后第四次按F9时的堆栈:
0012EF5C   779A832B  /CALL 到 GetModuleHandleA 来自 OLEAUT32.779A8325
0012EF60   77A1ADA8  \pModule = "KERNEL32.DLL"
0012EF64   779C0082  返回到 OLEAUT32.779C0082 来自 OLEAUT32.779A8320
中断后第五次按F9时的堆栈:
0012F518   004E5248  /CALL 到 GetModuleHandleA 来自 image2ic.004E5242
0012F51C   00000000  \pModule = NULL
中断后第六次按F9时的堆栈:
0012D8F0   72CBB367  /CALL 到 GetModuleHandleA 来自 72CBB361
0012D8F4   72CBB230  \pModule = "KERNEL32.DLL"
中断后第七次按F9时的堆栈:
0012D680   72C7BAF6  /CALL 到 GetModuleHandleA 来自 72C7BAF0
0012D684   72C574C4  \pModule = "KERNEL32.DLL"
中断后第八次按F9时的堆栈:
0123F1E0   77E69EE1  /CALL 到 GetModuleHandleA 来自 KERNEL32.77E69EDC
0123F1E4   00000000  \pModule = NULL
0123F1E8   77E69ECA  返回到 KERNEL32.77E69ECA 来自 KERNEL32.77E69EDA
中断后第九次按F9时的堆栈:
0012EA40   00BE2E93  /CALL 到 GetModuleHandleA 来自 00BE2E8D
0012EA44   00000000  \pModule = NULL
中断后第十次按F9时的堆栈:
0012EA74   00BE2B29  /CALL 到 GetModuleHandleA 来自 00BE2B23
0012EA78   00000000  \pModule = NULL
中断后第十一次按F9时的堆栈:
0012E37C   10004EFA  /CALL 到 GetModuleHandleA 来自 10004EF4
0012E380   1000A1FC  \pModule = "KERNEL32"
中断后第十二次按F9时的堆栈:
0012EA74   00BE2BE4  /CALL 到 GetModuleHandleA 来自 00BE2BDE
0012EA78   00000000  \pModule = NULL
中断后第十三次按F9时的堆栈:
0012EA74   00BE2C50  /CALL 到 GetModuleHandleA 来自 00BE2C4A
0012EA78   00000000  \pModule = NULL
中断后第十四次按F9时的堆栈:
0012EA74   00BE2D76  /CALL 到 GetModuleHandleA 来自 00BE2D70*断在这儿时,然后按Alt+F9返回程序,如果继续按F9,程序就会终止*
0012EA78   00000000  \pModule = NULL
(三)按Alt+F9返回主程序
00BE2D76   50               PUSH EAX   ; image2ic.00400000*程序停留在这儿*
00BE2D77   FF37             PUSH DWORD PTR DS:[EDI]
00BE2D79   83C7 04          ADD EDI,4
00BE2D7C   FF75 F8          PUSH DWORD PTR SS:[EBP-8]
00BE2D7F   FF75 B0          PUSH DWORD PTR SS:[EBP-50]
00BE2D82   FF75 BC          PUSH DWORD PTR SS:[EBP-44]
00BE2D85   FF75 08          PUSH DWORD PTR SS:[EBP+8]
00BE2D88   FF75 F4          PUSH DWORD PTR SS:[EBP-C]
00BE2D8B   68 000F0150      PUSH 50010F00
00BE2D90   57               PUSH EDI
00BE2D91   68 60CEBE00      PUSH 0BECE60
00BE2D96   53               PUSH EBX
00BE2D97   FF15 2C64BE00    CALL DWORD PTR DS:[BE642C]
SER32.CreateWindowExA
00BE2D9D   6A 01            PUSH 1
00BE2D9F   FF75 C8          PUSH DWORD PTR SS:[EBP-38]
00BE2DA2   6A 30            PUSH 30
00BE2DA4   50               PUSH EAX
00BE2DA5   FF15 9864BE00    CALL DWORD PTR DS:[BE6498]               ; USER32.SendMessageA
00BE2DAB   8B45 B4          MOV EAX,DWORD PTR SS:[EBP-4C]
00BE2DAE   8145 E0 04010000 ADD DWORD PTR SS:[EBP-20],104
00BE2DB5   0145 F4          ADD DWORD PTR SS:[EBP-C],EAX
00BE2DB8   FF45 F0          INC DWORD PTR SS:[EBP-10]
00BE2DBB   8B45 F0          MOV EAX,DWORD PTR SS:[EBP-10]
00BE2DBE   FF45 EC          INC DWORD PTR SS:[EBP-14]
00BE2DC1   3B45 E8          CMP EAX,DWORD PTR SS:[EBP-18]
00BE2DC4   8B7D D0          MOV EDI,DWORD PTR SS:[EBP-30]
00BE2DC7  ^7C 97            JL SHORT 00BE2D60
00BE2DC9   8B45 B8          MOV EAX,DWORD PTR SS:[EBP-48]
00BE2DCC   8B4D E4          MOV ECX,DWORD PTR SS:[EBP-1C]
00BE2DCF   0145 08          ADD DWORD PTR SS:[EBP+8],EAX
00BE2DD2   8B45 E8          MOV EAX,DWORD PTR SS:[EBP-18]
00BE2DD5   0145 FC          ADD DWORD PTR SS:[EBP-4],EAX
00BE2DD8   8B45 C4          MOV EAX,DWORD PTR SS:[EBP-3C]
00BE2DDB   FF45 D8          INC DWORD PTR SS:[EBP-28]
00BE2DDE   0145 D4          ADD DWORD PTR SS:[EBP-2C],EAX
00BE2DE1   394D D8          CMP DWORD PTR SS:[EBP-28],ECX
00BE2DE4  ^0F8C 31FFFFFF    JL 00BE2D1B
  脱壳进行到这一步,有点儿不知道如何操作下一步,也不知道上述的步聚是否有问题,请FLY大侠指点一二。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 257
活跃值: (56)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
试试一次F9,一次 返回
这样虽然慢一点,不过肯定能碰上magic jmp
p.s:magic jmp长得都很像(我觉得是一摸一样)
找到了改掉就是了,
标准壳很容易的
楼下继续
2005-2-3 11:52
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
3
看fxyang的相关教程
2005-2-3 12:09
0
游客
登录 | 注册 方可回帖
返回
//