- UID
- 31985
注册时间2007-5-6
阅读权限40
最后登录1970-1-1
独步武林
该用户从未签到
|
【文章标题】: Armadillo4.4主程序脱壳
【文章作者】: 千里之外
【作者QQ号】: 506398911
【软件名称】: Armadillo4.4
【下载地址】: http://pediy.com/tools/packers.htm
【使用工具】: OD Import REConstructor v1.6 FINAL LordPE Enjoy.exe ArmaDetach Armadillo Find Protected V1.8
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
这个可以说是穿山甲的最高保护吧 不过没有代码拼接这个保护 我们用 Find Protected V1.8 看下他的保护
<------- 09-04-2008 18:56:47 ------->
C:\Armadillo\Armadillo.exe
!- Protected Armadillo
Protection system (Professional)
!- <Protection Options>
Debug-Blocker
CopyMem-II
Enable Import Table Elimination
Enable Nanomites Processing(这个就是传说中的 CC 我们最后用工具处理)
Enable Memory-Patching Protections
!- <Backup Key Options>
Main Key Only, No Backup Keys
!- <Compression Options>
Best/Slowest Compression
!- <Other Options>
!- Version 4.40 31October2005
!- Elapsed Time 00h 00m 06s 688ms
这里我们也是分步骤进行
1.手工得到未加密的IAT
2.用ArmaDetach 和ArmInline.0.96.final.chs 辅助修复后 DUMP
3.用Enjoy 修复CC
4.用PeRebuilder减肥
好了 我们开始
1.手工得到未加密的IAT
ArmaDetach 运行它 选择 COPYMEM-II 把原程序拖到里面
Filename: Armadillo.exe
Parent process iD: [000004F0]
Processing...
[PROTECTiON SYSTEM]
Professional Edition
[PROTECTiON OPTiONS]
Debug-Blocker protection detected
CopyMem-II protection detected
Memory-Patching Protections enabled
Import Table Elimination enabled
Nanomites Processing enabled
[CHiLD iNFO]
Crypto call found: [004B7F05]
Child process iD: [00000458] 这个是子进程的ID
Entry point: [00448BB0] 这个是程序的OEP
Original bytes: [558BEC6A] 这个是程序开始的字节
Detached successfully :) 这个是成功提示了 ^_^
我们用OD附加458这个进程 返回后来到这里
00448BB0 - EB FE jmp short 00448BB0
00448BB2 90 nop
00448BB3 90 nop
00448BB4 FF68 D8 jmp far fword ptr [eax-28]
00448BB7 5A pop edx
00448BB8 45 inc ebp
00448BB9 0068 4C add byte ptr [eax+4C], ch
00448BBC 894400 64 mov dword ptr [eax+eax+64], eax
00448BC0 A1 00000000 mov eax, dword ptr [0]
00448BC5 50 push eax
这个时候呢 我们要修改开头的字节 这个就是工具里面的提示咯
Original bytes: [558BEC6A] 这个是程序开始的字节
这个时候IAT是加密的 还有IAT 乱序没处理 不是我们DUMP下的时机 这个时候我们要在开个OD找IAT 复制到这个里面
我们首先找下IAT的标志 一会好处理 CTRL+B FF 25 来到这里
0043D3EA - FF25 E0B20001 jmp dword ptr [100B2E0] ; VERSION.VerQueryValueA
从数据窗口找个IAT
0100B2C8 7C809AE4 kernel32.VirtualFree
0100B2CC 77D18C2E USER32.SetTimer
其实这个在我们修复后是要变化的 我们主要找的是IAT的标志 好在我们处理另一个进程的时候找IAT 我们记录下他的二进制
E4 9A 80 7C 2E 8C D1 77
其实是16进制的 呵呵 好了 这个才进入我们的主题 关闭OD 和刚刚那个ArmaDetach 这个主要是防止机器卡 还有些莫名其妙的
问题
这个时候 我们用ArmInline.0.96.final.chs 处理 原程序 得到子进程
记得选择 DETACH 这个选项
<------- 09-04-2008 19:19:18 ------->
C:\Armadillo\Armadillo.exe
!- Protected Armadillo
Protection system (Professional)
!- <Protection Options>
Debug-Blocker
CopyMem-II
Enable Import Table Elimination
Enable Nanomites Processing
Enable Memory-Patching Protections
!- <Backup Key Options>
Main Key Only, No Backup Keys
!- <Compression Options>
Best/Slowest Compression
!- <Other Options>
<- Start <Stop debug>
!- Child detach
Child process ID: 00000754 我们附加这个进程
Entry point: 004D8000
Original bytes: 60E8 这里我们一会要修改入口 改成这个
!- Elapsed Time 00h 00m 06s 360ms
这里我们才开始我们找IAT的真正之旅
同样要修改入口 原入口是这样
004D8000 >- EB FE jmp short <模块入口点>
004D8002 0000 add byte ptr [eax], al
004D8004 0000 add byte ptr [eax], al
004D8006 5D pop ebp
004D8007 50 push eax
004D8008 51 push ecx
004D8009 0FCA bswap edx
004D800B F7D2 not edx
004D800D 9C pushfd
004D800E F7D2 not edx
004D8010 0FCA bswap edx
修改后
004D8000 > 60 pushad
004D8001 E8 00000000 call 004D8006
004D8006 5D pop ebp
004D8007 50 push eax
004D8008 51 push ecx
004D8009 0FCA bswap edx
这个时候要寻找魔幻跳转咯
k:WaitForDebugEvent(patch)
k:WriteProcessMemory(非OEP)
k:DebugActiveProcess(找子程)
k:OpenMutexA(双进程转单进程)
k:GetSystemTime(补丁KEY)
K:VirtualProtect(用于5.x)
K:CreateFileMappingA(用于5.x)
K:GetModuleHandleA(魔幻跳转)
K:CreateThread(寻找OEP)
我们下这个
K:GetModuleHandleA(魔幻跳转)
SHIT+F9后有异常 我们添加这个异常
后面还有几个异常 我们都加上
7C80B6A1 > 8BFF mov edi, edi
7C80B6A3 55 push ebp
7C80B6A4 8BEC mov ebp, esp
7C80B6A6 837D 08 00 cmp dword ptr [ebp+8], 0
7C80B6AA 74 18 je short 7C80B6C4
7C80B6AC FF75 08 push dword ptr [ebp+8]
7C80B6AF E8 C0290000 call 7C80E074
7C80B6B4 85C0 test eax, eax
7C80B6B6 74 08 je short 7C80B6C0
7C80B6B8 FF70 04 push dword ptr [eax+4]
7C80B6BB E8 7D2D0000 call GetModuleHandleW
7C80B6C0 5D pop ebp
7C80B6C1 C2 0400 retn 4
找准返回时机 来到下面(这里发现这个断点一运行就退出了 这里我们用下辅助断点K:VirtualProtect(用于5.x)
K:CreateFileMappingA(用于5.x) 这两个分别断下后返回 再下最后那个断点 )
00F06095 8B0D AC40F300 mov ecx, dword ptr [F340AC]
00F0609B 89040E mov dword ptr [esi+ecx], eax
00F0609E A1 AC40F300 mov eax, dword ptr [F340AC]
00F060A3 391C06 cmp dword ptr [esi+eax], ebx
00F060A6 75 16 jnz short 00F060BE
00F060A8 8D85 B4FEFFFF lea eax, dword ptr [ebp-14C]
00F060AE 50 push eax
00F060AF FF15 BC62F200 call dword ptr [F262BC] ; kernel32.LoadLibraryA
00F060B5 8B0D AC40F300 mov ecx, dword ptr [F340AC]
00F060BB 89040E mov dword ptr [esi+ecx], eax
00F060BE A1 AC40F300 mov eax, dword ptr [F340AC]
00F060C3 391C06 cmp dword ptr [esi+eax], ebx
00F060C6 0F84 2F010000 je 00F061FB JMP 掉 躲避IAT加密
00F060CC 33C9 xor ecx, ecx
下这个K:CreateThread(寻找OEP)
寻找OEP
00448BB0 58 pop eax ; 00F1FB2B
00448BB1 0AAD CCF2E999 or ch, byte ptr [ebp+99E9F2CC]
00448BB7 FC cld
00448BB8 48 dec eax
00448BB9 8129 EA84C541 sub dword ptr [ecx], 41C584EA
00448BBF C2 AC81 retn 81AC
00448BC2 41 inc ecx
00448BC3 A6 cmps byte ptr [esi], byte ptr es:[edi>
00448BC4 0D D1252F28 or eax, 282F25D1
00448BC9 8141 A6 0D02ADF>add dword ptr [ecx-5A], FEAD020D
00448BD0 5E pop esi
00448BD1 D7 xlat byte ptr [ebx+al]
看下 OEP都这个样子了 但是这个不是我们想要的 我们要找的是IAT 所以再内存里面找我们开始的 IAT标志
找到IAT的开始
01104958 7C802442 kernel32.Sleep
0110495C 00F075F2
01104960 7C81DC03 kernel32.SetStdHandle
01104964 77EFADC3 GDI32.MoveToEx
我们把这些未加密的IAT复制下来 第一步 我们就完成了
42 24 80 7C F2 75 F0 00 03 DC 81 7C C3 AD EF 77 3D 04 93 7C AB 1E 83 7C 10 CC DC 77 5B CF 81 7C
08 C1 80 7C F2 4A 81 7C AE B6 D1 77 2A 74 F0 00 C8 BD D1 77 0A 6C EF 77 78 75 F0 00 63 75 F0 00
BF 74 F0 00 24 74 F0 00 C0 74 F0 00 55 FA D1 77 21 B2 EF 77 54 74 F0 00 39 5E EF 77 65 C4 D1 77
F4 74 F0 00 76 75 F0 00 33 B9 D1 77 15 99 80 7C A3 74 F0 00 DE 2A 81 7C 73 75 F0 00 79 75 F0 00
42 F6 D1 77 C3 CA DC 77 BE 74 F0 00 F0 BE D1 77 2D 75 F0 00 F0 74 F0 00 AD 74 F0 00 2B 74 F0 00
F8 75 F0 00 E1 75 F0 00 79 75 F0 00 B0 5B 83 7C E8 8D 83 7C 7D 74 F0 00 A7 27 81 7C E7 EB DA 77
1F 76 F0 00 6C BF D1 77 EB 5E EF 77 A4 D8 D1 77 6F 6E EF 77 D0 75 F0 00 D2 75 F0 00 E4 74 F0 00
F0 74 F0 00 2B 21 D3 77 FF 19 BD 77 29 75 F0 00 FE 4F 83 7C 51 9A 80 7C F7 75 F0 00 EB 74 F0 00
FF 08 86 7C ED 10 92 7C 1F 75 F0 00 77 1D 80 7C 05 02 18 5D AB 74 F0 00 7C 74 F0 00 BF D9 EF 77
90 A4 80 7C EE D4 D1 77 51 0E 81 7C D4 A0 80 7C C7 F2 D2 77 13 15 D3 77 61 75 F0 00 6E 75 F0 00
1B 76 DA 77 29 74 F0 00 6B 17 80 7C FB 74 F0 00 9C 92 80 7C CE 3D D2 77 A3 C7 D3 77 BD 74 F0 00
D4 B6 D1 77 E5 75 F0 00 35 14 82 7C 03 CE 81 7C 62 07 D2 77 56 2B 83 7C 37 06 81 7C 6F 75 F0 00
84 FA D2 77 2E 74 F0 00 B3 F3 D1 77 87 0D 81 7C 0E 18 80 7C 5C 94 80 7C F9 74 F0 00 77 75 F0 00
59 74 F0 00 60 DA D1 77 2F B7 D1 77 7A 75 F0 00 9C 8F D1 77 DA CD 81 7C 5D 94 D1 77 D4 75 F0 00
73 74 F0 00 54 5D 83 7C CF 65 17 5D 85 CB D1 77 D8 7C 33 76 A0 AD 80 7C EF 74 F0 00 77 D0 80 7C
31 03 93 7C D1 61 EF 77 4C 74 F0 00 44 20 83 7C 1F DC EF 77 28 97 80 7C 73 75 F0 00 FC 74 F0 00
78 8E D1 77 40 7A 95 7C 39 2F 81 7C 60 75 F0 00 51 C6 D3 77 27 F1 D2 77 3B 1F D3 77 2A 2E 86 7C
C7 74 F0 00 F7 28 83 7C F8 0E 81 7C EE 74 F0 00 1D B6 D1 77 2F BB D1 77 28 75 F0 00 D7 74 F0 00
D8 74 F0 00 C9 59 D2 77 EC DB D1 77 ED 09 93 7C 3F E9 80 7C EA DA D1 77 CE 1A D3 77 A8 CC 80 7C
D7 74 F0 00 69 BC 80 7C CA 5D 83 7C AF 74 F0 00 50 1A BD 77 D7 ED 80 7C C9 74 F0 00 CF B4 80 7C
F7 74 F0 00 0E 97 D1 77 1D 2F 81 7C B6 2B 81 7C F5 74 F0 00 0C B1 D3 77 57 C2 D1 77 9E C5 D1 77
85 0B 61 7D F3 74 F0 00 65 75 F0 00 78 34 83 7C F4 C7 17 5D 7E 74 F0 00 E4 9A 80 7C 2E 8C D1 77
F7 74 F0 00 E7 4A 81 7C 16 1E 80 7C D4 74 F0 00 BA 18 BD 77 C8 75 F0 00 F0 54 D2 77 C9 74 F0 00
77 75 F0 00 ED 75 F0 00 71 BE D1 77 E6 E6 EF 77 AD 75 F0 00 41 26 81 7C 6E 75 F0 00 D8 74 F0 00
F6 75 F0 00 B8 96 D1 77 77 0A 81 7C F0 75 F0 00 37 02 D3 77 76 2E 81 7C FC 74 F0 00 19 FF 80 7C
2A 83 EF 77 F0 6B DA 77 05 10 92 7C FD 74 F0 00 75 74 F0 00 23 C1 DC 77 5E A3 80 7C DB 75 F0 00
D4 A7 80 7C F2 75 F0 00 76 BD D1 77 27 74 F0 00 4B BE D1 77 57 74 F0 00 F5 DD 80 7C 80 5B EF 77
2D 75 F0 00 D6 74 F0 00 E7 74 F0 00 CA 75 F0 00 D4 4F A2 71 F1 75 F0 00 E3 E2 EF 77 05 A9 EF 77
59 22 83 7C 7C 75 F0 00 74 B9 80 7C F8 75 F0 00 87 5D EF 77 EC 75 F0 00 6F 2D D2 77 F9 74 F0 00
82 FE 80 7C F4 74 F0 00 14 E7 EF 77 D9 74 F0 00 AA 74 F0 00 42 8C D1 77 25 02 D3 77 2B F5 D2 77
02 E0 D2 77 28 74 F0 00 C7 74 F0 00 FD 74 F0 00 0D D6 D1 77 6F 75 F0 00 B2 C2 D1 77 32 75 F0 00
2F 75 F0 00 8C 0C D2 77 89 BE 80 7C 94 74 F0 00 88 C1 D1 77 5C 74 F0 00 F1 9E 80 7C 2A 74 F0 00
47 9B 80 7C E5 ED DA 77 97 CC 80 7C 27 74 F0 00 F6 8B D1 77 1A 75 F0 00 87 03 D3 77 33 FF D1 77
2E 75 F0 00 1E 31 32 76 28 74 F0 00 D4 05 93 7C FE AC EF 77 79 75 F0 00 05 B9 80 7C DA 11 81 7C
C7 86 D1 77 91 4A 1B 5D 09 B6 D1 77 77 DF 81 7C 6D 13 86 7C F1 B1 EF 77 C0 FF D2 77 B5 9F 80 7C
18 76 F0 00 58 74 F0 00 F9 D7 D1 77 EA 17 82 7C F8 9B 80 7C CA C6 D3 77 A1 B6 80 7C 02 00 D3 77
2C 74 F0 00 83 78 DA 77 E8 74 F0 00 05 C5 D1 77 B5 61 EF 77 D9 37 81 7C FC 38 81 7C 16 74 F0 00
7A 0D D3 77 D6 74 F0 00 DB 74 F0 00 D1 E1 D2 77 0C 8A 83 7C D5 74 F0 00 F0 74 F0 00 F4 EA DA 77
EE 86 82 7C E3 74 F0 00 6E 75 F0 00 73 75 F0 00 B0 0E 61 7D D9 74 F0 00 8A 18 93 7C 4C 74 F0 00
6F 75 F0 00 6C C9 D1 77 8F 5E 83 7C A2 BD D1 77 01 9E 80 7C D0 74 F0 00 EE 1E 80 7C 36 0A D2 77
24 1A 80 7C DA 75 F0 00 67 23 80 7C 79 75 F0 00 99 74 F0 00 BF 50 83 7C 1B C0 D1 77 FD 79 93 7C
8E 0B 81 7C CE 08 D2 77 83 F3 D2 77 69 EF D1 77 97 CC 80 7C 7D BC D1 77 8E BD D1 77 08 2F 81 7C
A9 74 F0 00 F3 74 F0 00 A4 74 F0 00 8A 05 D5 77 7D 74 F0 00 89 6F EF 77 59 74 F0 00 58 C0 80 7C
F0 5F EF 77 E7 74 F0 00 2D 74 F0 00 9D 86 D1 77 74 75 F0 00 00 00 00 00 04 00 B0 00 F5 01 0C 01
58 49 10 01 74 05 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 09 00 04 00 F1 01 08 01
00 00 BD 77 00 00 A4 71 00 00 17 5D 00 00 80 7C 00 00 D1 77 00 00 EF 77 00 00 32 76 00 00 DA 77
00 00 59 7D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
02 00 09 00 C8 01 0F 01 40 02 37 00 40 02 37 00 04 00 02 00 C6 01 0C 01 BC 06 00 00 14 01 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 13 00 04 00 00 10 00 01 10 02 37 00 10 02 37 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
好了 我们开始第二步
2.用ArmaDetach 和ArmInline.0.96.final.chs 辅助修复后 DUMP (开始和第一步是一样的 )
ArmaDetach 运行它 选择 COPYMEM-II 把原程序拖到里面
Filename: Armadillo.exe
Parent process iD: [000004F0]
Processing...
[PROTECTiON SYSTEM]
Professional Edition
[PROTECTiON OPTiONS]
Debug-Blocker protection detected
CopyMem-II protection detected
Memory-Patching Protections enabled
Import Table Elimination enabled
Nanomites Processing enabled
[CHiLD iNFO]
Crypto call found: [004B7F05]
Child process iD: [00000458] 这个是子进程的ID
Entry point: [00448BB0] 这个是程序的OEP
Original bytes: [558BEC6A] 这个是程序开始的字节
Detached successfully :) 这个是成功提示了 ^_^
我们用OD附加458这个进程 返回后来到这里
00448BB0 - EB FE jmp short 00448BB0
00448BB2 90 nop
00448BB3 90 nop
00448BB4 FF68 D8 jmp far fword ptr [eax-28]
00448BB7 5A pop edx
00448BB8 45 inc ebp
00448BB9 0068 4C add byte ptr [eax+4C], ch
00448BBC 894400 64 mov dword ptr [eax+eax+64], eax
00448BC0 A1 00000000 mov eax, dword ptr [0]
00448BC5 50 push eax
这个时候呢 我们要修改开头的字节 这个就是工具里面的提示咯
Original bytes: [558BEC6A] 这个是程序开始的字节
到这里和第一步开始是一样的 好了 我们把这里的IAT替换成我们未加密的IAT 吧
CTRL+B FF25
0100B010 7C802442 kernel32.Sleep
这个就是IAT的开始 我们从这里替换掉他就可以了
好了 我们启用另外的工具
ArmInline[1][1].0.96.final.chs
IAT的基址100B010
大小添 1000就可以
处理好后 就可以用 LordPE 处理 DUMP
我们再找下IAT的头 就是488000了
Import 修复他 OEP48BB0 RAV 88000 大小1000 CUT掉无效的指针
到这里第二步结束
3.用Enjoy 修复CC
分别选择原程序和修复好的程序 软件自动处理CC 呵呵 一会我把工具发来
好了 第三步结束 ^_^
4.用PeRebuilder减肥 这个直接把软件脱里面就OK了 ^_^
到这里脱壳结束 谢谢大家
--------------------------------------------------------------------------------
【经验总结】
1.PE的保护貌似最强就是这个样子了 DLL的还有待研究
2.我站在了巨人的肩膀上 ^_^
--------------------------------------------------------------------------------
【版权声明】: ^_^
2008年04月09日 下午 08:14:14 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?加入我们
x
评分
-
查看全部评分
|