【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:WinXP、Ollydbg1.10C、PEiD、LordPE、ImportREC
―――――――――――――――――――――――――――――――――
【脱壳过程】:
Armadillo加壳DLL的脱壳笔记到现在还没兄弟整理放上来,《加密与解密》中也没有提及。这些天相当郁闷,为了转移一下心境,用了半天时间写下这点东西,其实标准壳的DLL关键是重定位表的问题啦。
借用《加密与解密》第2版光盘中附带的EdrLib.dll为例子来演示吧,况且看雪老师还写了EdrTest.exe,脱壳后测试很方便啦。
用Armadillo V3.60的Standard Protection Plus Debug-Blocker方式来给EdrLib.dll加壳,如果选择CopyMem-II方式给DLL加壳,则Armadillo会警告的。看来forgot是看不到双进程的DLL啦,呵呵。
―――――――――――――――――――――――――――――――――
一、Magic Jump + DUMP
先用LordPE看看加壳后的DLL信息:基址=00400000,入口点=00029A93
Ollydbg1.10C调试DLL确实方便,我们不需要在入口插入CC(SoftIce调试DLL),也不需要借助DLL_Loader.exe,所要做的就是在DLL上点右键,选择“Open With Ollydbg”;当然,你要先设置菜单关联,把Ollydbg添加进系统资源管理器里啦。或者你愿意用Ollydbg直接载入DLL也行啦。
设置Ollydbg忽略所有的异常选项。老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。
00899A93 55 push ebp//进入OD后停在这
00899A94 8BEC mov ebp,esp
00899A96 53 push ebx
00899A97 8B5D 08 mov ebx,dword ptr ss:[ebp+8]
00899A9A 56 push esi
00899A9B 8B75 0C mov esi,dword ptr ss:[ebp+C]
00899A9E 57 push edi
00899A9F 8B7D 10 mov edi,dword ptr ss:[ebp+10]
00899AA2 85F6 test esi,esi
00899AA4 75 09 jnz short EdrLib.00899AAF
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
注意看BP GetModuleHandleA+5 时的堆栈变化:
0006BFA0 00A2C807 返回到 00A2C807 来自 kernel32.GetModuleHandleA
0006BFA4 00A3D6C8 ASCII "kernel32.dll"
0006BFA8 00A3E67C ASCII "VirtualAlloc"
0006BFA0 00A2C824 返回到 00A2C824 来自 kernel32.GetModuleHandleA
0006BFA4 00A3D6C8 ASCII "kernel32.dll"
0006BFA8 00A3E670 ASCII "VirtualFree"
0006BD18 00A1799B 返回到 00A1799B 来自 kernel32.GetModuleHandleA
0006BD1C 0006BE54 ASCII "kernel32.dll"//可以返回了 ★
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
00A17995 FF15 C480A300 call dword ptr ds:[A380C4] ; kernel32.GetModuleHandleA
00A1799B 8B0D E011A400 mov ecx,dword ptr ds:[A411E0]//返回这里
00A179A1 89040E mov dword ptr ds:[esi+ecx],eax
00A179A4 A1 E011A400 mov eax,dword ptr ds:[A411E0]
00A179A9 393C06 cmp dword ptr ds:[esi+eax],edi
00A179AC 75 16 jnz short 00A179C4
00A179AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
00A179B4 50 push eax
00A179B5 FF15 CC80A300 call dword ptr ds:[A380CC] ; kernel32.LoadLibraryA
00A179BB 8B0D E011A400 mov ecx,dword ptr ds:[A411E0]
00A179C1 89040E mov dword ptr ds:[esi+ecx],eax
00A179C4 A1 E011A400 mov eax,dword ptr ds:[A411E0]
00A179C9 393C06 cmp dword ptr ds:[esi+eax],edi
00A179CC 0F84 AD000000 je 00A17A7F//Magic Jump ★ 改为JMP!
00A179D2 33C9 xor ecx,ecx
00A179D4 8B03 mov eax,dword ptr ds:[ebx]
00A179D6 3938 cmp dword ptr ds:[eax],edi
00A179D8 74 06 je short 00A179E0
00870000 00001000 EdrLib 00870000 (itself) PE header
00871000 00003000 EdrLib 00870000 .text //★ 这里下 内存访问 断点
00874000 00001000 EdrLib 00870000 .rdata exports
00875000 00001000 EdrLib 00870000 .data data
008711C9 55 push ebp//OEP啦 ★
008711CA 8BEC mov ebp,esp
008711CC 53 push ebx
008711CD 8B5D 08 mov ebx,dword ptr ss:[ebp+8]
008711D0 56 push esi
008711D1 8B75 0C mov esi,dword ptr ss:[ebp+C]
008711D4 57 push edi
008711D5 8B7D 10 mov edi,dword ptr ss:[ebp+10]
008711D8 85F6 test esi,esi
008711DA 75 09 jnz short EdrLib.008711E5
008711DC 833D 60538700 00 cmp dword ptr ds:[875360],0
008711E3 EB 26 jmp short EdrLib.0087120B
008711E5 83FE 01 cmp esi,1
008711E8 74 05 je short EdrLib.008711EF
008711EA 83FE 02 cmp esi,2
008711ED 75 22 jnz short EdrLib.00871211
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课