【文章标题】: Armadillo.4X版本E语言脱壳
【文章作者】: niliu
【软件名称】: 风火助理
【下载地址】: http://www.namipan.com/d/%e5%8a%a9%e7%90%866.9-39-8.rar/fac9e773556c9e27de7a2d4d625aca6a7c728ea973ed1900
【使用工具】: ECE
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
Debug-Blocker
Enable Import Table Elimination
Enable Nanomites Processing
Enable Memory-Patching Protections
此程序的保护貌似还不少..
第一次写脱文 所以 写详细点 给自己留个纪念..
1. 双变单
下断 bp OpenMutexA
F9运行 (注意了. 如果有异常 手动添加异常 在F9一次)
CTRL+G:00401000
00401000 60 pushad
00401001 9C pushfd
00401002 68 54FD1200 push 12FD54 ; ASCII "97C::DAE2B8142D" (注意这里. 这里的值每台电脑都不相同 自己看堆栈)
00401007 33C0 xor eax,eax
00401009 50 push eax
0040100A 50 push eax
0040100B E8 BFD9407C call kernel32.CreateMutexA
00401010 9D popfd
00401011 61 popad
00401012 - E9 94DA407C jmp kernel32.OpenMutexA
00401017 90 nop
60 9C 68 54 FD 12 00 33 C0 50 50 E8 BF D9 40 7C 9D 61 E9 94 DA 40 7C 90
然后此处新建EIP F9运行 取消断点 再次来到00401000处 撤销选择处修改
第一步做完了.
2.避开Anti
下断 he OutputDebugStringA
F9运行 选中堆栈中%s%%s%%s%%s%%s%%s%之类的字符,点右键---数据窗口跟随
看地址处 第一个. 点右键---二进制---使用00填充
重复2次 然后取消断点
3、找Magic Jump,避开IAT加密
下断 he GetModuleHandleA
SHIFT+F9
来到: 7C80B731 > 8BFF mov edi,edi 断在了这里 取消断点
7C80B733 55 push ebp
7C80B734 8BEC mov ebp,esp
7C80B736 837D 08 00 cmp dword ptr ss:[ebp+8],0
7C80B73A 74 18 je short kernel32.7C80B754 在这里 下 硬件执行断点
7C80B73C FF75 08 push dword ptr ss:[ebp+8]
7C80B73F E8 C0290000 call kernel32.7C80E104
7C80B744 85C0 test eax,eax
7C80B746 74 08 je short kernel32.7C80B750
7C80B748 FF70 04 push dword ptr ds:[eax+4]
7C80B74B E8 7D2D0000 call kernel32.GetModuleHandleW
7C80B750 5D pop ebp
7C80B751 C2 0400 retn 4
然后SHIFT+F9运行 注意堆栈
0012943C /0012EB50
00129440 |00D364B5 返回到 00D364B5 来自 kernel32.GetModuleHandleA
00129444 |00D61BB0 ASCII "kernel32.dll"
00129448 |00D62B68 ASCII "VirtualAlloc"
0012944C |836C2E86
00129450 |004F23A0 风火助理.004F23A0
0012943C /0012EB50
00129440 |00D364D3 返回到 00D364D3 来自 kernel32.GetModuleHandleA
00129444 |00D61BB0 ASCII "kernel32.dll"
00129448 |00D62B5C ASCII "VirtualFree"
0012944C |836C2E86
00129450 |004F23A0 风火助理.004F23A0
00129188 /00129440
0012918C |00D18C74 返回到 00D18C74 来自 kernel32.GetModuleHandleA
00129190 |00129308 ASCII "kernel32.dll"
00129194 |00000000
00129198 |004F23A0 风火助理.004F23A0
0012919C |00000001
第3次 就是返回的时机 取消断点 AIT+F9 返回
00D18C74 8B55 F4 mov edx,dword ptr ss:[ebp-C] 返回到了这里
00D18C77 8B0D 84EFD600 mov ecx,dword ptr ds:[D6EF84]
00D18C7D 890491 mov dword ptr ds:[ecx+edx*4],eax
00D18C80 8B55 F4 mov edx,dword ptr ss:[ebp-C]
00D18C83 A1 84EFD600 mov eax,dword ptr ds:[D6EF84]
00D18C88 833C90 00 cmp dword ptr ds:[eax+edx*4],0
00D18C8C 75 5C jnz short 00D18CEA 这个 就是Jump了
00D18C8E 8B4D F8 mov ecx,dword ptr ss:[ebp-8]
00D18C91 8B51 08 mov edx,dword ptr ds:[ecx+8]
00D18C94 83E2 02 and edx,2
00D18C97 74 38 je short 00D18CD1
00D18C99 B8 02000000 mov eax,2
00D18C9E C1E0 02 shl eax,2
00D18CA1 8B0D 04CBD600 mov ecx,dword ptr ds:[D6CB04] ; 风火助理.004F23A0
00D18CA7 8B15 04CBD600 mov edx,dword ptr ds:[D6CB04] ; 风火助理.004F23A0
00D18CAD 8B35 04CBD600 mov esi,dword ptr ds:[D6CB04] ; 风火助理.004F23A0
00D18CB3 8B5E 78 mov ebx,dword ptr ds:[esi+78]
00D18CB6 335A 50 xor ebx,dword ptr ds:[edx+50]
00D18CB9 331C01 xor ebx,dword ptr ds:[ecx+eax]
00D18CBC 83E3 10 and ebx,10
00D18CBF F7DB neg ebx
00D18CC1 1BDB sbb ebx,ebx
00D18CC3 F7DB neg ebx
00D18CC5 0FB6C3 movzx eax,bl
00D18CC8 85C0 test eax,eax
00D18CCA 75 05 jnz short 00D18CD1
00D18CCC ^ E9 1BFFFFFF jmp 00D18BEC
00D18CD1 8D8D C8FEFFFF lea ecx,dword ptr ss:[ebp-138]
00D18CD7 51 push ecx
00D18CD8 FF15 88F0D500 call dword ptr ds:[D5F088] ; kernel32.LoadLibraryA
00D18CDE 8B55 F4 mov edx,dword ptr ss:[ebp-C]
00D18CE1 8B0D 84EFD600 mov ecx,dword ptr ds:[D6EF84]
00D18CE7 890491 mov dword ptr ds:[ecx+edx*4],eax
00D18CEA 8B55 F4 mov edx,dword ptr ss:[ebp-C]
00D18CED A1 84EFD600 mov eax,dword ptr ds:[D6EF84]
00D18CF2 833C90 00 cmp dword ptr ds:[eax+edx*4],0
00D18CF6 75 05 jnz short 00D18CFD
00D18CF8 ^ E9 EFFEFFFF jmp 00D18BEC 这里下断 运行到这里 取消断点 记得撤销选择处修改
这时 打开内存镜像 在00401000处下断 SHIFT+F9 直接来到OEP处
0040389F 55 push ebp 这里就是OEP了
004038A0 8BEC mov ebp,esp
004038A2 6A FF push -1
004038A4 68 F8724000 push 风火助理.004072F8
004038A9 68 04554000 push 风火助理.00405504
004038AE 64:A1 00000000 mov eax,dword ptr fs:[0]
004038B4 50 push eax
004038B5 64:8925 00000000 mov dword ptr fs:[0],esp
004038BC 83EC 58 sub esp,58
004038BF 53 push ebx
004038C0 56 push esi
004038C1 57 push edi
004038C2 8965 E8 mov dword ptr ss:[ebp-18],esp
004038C5 FF15 48704000 call dword ptr ds:[407048]
004038CB 33D2 xor edx,edx
004038CD 8AD4 mov dl,ah
004038CF 8915 94BA4000 mov dword ptr ds:[40BA94],edx
004038D5 8BC8 mov ecx,eax
004038D7 81E1 FF000000 and ecx,0FF
004038DD 890D 90BA4000 mov dword ptr ds:[40BA90],ecx
004038E3 C1E1 08 shl ecx,8
004038E6 03CA add ecx,edx
004038E8 890D 8CBA4000 mov dword ptr ds:[40BA8C],ecx
是不是代码全都变红了 这是因为穿山甲解码的原因 大家都应该知道 我不说了.. - -!
此时 脱壳修复把.
注意的是. 这里 不要用Arminline修复
下面 就是重要地方了 用工具E-Code Explorer修复 因为这个是E语言编写的...
ECE的使用方法: 在工具处 导出E格式原体 文件后缀是.ECF
在植入E格式原体
OK 修复成功 程序运行....
在这里感谢君王传世大哥的教导 感谢看雪的各位大哥们对我们小菜鸟的照顾 感谢MTV - -!.
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年03月19日 12:12:47
[课程]Linux pwn 探索篇!