glts 发表于 2007-6-8 13:09:17

脱ARM+ASPACK双层壳

【文章标题】: 龙行天下双层壳脱壳录
【文章作者】: glts
【软件名称】: 龙行天下
【下载地址】: 自己搜索下载
【加壳方式】: ARM+ASPACK
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
★ 目标为Armadillo保护
保护系统级别为 (标准版)
◆所用到的保护模式有◆
标准保护 或 最小保护模式
【备份密钥设置】
无任何注册表操作
【程序压缩设置】
较好/较慢地压缩方式
【其它保护设置】
------------------------------------------
此程序采用的是外壳ARM单进程+ASPACK加壳方式,较简单。OD载入来到入口:
004C7379 >/$55               push ebp
004C737A|.8BEC               mov ebp,esp
004C737C|.6A FF            push -1
004C737E|.68 78C24E00      push AutoXYDE.004EC278
004C7383|.68 606D4C00      push AutoXYDE.004C6D60      ;SE 句柄安装
004C7388|.64:A1 00000000   mov eax,dword ptr fs:
004C738E|.50               push eax
004C738F|.64:8925 00000000   mov dword ptr fs:,esp

一、GetModuleHandleA寻找返回时机,找到MaGic跳
7C80B6A1 >8BFF               mov edi,edi
7C80B6A3    55                   push ebp
7C80B6A4    8BEC               mov ebp,esp
7C80B6A6    837D 08 00         cmp dword ptr ss:,0
7C80B6AA    74 18                je short kernel32.7C80B6C4      ;在此硬件执行断点
7C80B6AC    FF75 08            push dword ptr ss:
7C80B6AF    E8 C0290000          call kernel32.7C80E074
7C80B6B4    85C0               test eax,eax
7C80B6B6    74 08                je short kernel32.7C80B6C0
7C80B6B8    FF70 04            push dword ptr ds:
7C80B6BB    E8 7D2D0000          call kernel32.GetModuleHand>
7C80B6C0    5D                   pop ebp
7C80B6C1    C2 0400            retn 4

F9五次之后来到返回时机:
0012C27C/0012C508
0012C280|00B75331返回到 00B75331 来自 kernel32.GetModuleHandleA
0012C284|0012C3BCASCII "kernel32.dll"
0012C288|00000002
0012C28C|00BD1958

取消硬件断点 ALT+F9返回来到:

00B75342   /75 16                jnz short 00B7535A
00B75344   |8D85 B4FEFFFF      lea eax,dword ptr ss:[ebp-1>
00B7534A   |50                   push eax
00B7534B   |FF15 B850B900      call dword ptr ds:; kernel32.LoadLibraryA
00B75351   |8B0D 60D8B900      mov ecx,dword ptr ds:[B9D86>
00B75357   |89040E               mov dword ptr ds:,>
00B7535A   \A1 60D8B900          mov eax,dword ptr ds:[B9D86>
00B7535F    393C06               cmp dword ptr ds:,>
00B75362    0F84 AD000000      je 00B75415                        ;MaGic跳改JE为JMP
00B75368    33C9               xor ecx,ecx
00B7536A    8B03               mov eax,dword ptr ds:
00B7536C    3938               cmp dword ptr ds:,edi
00B7536E    74 06                je short 00B75376

在00B75362此行按回车来到:
00B75415    83C3 0C            add ebx,0C
00B75418    83C6 04            add esi,4
00B7541B    397B FC            cmp dword ptr ds:,ed>
00B7541E^ 0F85 CCFEFFFF      jnz 00B752F0
00B75424    EB 03                jmp short 00B75429                   ;在此F2下断F9运行

在00B7541E此行回车向上把上面修改的 jmp 00B75415复原成je 00B75415以防止壳检测到修改

二、CreateThread找OEP来到:
7C810637 >8BFF               mov edi,edi                  ;F2下断SHIFT+F9运行,取消断点ALT+F9返回
7C810639    55                   push ebp
7C81063A    8BEC               mov ebp,esp
7C81063C    FF75 1C            push dword ptr ss:
7C81063F    FF75 18            push dword ptr ss:
7C810642    FF75 14            push dword ptr ss:
7C810645    FF75 10            push dword ptr ss:
7C810648    FF75 0C            push dword ptr ss:
7C81064B    FF75 08            push dword ptr ss:
7C81064E    6A FF                push -1
7C810650    E8 D7FDFFFF          call kernel32.CreateRemoteT>

返回到这里:
00B7A8E6    5E                   pop esi                     ; AutoXYDE.004EC718
00B7A8E7    C9                   leave
00B7A8E8    C3                   retn

接下来我们F8单步走...走几步后来到:
00B8CF89    83F9 01            cmp ecx,1
00B8CF8C    75 22                jnz short 00B8CFB0
00B8CF8E    FF76 04            push dword ptr ds:
00B8CF91    FF76 08            push dword ptr ds:
00B8CF94    6A 00                push 0
00B8CF96    E8 2639FFFF          call 00B808C1
00B8CF9B    50                   push eax
00B8CF9C    A1 E018BA00          mov eax,dword ptr ds:[BA18E>
00B8CFA1    8B48 78            mov ecx,dword ptr ds:[eax+7>
00B8CFA4    3348 5C            xor ecx,dword ptr ds:[eax+5>
00B8CFA7    3348 14            xor ecx,dword ptr ds:[eax+1>
00B8CFAA    2BF9               sub edi,ecx
00B8CFAC    FFD7               call edi                            ;F7进入后就过了第一层壳
00B8CFAE    8BD8               mov ebx,eax
00B8CFB0    5F                   pop edi
00B8CFB1    8BC3               mov eax,ebx
00B8CFB3    5E                   pop esi
00B8CFB4    5B                   pop ebx
00B8CFB5    C3                   retn

//00B8CFAC    FFD7               call edi   ;F7跟进后来到第二层壳的入口

004B6001    60                   pushad
004B6002    E8 03000000          call AutoXYDE.004B600A
004B6007- E9 EB045D45          jmp 45A864F7
004B600C    55                   push ebp
004B600D    C3                   retn
004B600E    E8 01000000          call AutoXYDE.004B6014
004B6013    EB 5D                jmp short AutoXYDE.004B6072
004B6015    BB EDFFFFFF          mov ebx,-13
004B601A    03DD               add ebx,ebp
004B601C    81EB 00600B00      sub ebx,0B6000
004B6022    83BD 22040000 00   cmp dword ptr ss:,>
004B6029    899D 22040000      mov dword ptr ss:,>
004B602F    0F85 65030000      jnz AutoXYDE.004B639A

三、第二层壳就非常简单了,此程序我放在硬盘里好久好久以前不会脱,主要原因是对壳不了解
      所以学东西还是不能急于求成,得把基础的学好了才能四半攻倍,接下来ESP定律就可以过第二层壳了
004B6001    60                   pushad
004B6002    E8 03000000          call AutoXYDE.004B600A               ;F8单步到此行

在命令行HR 0012F578(寄存器esp的值)回车,F9运行:

004B63B0   /75 08                jnz short AutoXYDE.004B63BA
004B63B2   |B8 01000000          mov eax,1
004B63B7   |C2 0C00            retn 0C
004B63BA   \68 B4204900          push AutoXYDE.004920B4
004B63BF    C3                   retn

F8单步来到程序的OEP:
004920B4    55                   push ebp
004920B5    8BEC               mov ebp,esp
004920B7    83C4 F4            add esp,-0C
004920BA    53                   push ebx
004920BB    B8 941E4900          mov eax,AutoXYDE.00491E94
004920C0    E8 4F47F7FF          call AutoXYDE.00406814
004920C5    8B1D 98574900      mov ebx,dword ptr ds:[49579>; AutoXYDE.004967D0

用LordPE,DUMP程序,ImportREC修复IAT程序运行正常

四、优化区段,加壳的原程序556KB,脱壳修复后的程序1.48M接下来把一些没用的区段删除
      优化是为了让程序运行速度更快,但也不能优化过度否则可能会造成只能在自己的机器上可以运行
      最后区段减肥成,其它的可以删除掉,优化后的文件大小680K ^_^

CODE
DATA
.IDATA
.RDATA
.RSRC
.ASPACK
.MACKT


--------------------------------------------------------------------------------
【版权声明】: 本文原创于PYG技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年06月08日 下午 01:06:43

[ 本帖最后由 glts 于 2007-6-8 13:12 编辑 ]

a__p 发表于 2007-6-8 15:26:50

支持,顺便下载来练手/:09

[ 本帖最后由 a__p 于 2007-6-8 15:30 编辑 ]

冷血书生 发表于 2007-6-8 15:32:42

跟着来学习,支持!

bear10214 发表于 2007-6-8 20:31:53

跟着一步一步学!

iawen 发表于 2007-9-3 21:34:13

我也下下来试试,呵呵

zbkzj 发表于 2007-9-7 15:46:13

顺便下载来练手跟着一步一步学

starsoul 发表于 2007-9-7 22:47:12

优化区段能不能写详细点?这个我还不会.

lqlzhq 发表于 2007-9-8 10:02:01

太好了,我正要这方面的资料
页: [1]
查看完整版本: 脱ARM+ASPACK双层壳