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
|