-
-
[分享]菜鸟也学Armadillo 脱壳全保护加壳的记事本.doc
-
发表于: 2010-4-12 11:01 6159
-
菜鸟也学Armadillo 加壳的记事本(KuNGBim大侠的测试版本)
【软件名称】Armadillo V4.40
【应用平台】WinXP SP2
【作者邮箱】chubing6143@sina.com
【使用工具】OllyDbg1.10,FLY大侠的Get.eXe.PE.Information.osc、DebugActiveProcess.osc、Armadillo.fiXed.IT.osc,ArmInline v0.96,WINHEX,ArmaDetach
【参考】FLY大侠的破文:http://bbs.pediy.com/showthread.php?threadid=18215
【脱壳过程】下载了ha[1].armadillo.findprotected.v1.3,其中有KuNGBim大侠测试使用的Armadillo 加壳的记事本,正好作为练手了。但是从看雪精华中学习了很多篇文章,没有一个方法是可以完全复制下来对付该壳的,例如http://bbs.pediy.com/showthread.php?threadid=23090原文中提到补丁之前的都没有问题,但是“建议用fly大侠的Armadillo V4.0-V4.4.Standard.Protection脚本完成”这个步骤对付该壳就不好使了,http://bbs.pediy.com/showthread.php?threadid=22134文中提到的IAT修改的方法对于该程序也不好使了,不知道是我天资愚笨,还是其它,后来仔细研究FLY大侠的“http://bbs.pediy.com/showthread.php?threadid=18215”,结合自己摸索,以及前后的一些贯通,终于完成脱壳了,为此,记录下来仅供我等菜鸟节约点时间,高手飘过。首先感谢上述大侠的无私奉献,为此,我决定为菜鸟们无私,让大侠们笑笑(水平太洼!呵呵!)。
利用Armadillo Find Protected察看该记事本
<------- 12-04-2010 09:46:36 ------->
D:\ test.EXE
!- Protected Armadillo
Protection system (Professional)
!- <Protection Options>
Debug-Blocker
CopyMem-II
Enable Import Table Elimination
Enable Strategic Code Splicing
Enable Nanomites Processing
Enable Memory-Patching Protections
!- <Backup Key Options>
Variable Backup Keys
!- <Compression Options>
Best/Slowest Compression
!- <Other Options>
Store Environment Vars Externally
Allow Only One Copy
Disable Monitoring Thread
?- Signature 447E2E00 01-06-2006
一、OEP
将目标程序拖到ArmaDetach中
Filename: test.EXE
……
Entry point: [01006420]
可以轻松知道OEP为01006420,当然也可以在完成第三步之后,利用BP CreateThread+5下断,然后跟踪到call ecx时,F7进去也能发现OEP(参见我写的“菜鸟也学Armadillo V4.40主程序脱壳”),但是经过我个人总结发现对付该软件没有多大意义,而这样最省事了。
二、DebugActiveProcess
设置OllyDBD忽略所有异常选项。
载入test.exe,用IsDebug插件去掉OllyDBD的调试器标志。
0105A000 test.> 60 pushad
0105A001 E8 00000000 call test.0105A006
0105A006 5D pop ebp
0105A007 50 push eax
0105A008 51 push ecx
0105A009 0FCA bswap edx
0105A00B F7D2 not edx
0105A00D 9C pushfd
0105A00E F7D2 not edx
0105A010 0FCA bswap edx
0105A012 EB 0F jmp short test.0105A023
每次运行脚本前必须清除以前的所有断点!
现在运行DebugActiveProcess.osc
子进程ID=0000004B4,开始4个字节EP Code=00000E860
“确定”后,此脚本完成任务,保留此OllyDBG不动。
三、Armadillo.fiXed.IT
新运行一个OllyDBG,Attach上ID=0000004B4的子进程test.exe
7C921231 C3 retn
此时,什么都不要做,请直接运行Armadillo.fiXed.IT.osc,脚本提示:
“确定”后F12,OllyDBG暂停在EP死循环处
0105A000 test.>- EB FE jmp short test.<ModuleEntryPoint>
0105A002 0000 add byte ptr ds:[eax],al
0105A004 0000 add byte ptr ds:[eax],al
还原EP Code的EBFE为60E8,还原后为:
0105A000 test.> 60 pushad
0105A001 E8 00000000 call test.0105A006
0105A006 5D pop ebp
Resume脚本,等待一段时间后,出现提示对话框,确定之
00A3E083 FF15 2871A400 call dword ptr ds:[A47128] ; kernel32.VirtualProtect
00A3E089 A0 6C13A500 mov al,byte ptr ds:[A5136C] ; 脚本运行完毕暂停在这里
在目标程序test.exe目录下脚本自动dump出一个文件:SaveIat000497FA8.bin
此文件保存的就是所有乱序前的正确函数地址
00A3E08E 8885 14A9FFFF mov byte ptr ss:[ebp+FFFFA914],al
00A3E094 0FB685 14A9FFFF movzx eax,byte ptr ss:[ebp+FFFFA914]
00A3E09B 85C0 test eax,eax
00A3E09D 74 1D je short 00A3E0BC
00A3E09F 6A 00 push 0
00A3E0A1 FFB5 CCB0FFFF push dword ptr ss:[ebp+FFFFB0CC]
00A3E0A7 8B85 0CD8FFFF mov eax,dword ptr ss:[ebp-27F4]
00A3E0AD 0385 BCB0FFFF add eax,dword ptr ss:[ebp+FFFFB0BC]
00A3E0B3 50 push eax
00A3E0B4 E8 5E120000 call 00A3F317 ; 单步运行到此处,解密CALL,修改堆栈值,此时察看堆栈为:
――――――――――――――――――――――――――
000694FC 01001000 test.01001000
00069500 00006601
――――――――――――――――――――――――――
其实就是解密PE header下面区段的代码,修改为6600
在数据窗口里定位01001000,F8步过上面CALL时会发现01001000段的代码已经全部解密出来了!
00A3E0B9 83C4 0C add esp,0C
00A3E0BC 8B85 FCD7FFFF mov eax,dword ptr ss:[ebp-2804]
00A3E0C2 8BB5 0CD8FFFF mov esi,dword ptr ss:[ebp-27F4]
00A3E0C8 2B70 34 sub esi,dword ptr ds:[eax+34]
00A3E0CB E8 6D2F0000 call 00A4103D
00A3E0D0 F7D8 neg eax
00A3E0D2 1BC0 sbb eax,eax
00A3E0D4 25 00100000 and eax,1000
00A3E0D9 03F0 add esi,eax
00A3E0DB 89B5 C4B0FFFF mov dword ptr ss:[ebp+FFFFB0C4],esi
00A3E0E1 83A5 C8B0FFFF 00 and dword ptr ss:[ebp+FFFFB0C8],0
00A3E0E8 EB 0D jmp short 00A3E0F7
00A3E0EA 8B85 C8B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0C8]
00A3E0F0 40 inc eax
00A3E0F1 8985 C8B0FFFF mov dword ptr ss:[ebp+FFFFB0C8],eax
00A3E0F7 8B85 C8B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0C8]
00A3E0FD 8B8D 24D9FFFF mov ecx,dword ptr ss:[ebp-26DC]
00A3E103 833C81 00 cmp dword ptr ds:[ecx+eax*4],0
00A3E107 0F84 90000000 je 00A3E19D
00A3E10D 8B85 C8B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0C8]
00A3E113 8B8D 24D9FFFF mov ecx,dword ptr ss:[ebp-26DC]
00A3E119 8B95 0CD8FFFF mov edx,dword ptr ss:[ebp-27F4]
00A3E11F 031481 add edx,dword ptr ds:[ecx+eax*4]
00A3E122 8995 B8B0FFFF mov dword ptr ss:[ebp+FFFFB0B8],edx
00A3E128 8B85 B8B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0B8]
00A3E12E 8B00 mov eax,dword ptr ds:[eax]
00A3E130 8985 B4B0FFFF mov dword ptr ss:[ebp+FFFFB0B4],eax
00A3E136 81BD B4B0FFFF 9090909>cmp dword ptr ss:[ebp+FFFFB0B4],90909>
00A3E140 74 56 je short 00A3E198
00A3E142 8B85 B4B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0B4]
00A3E148 2B85 C4B0FFFF sub eax,dword ptr ss:[ebp+FFFFB0C4]
00A3E14E 8985 B4B0FFFF mov dword ptr ss:[ebp+FFFFB0B4],eax
00A3E154 FFB5 B4B0FFFF push dword ptr ss:[ebp+FFFFB0B4]
00A3E15A 8B85 C8B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0C8]
00A3E160 33D2 xor edx,edx
00A3E162 6A 17 push 17
00A3E164 59 pop ecx
00A3E165 F7F1 div ecx
00A3E167 FF1495 A877A400 call dword ptr ds:[edx*4+A477A8]
00A3E16E 59 pop ecx
00A3E16F 8985 B4B0FFFF mov dword ptr ss:[ebp+FFFFB0B4],eax
00A3E175 8B85 B4B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0B4]
00A3E17B 8B8D E4D7FFFF mov ecx,dword ptr ss:[ebp-281C]
00A3E181 8D0481 lea eax,dword ptr ds:[ecx+eax*4]
00A3E184 8985 B4B0FFFF mov dword ptr ss:[ebp+FFFFB0B4],eax
00A3E18A 8B85 B8B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0B8]
00A3E190 8B8D B4B0FFFF mov ecx,dword ptr ss:[ebp+FFFFB0B4]
00A3E196 8908 mov dword ptr ds:[eax],ecx
00A3E198 ^ E9 4DFFFFFF jmp 00A3E0EA
00A3E19D A0 6C13A500 mov al,byte ptr ds:[A5136C] ; 这里处理结束,下断,Shift+F9中断下来。
设置1007600(1001000+6600,即解密CALL运行时堆栈中察看到的值)为完整权限,
把SaveIat000497FA8.bin里面的有序地址全部粘贴到1007600处。
注意,我们要先去掉非函数地址的数据。利用WinHEX察看SaveIat000497FA8.bin文件可以看到
000002F0 D6 48 34 76 CE 00 33 76 DF 7C A2 00 CA 7D A2 00 諬4v?3v遼?蕔?
自0X2F8后明显不是正确的地址,就可以全部删除了。
在WINHEX中选中BLOCK 00000000-00000300,然后Copy Block-〉Hex Values
然后回到OD中,CTRL+G,输入1007600,然后选中要粘贴的区域,然后进行二进制粘贴
FD D5 DC 77 7D 8F DC 77 C8 6F DA 77 CC D7 DA 77 1B 76 DA 77 83 78 DA 77 F0 6B DA 77 AE 7C A2 00
E5 7E EF 77 CF 44 F2 77 8A 5A EF 77 90 5B EF 77 FB 5E EF 77 F2 7D EF 77 5F 39 F2 77 26 F1 F0 77
C9 DD F0 77 51 E0 F0 77 98 6E EF 77 94 6C F0 77 D6 7F EF 77 99 99 EF 77 2D 6C EF 77 26 D5 EF 77
3D 6D F0 77 1A 9A EF 77 91 BE EF 77 94 83 EF 77 E1 61 EF 77 65 EE F1 77 C7 9A EF 77 AE 7C A2 00
B1 2E 83 7C 82 FE 80 7C 19 FF 80 7C 31 03 93 7C 40 03 93 7C A1 B6 80 7C 76 2E 81 7C EE 1E 80 7C
6D 0C 81 7C 8E 93 80 7C 2F FC 80 7C 62 15 81 7C C6 97 80 7C 60 07 81 7C 64 BA 80 7C EF B9 80 7C
2F 99 80 7C A0 AD 80 7C 83 6F 81 7C 32 0F 81 7C D7 ED 80 7C E1 EE 80 7C CC A9 80 7C 8D 99 80 7C
09 9A 80 7C 8F 4B 83 7C 5E A3 80 7C 1D 2E 83 7C 36 96 87 7C 77 1D 80 7C 96 A9 80 7C DC B7 80 7C
D3 3F 83 7C 75 37 83 7C 10 9F 80 7C D4 A7 80 7C 44 20 83 7C D4 A0 80 7C 05 B9 80 7C 64 BF 80 7C
BC 25 83 7C 31 1F 83 7C 87 0D 81 7C F8 9B 80 7C 74 B9 80 7C 47 9B 80 7C 15 99 80 7C 27 09 83 7C
57 7D A2 00 67 9D C0 77 EB EE BE 77 A4 F1 BE 77 75 D6 C1 77 D8 23 C3 77 2F EE C1 77 DB F1 BE 77
7C 53 C0 77 AC 17 C3 77 7E 9E C0 77 AE 2D C0 77 9A 9E C0 77 94 5C C0 77 A3 AE C1 77 3D AB C1 77
6B 80 C1 77 36 D0 BE 77 77 CE BE 77 2F 80 C1 77 95 7D A2 00 12 07 5E 7D E0 70 64 7D 3B 24 63 7D
AE AF 5F 7D 95 7D A2 00 BC DF D2 77 C6 91 D1 77 11 12 D2 77 28 F7 D2 77 F9 D7 D1 77 9A DB D1 77
44 37 D2 77 EC DB D1 77 F5 B5 D1 77 8C 17 D6 77 69 D8 D1 77 AF BA D2 77 C8 BD D1 77 76 BD D1 77
DA 5C D2 77 58 BF D1 77 9D 86 D1 77 C7 86 D1 77 60 DA D1 77 2C 66 D2 77 CB 8C D1 77 F0 BE D1 77
EA 12 D2 77 F2 60 D6 77 ED E5 D1 77 2F EA D1 77 E2 16 D2 77 BA B8 D1 77 8B 14 D3 77 CD 48 D2 77
3C B3 D1 77 1E C2 D1 77 4C 1F D3 77 EA DA D1 77 4B BE D1 77 27 BE D1 77 7F AF D1 77 FE DA D1 77
01 8A D1 77 F6 8B D1 77 1E 94 D1 77 50 EC D1 77 A6 88 D1 77 9D 8F D1 77 36 BC D1 77 8E 1A D3 77
3D 02 D3 77 3E F1 D2 77 4F 02 D3 77 14 94 D2 77 B6 A9 D1 77 7A 5C D2 77 50 62 D2 77 AD 47 D2 77
9B 92 D1 77 70 DB D1 77 38 1D D2 77 2B D6 D1 77 EE 84 D2 77 71 BE D1 77 B6 CD D1 77 36 9E D1 77
9F 03 D3 77 69 9D D1 77 34 AF D1 77 D2 90 D1 77 A4 D8 D1 77 AE B6 D1 77 46 DF D2 77 50 FF D1 77
9A 7D A2 00 90 60 F7 72 49 57 F7 72 90 53 F7 72 9A 7D A2 00 96 86 33 76 F3 7C 33 76 65 7C 33 76
29 9D 34 76 CA 86 33 76 86 19 32 76 A9 C4 33 76 D6 48 34 76 CE 00 33 76 00 00 00 00 00 00 00 00
00
接着我们来修复这些乱序的输入表函数,Patch代码如下。在00A3E19D处开始输入以下代码:
00A3E19D 60 pushad
00A3E19E 8BB5 E4D7FFFF mov esi,dword ptr ss:[ebp-281C]
00A3E1A4 8BBD 24D9FFFF mov edi,dword ptr ss:[ebp-26DC]
00A3E1AA 833F 00 cmp dword ptr ds:[edi],0
00A3E1AD 74 2E je short 00A3E1DD
00A3E1AF 8B07 mov eax,dword ptr ds:[edi]
00A3E1B1 05 00000001 add eax,1000000
00A3E1B6 8B10 mov edx,dword ptr ds:[eax]
00A3E1B8 BB 00760001 mov ebx,1007600 ;IAT 开始地址
00A3E1BD 81FA 90909090 cmp edx,90909090
00A3E1C3 74 13 je short 00A3E1D8
00A3E1C5 8B12 mov edx,dword ptr ds:[edx]
00A3E1C7 3B13 cmp edx,dword ptr ds:[ebx]
00A3E1C9 74 0B je short 00A3E1D6
00A3E1CB 83C3 04 add ebx,4
00A3E1CE 81FB 00790001 cmp ebx,1007900 ;IAT 结束地址
00A3E1D4 ^ 7C F1 jl short 00A3E1C7
00A3E1D6 8918 mov dword ptr ds:[eax],ebx
00A3E1D8 83C7 04 add edi,4
00A3E1DB ^ EB CD jmp short 00A3E1AA
00A3E1DD 61 popad
00A3E1DE 90 nop
或利用OllyDBG二进制代码复制,然后进行修改。
60 8B B5 E4 D7 FF FF 8B BD 24 D9 FF FF 83 3F 00 74 2E 8B 07 05 00 00 00 01 8B 10 BB 00 76 00 01
81 FA 90 90 90 90 74 13 8B 12 3B 13 74 0B 83 C3 04 81 FB 00 79 00 01 7C F1 89 18 83 C7 04 EB CD
61 90
在00A3E1DE处下断点,然后F9在00A3E1DE中断后乱序输入表修复完毕。
因为下面Armadillo还要再对代码段加密,所以此时运行LordPE完全dump出此进程!注意PID选择要正确。
然后运行ImportREC,OEP=6420,RVA=0007600,Size=00000300,获取输入表,Cut掉几个填充在DLL间的垃圾数据,DUMP FIX。
四、手动处理code splicing
该程序还需要将code splicing手动处理,ALT+M察看内存,发现如下内存段:
内存映射,项目 61
地址=01690000
大小=00015000 (86016.)
Owner= 01690000 (itself)
区段=
类型=Priv 00021020,此处是关键了
访问=R E
初始访问=RWE
打开lordpe,找到目标进程,选择区域脱壳(第三个选项),找到地址=01690000
然后把这部分dump出来,为Region01690000-01695000.dmp,然后用lordpe--点pe editor,打开dumped_.exe,点sections,右键,第三个选项,从磁盘导入section,选择刚才的Region01690000-01695000.dmp,导入后,右键,选edit section header
修改virtual address为 01690000-01000000=0690000,然后设置lordpe的选项,把rebuilder里面的选项全部去掉,只保留LordPE的“Validate PE”选项,重建PE。搞定收工。
将 KuNGBim大侠的测试版本 的附上。
【软件名称】Armadillo V4.40
【应用平台】WinXP SP2
【作者邮箱】chubing6143@sina.com
【使用工具】OllyDbg1.10,FLY大侠的Get.eXe.PE.Information.osc、DebugActiveProcess.osc、Armadillo.fiXed.IT.osc,ArmInline v0.96,WINHEX,ArmaDetach
【参考】FLY大侠的破文:http://bbs.pediy.com/showthread.php?threadid=18215
【脱壳过程】下载了ha[1].armadillo.findprotected.v1.3,其中有KuNGBim大侠测试使用的Armadillo 加壳的记事本,正好作为练手了。但是从看雪精华中学习了很多篇文章,没有一个方法是可以完全复制下来对付该壳的,例如http://bbs.pediy.com/showthread.php?threadid=23090原文中提到补丁之前的都没有问题,但是“建议用fly大侠的Armadillo V4.0-V4.4.Standard.Protection脚本完成”这个步骤对付该壳就不好使了,http://bbs.pediy.com/showthread.php?threadid=22134文中提到的IAT修改的方法对于该程序也不好使了,不知道是我天资愚笨,还是其它,后来仔细研究FLY大侠的“http://bbs.pediy.com/showthread.php?threadid=18215”,结合自己摸索,以及前后的一些贯通,终于完成脱壳了,为此,记录下来仅供我等菜鸟节约点时间,高手飘过。首先感谢上述大侠的无私奉献,为此,我决定为菜鸟们无私,让大侠们笑笑(水平太洼!呵呵!)。
利用Armadillo Find Protected察看该记事本
<------- 12-04-2010 09:46:36 ------->
D:\ test.EXE
!- Protected Armadillo
Protection system (Professional)
!- <Protection Options>
Debug-Blocker
CopyMem-II
Enable Import Table Elimination
Enable Strategic Code Splicing
Enable Nanomites Processing
Enable Memory-Patching Protections
!- <Backup Key Options>
Variable Backup Keys
!- <Compression Options>
Best/Slowest Compression
!- <Other Options>
Store Environment Vars Externally
Allow Only One Copy
Disable Monitoring Thread
?- Signature 447E2E00 01-06-2006
一、OEP
将目标程序拖到ArmaDetach中
Filename: test.EXE
……
Entry point: [01006420]
可以轻松知道OEP为01006420,当然也可以在完成第三步之后,利用BP CreateThread+5下断,然后跟踪到call ecx时,F7进去也能发现OEP(参见我写的“菜鸟也学Armadillo V4.40主程序脱壳”),但是经过我个人总结发现对付该软件没有多大意义,而这样最省事了。
二、DebugActiveProcess
设置OllyDBD忽略所有异常选项。
载入test.exe,用IsDebug插件去掉OllyDBD的调试器标志。
0105A000 test.> 60 pushad
0105A001 E8 00000000 call test.0105A006
0105A006 5D pop ebp
0105A007 50 push eax
0105A008 51 push ecx
0105A009 0FCA bswap edx
0105A00B F7D2 not edx
0105A00D 9C pushfd
0105A00E F7D2 not edx
0105A010 0FCA bswap edx
0105A012 EB 0F jmp short test.0105A023
每次运行脚本前必须清除以前的所有断点!
现在运行DebugActiveProcess.osc
子进程ID=0000004B4,开始4个字节EP Code=00000E860
“确定”后,此脚本完成任务,保留此OllyDBG不动。
三、Armadillo.fiXed.IT
新运行一个OllyDBG,Attach上ID=0000004B4的子进程test.exe
7C921231 C3 retn
此时,什么都不要做,请直接运行Armadillo.fiXed.IT.osc,脚本提示:
“确定”后F12,OllyDBG暂停在EP死循环处
0105A000 test.>- EB FE jmp short test.<ModuleEntryPoint>
0105A002 0000 add byte ptr ds:[eax],al
0105A004 0000 add byte ptr ds:[eax],al
还原EP Code的EBFE为60E8,还原后为:
0105A000 test.> 60 pushad
0105A001 E8 00000000 call test.0105A006
0105A006 5D pop ebp
Resume脚本,等待一段时间后,出现提示对话框,确定之
00A3E083 FF15 2871A400 call dword ptr ds:[A47128] ; kernel32.VirtualProtect
00A3E089 A0 6C13A500 mov al,byte ptr ds:[A5136C] ; 脚本运行完毕暂停在这里
在目标程序test.exe目录下脚本自动dump出一个文件:SaveIat000497FA8.bin
此文件保存的就是所有乱序前的正确函数地址
00A3E08E 8885 14A9FFFF mov byte ptr ss:[ebp+FFFFA914],al
00A3E094 0FB685 14A9FFFF movzx eax,byte ptr ss:[ebp+FFFFA914]
00A3E09B 85C0 test eax,eax
00A3E09D 74 1D je short 00A3E0BC
00A3E09F 6A 00 push 0
00A3E0A1 FFB5 CCB0FFFF push dword ptr ss:[ebp+FFFFB0CC]
00A3E0A7 8B85 0CD8FFFF mov eax,dword ptr ss:[ebp-27F4]
00A3E0AD 0385 BCB0FFFF add eax,dword ptr ss:[ebp+FFFFB0BC]
00A3E0B3 50 push eax
00A3E0B4 E8 5E120000 call 00A3F317 ; 单步运行到此处,解密CALL,修改堆栈值,此时察看堆栈为:
――――――――――――――――――――――――――
000694FC 01001000 test.01001000
00069500 00006601
――――――――――――――――――――――――――
其实就是解密PE header下面区段的代码,修改为6600
在数据窗口里定位01001000,F8步过上面CALL时会发现01001000段的代码已经全部解密出来了!
00A3E0B9 83C4 0C add esp,0C
00A3E0BC 8B85 FCD7FFFF mov eax,dword ptr ss:[ebp-2804]
00A3E0C2 8BB5 0CD8FFFF mov esi,dword ptr ss:[ebp-27F4]
00A3E0C8 2B70 34 sub esi,dword ptr ds:[eax+34]
00A3E0CB E8 6D2F0000 call 00A4103D
00A3E0D0 F7D8 neg eax
00A3E0D2 1BC0 sbb eax,eax
00A3E0D4 25 00100000 and eax,1000
00A3E0D9 03F0 add esi,eax
00A3E0DB 89B5 C4B0FFFF mov dword ptr ss:[ebp+FFFFB0C4],esi
00A3E0E1 83A5 C8B0FFFF 00 and dword ptr ss:[ebp+FFFFB0C8],0
00A3E0E8 EB 0D jmp short 00A3E0F7
00A3E0EA 8B85 C8B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0C8]
00A3E0F0 40 inc eax
00A3E0F1 8985 C8B0FFFF mov dword ptr ss:[ebp+FFFFB0C8],eax
00A3E0F7 8B85 C8B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0C8]
00A3E0FD 8B8D 24D9FFFF mov ecx,dword ptr ss:[ebp-26DC]
00A3E103 833C81 00 cmp dword ptr ds:[ecx+eax*4],0
00A3E107 0F84 90000000 je 00A3E19D
00A3E10D 8B85 C8B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0C8]
00A3E113 8B8D 24D9FFFF mov ecx,dword ptr ss:[ebp-26DC]
00A3E119 8B95 0CD8FFFF mov edx,dword ptr ss:[ebp-27F4]
00A3E11F 031481 add edx,dword ptr ds:[ecx+eax*4]
00A3E122 8995 B8B0FFFF mov dword ptr ss:[ebp+FFFFB0B8],edx
00A3E128 8B85 B8B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0B8]
00A3E12E 8B00 mov eax,dword ptr ds:[eax]
00A3E130 8985 B4B0FFFF mov dword ptr ss:[ebp+FFFFB0B4],eax
00A3E136 81BD B4B0FFFF 9090909>cmp dword ptr ss:[ebp+FFFFB0B4],90909>
00A3E140 74 56 je short 00A3E198
00A3E142 8B85 B4B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0B4]
00A3E148 2B85 C4B0FFFF sub eax,dword ptr ss:[ebp+FFFFB0C4]
00A3E14E 8985 B4B0FFFF mov dword ptr ss:[ebp+FFFFB0B4],eax
00A3E154 FFB5 B4B0FFFF push dword ptr ss:[ebp+FFFFB0B4]
00A3E15A 8B85 C8B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0C8]
00A3E160 33D2 xor edx,edx
00A3E162 6A 17 push 17
00A3E164 59 pop ecx
00A3E165 F7F1 div ecx
00A3E167 FF1495 A877A400 call dword ptr ds:[edx*4+A477A8]
00A3E16E 59 pop ecx
00A3E16F 8985 B4B0FFFF mov dword ptr ss:[ebp+FFFFB0B4],eax
00A3E175 8B85 B4B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0B4]
00A3E17B 8B8D E4D7FFFF mov ecx,dword ptr ss:[ebp-281C]
00A3E181 8D0481 lea eax,dword ptr ds:[ecx+eax*4]
00A3E184 8985 B4B0FFFF mov dword ptr ss:[ebp+FFFFB0B4],eax
00A3E18A 8B85 B8B0FFFF mov eax,dword ptr ss:[ebp+FFFFB0B8]
00A3E190 8B8D B4B0FFFF mov ecx,dword ptr ss:[ebp+FFFFB0B4]
00A3E196 8908 mov dword ptr ds:[eax],ecx
00A3E198 ^ E9 4DFFFFFF jmp 00A3E0EA
00A3E19D A0 6C13A500 mov al,byte ptr ds:[A5136C] ; 这里处理结束,下断,Shift+F9中断下来。
设置1007600(1001000+6600,即解密CALL运行时堆栈中察看到的值)为完整权限,
把SaveIat000497FA8.bin里面的有序地址全部粘贴到1007600处。
注意,我们要先去掉非函数地址的数据。利用WinHEX察看SaveIat000497FA8.bin文件可以看到
000002F0 D6 48 34 76 CE 00 33 76 DF 7C A2 00 CA 7D A2 00 諬4v?3v遼?蕔?
自0X2F8后明显不是正确的地址,就可以全部删除了。
在WINHEX中选中BLOCK 00000000-00000300,然后Copy Block-〉Hex Values
然后回到OD中,CTRL+G,输入1007600,然后选中要粘贴的区域,然后进行二进制粘贴
FD D5 DC 77 7D 8F DC 77 C8 6F DA 77 CC D7 DA 77 1B 76 DA 77 83 78 DA 77 F0 6B DA 77 AE 7C A2 00
E5 7E EF 77 CF 44 F2 77 8A 5A EF 77 90 5B EF 77 FB 5E EF 77 F2 7D EF 77 5F 39 F2 77 26 F1 F0 77
C9 DD F0 77 51 E0 F0 77 98 6E EF 77 94 6C F0 77 D6 7F EF 77 99 99 EF 77 2D 6C EF 77 26 D5 EF 77
3D 6D F0 77 1A 9A EF 77 91 BE EF 77 94 83 EF 77 E1 61 EF 77 65 EE F1 77 C7 9A EF 77 AE 7C A2 00
B1 2E 83 7C 82 FE 80 7C 19 FF 80 7C 31 03 93 7C 40 03 93 7C A1 B6 80 7C 76 2E 81 7C EE 1E 80 7C
6D 0C 81 7C 8E 93 80 7C 2F FC 80 7C 62 15 81 7C C6 97 80 7C 60 07 81 7C 64 BA 80 7C EF B9 80 7C
2F 99 80 7C A0 AD 80 7C 83 6F 81 7C 32 0F 81 7C D7 ED 80 7C E1 EE 80 7C CC A9 80 7C 8D 99 80 7C
09 9A 80 7C 8F 4B 83 7C 5E A3 80 7C 1D 2E 83 7C 36 96 87 7C 77 1D 80 7C 96 A9 80 7C DC B7 80 7C
D3 3F 83 7C 75 37 83 7C 10 9F 80 7C D4 A7 80 7C 44 20 83 7C D4 A0 80 7C 05 B9 80 7C 64 BF 80 7C
BC 25 83 7C 31 1F 83 7C 87 0D 81 7C F8 9B 80 7C 74 B9 80 7C 47 9B 80 7C 15 99 80 7C 27 09 83 7C
57 7D A2 00 67 9D C0 77 EB EE BE 77 A4 F1 BE 77 75 D6 C1 77 D8 23 C3 77 2F EE C1 77 DB F1 BE 77
7C 53 C0 77 AC 17 C3 77 7E 9E C0 77 AE 2D C0 77 9A 9E C0 77 94 5C C0 77 A3 AE C1 77 3D AB C1 77
6B 80 C1 77 36 D0 BE 77 77 CE BE 77 2F 80 C1 77 95 7D A2 00 12 07 5E 7D E0 70 64 7D 3B 24 63 7D
AE AF 5F 7D 95 7D A2 00 BC DF D2 77 C6 91 D1 77 11 12 D2 77 28 F7 D2 77 F9 D7 D1 77 9A DB D1 77
44 37 D2 77 EC DB D1 77 F5 B5 D1 77 8C 17 D6 77 69 D8 D1 77 AF BA D2 77 C8 BD D1 77 76 BD D1 77
DA 5C D2 77 58 BF D1 77 9D 86 D1 77 C7 86 D1 77 60 DA D1 77 2C 66 D2 77 CB 8C D1 77 F0 BE D1 77
EA 12 D2 77 F2 60 D6 77 ED E5 D1 77 2F EA D1 77 E2 16 D2 77 BA B8 D1 77 8B 14 D3 77 CD 48 D2 77
3C B3 D1 77 1E C2 D1 77 4C 1F D3 77 EA DA D1 77 4B BE D1 77 27 BE D1 77 7F AF D1 77 FE DA D1 77
01 8A D1 77 F6 8B D1 77 1E 94 D1 77 50 EC D1 77 A6 88 D1 77 9D 8F D1 77 36 BC D1 77 8E 1A D3 77
3D 02 D3 77 3E F1 D2 77 4F 02 D3 77 14 94 D2 77 B6 A9 D1 77 7A 5C D2 77 50 62 D2 77 AD 47 D2 77
9B 92 D1 77 70 DB D1 77 38 1D D2 77 2B D6 D1 77 EE 84 D2 77 71 BE D1 77 B6 CD D1 77 36 9E D1 77
9F 03 D3 77 69 9D D1 77 34 AF D1 77 D2 90 D1 77 A4 D8 D1 77 AE B6 D1 77 46 DF D2 77 50 FF D1 77
9A 7D A2 00 90 60 F7 72 49 57 F7 72 90 53 F7 72 9A 7D A2 00 96 86 33 76 F3 7C 33 76 65 7C 33 76
29 9D 34 76 CA 86 33 76 86 19 32 76 A9 C4 33 76 D6 48 34 76 CE 00 33 76 00 00 00 00 00 00 00 00
00
接着我们来修复这些乱序的输入表函数,Patch代码如下。在00A3E19D处开始输入以下代码:
00A3E19D 60 pushad
00A3E19E 8BB5 E4D7FFFF mov esi,dword ptr ss:[ebp-281C]
00A3E1A4 8BBD 24D9FFFF mov edi,dword ptr ss:[ebp-26DC]
00A3E1AA 833F 00 cmp dword ptr ds:[edi],0
00A3E1AD 74 2E je short 00A3E1DD
00A3E1AF 8B07 mov eax,dword ptr ds:[edi]
00A3E1B1 05 00000001 add eax,1000000
00A3E1B6 8B10 mov edx,dword ptr ds:[eax]
00A3E1B8 BB 00760001 mov ebx,1007600 ;IAT 开始地址
00A3E1BD 81FA 90909090 cmp edx,90909090
00A3E1C3 74 13 je short 00A3E1D8
00A3E1C5 8B12 mov edx,dword ptr ds:[edx]
00A3E1C7 3B13 cmp edx,dword ptr ds:[ebx]
00A3E1C9 74 0B je short 00A3E1D6
00A3E1CB 83C3 04 add ebx,4
00A3E1CE 81FB 00790001 cmp ebx,1007900 ;IAT 结束地址
00A3E1D4 ^ 7C F1 jl short 00A3E1C7
00A3E1D6 8918 mov dword ptr ds:[eax],ebx
00A3E1D8 83C7 04 add edi,4
00A3E1DB ^ EB CD jmp short 00A3E1AA
00A3E1DD 61 popad
00A3E1DE 90 nop
或利用OllyDBG二进制代码复制,然后进行修改。
60 8B B5 E4 D7 FF FF 8B BD 24 D9 FF FF 83 3F 00 74 2E 8B 07 05 00 00 00 01 8B 10 BB 00 76 00 01
81 FA 90 90 90 90 74 13 8B 12 3B 13 74 0B 83 C3 04 81 FB 00 79 00 01 7C F1 89 18 83 C7 04 EB CD
61 90
在00A3E1DE处下断点,然后F9在00A3E1DE中断后乱序输入表修复完毕。
因为下面Armadillo还要再对代码段加密,所以此时运行LordPE完全dump出此进程!注意PID选择要正确。
然后运行ImportREC,OEP=6420,RVA=0007600,Size=00000300,获取输入表,Cut掉几个填充在DLL间的垃圾数据,DUMP FIX。
四、手动处理code splicing
该程序还需要将code splicing手动处理,ALT+M察看内存,发现如下内存段:
内存映射,项目 61
地址=01690000
大小=00015000 (86016.)
Owner= 01690000 (itself)
区段=
类型=Priv 00021020,此处是关键了
访问=R E
初始访问=RWE
打开lordpe,找到目标进程,选择区域脱壳(第三个选项),找到地址=01690000
然后把这部分dump出来,为Region01690000-01695000.dmp,然后用lordpe--点pe editor,打开dumped_.exe,点sections,右键,第三个选项,从磁盘导入section,选择刚才的Region01690000-01695000.dmp,导入后,右键,选edit section header
修改virtual address为 01690000-01000000=0690000,然后设置lordpe的选项,把rebuilder里面的选项全部去掉,只保留LordPE的“Validate PE”选项,重建PE。搞定收工。
将 KuNGBim大侠的测试版本 的附上。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
- [原创]VMP编译的完整笔记 15467
- [分享]利用Flex 10.1 SDK开发某软件注册机 17673
- [分享]菜鸟也学Armadillo 脱壳全保护加壳的记事本.doc 6160
- [分享]菜鸟也学Armadillo V4.40主程序脱壳 6402
- [分享]简单打狗文章一二 18677
看原图
赞赏
雪币:
留言: