| 
TA的每日心情|  | 慵懒 2018-6-6 15:51
 | 
|---|
 签到天数: 2 天 [LV.1]初来乍到 | 
 
| 【文章标题】: 龙行天下双层壳脱壳录 【文章作者】: 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:[0]
 004C738E  |.  50                 push eax
 004C738F  |.  64:8925 00000000   mov dword ptr fs:[0],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:[ebp+8],0
 7C80B6AA    74 18                je short kernel32.7C80B6C4        ;在此硬件执行断点
 7C80B6AC    FF75 08              push dword ptr ss:[ebp+8]
 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:[eax+4]
 7C80B6BB    E8 7D2D0000          call kernel32.GetModuleHand>
 7C80B6C0    5D                   pop ebp
 7C80B6C1    C2 0400              retn 4
 
 F9五次之后来到返回时机:
 0012C27C  /0012C508
 0012C280  |00B75331  返回到 00B75331 来自 kernel32.GetModuleHandleA
 0012C284  |0012C3BC  ASCII "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:[B950B8]  ; kernel32.LoadLibraryA
 00B75351   |8B0D 60D8B900        mov ecx,dword ptr ds:[B9D86>
 00B75357   |89040E               mov dword ptr ds:[esi+ecx],>
 00B7535A   \A1 60D8B900          mov eax,dword ptr ds:[B9D86>
 00B7535F    393C06               cmp dword ptr ds:[esi+eax],>
 00B75362    0F84 AD000000        je 00B75415                          ;MaGic跳改JE为JMP
 00B75368    33C9                 xor ecx,ecx
 00B7536A    8B03                 mov eax,dword ptr ds:[ebx]
 00B7536C    3938                 cmp dword ptr ds:[eax],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:[ebx-4],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:[ebp+1C]
 7C81063F    FF75 18              push dword ptr ss:[ebp+18]
 7C810642    FF75 14              push dword ptr ss:[ebp+14]
 7C810645    FF75 10              push dword ptr ss:[ebp+10]
 7C810648    FF75 0C              push dword ptr ss:[ebp+C]
 7C81064B    FF75 08              push dword ptr ss:[ebp+8]
 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:[esi+4]
 00B8CF91    FF76 08              push dword ptr ds:[esi+8]
 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:[ebp+422],>
 004B6029    899D 22040000        mov dword ptr ss:[ebp+422],>
 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 编辑 ]
 | 
 
x本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?加入我们 
  |