-
-
用Ollydbg手脱Packman V0.0.0.1加壳的DLL
-
发表于:
2005-3-5 21:47
9991
-
用Ollydbg手脱Packman V0.0.0.1加壳的DLL
用Ollydbg手脱Packman V0.0.0.1加壳的DLL
【软件简介】:Packman是昨天在exetools发布的压缩壳,压缩效果很棒。
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:WinXP、Ollydbg V1.10、PEiD、LordPE
―――――――――――――――――――――――――――――――――
【脱壳过程】:
PEiD的SiGn:
[Packman V0.0.0.1 -> Bubbasoft]
signature = 60 E8 00 00 00 00 58 8D ?? ?? ?? ?? ?? 8D ?? ?? ?? ?? ?? 8D ?? ?? ?? ?? ?? 8D ?? ?? 48
ep_only = true
―――――――――――――――――――――――――――――――――
一、脱壳的时机
003D7104 60 pushad
//进入Ollydbg后暂停在这
003D7105 E8 00000000 call EdrLib.003D710A
003D710A 58 pop eax
003D710B 8DA8 6EFFFFFF lea ebp,dword ptr ds:[eax-92]
BP GetModuleHandleA
中断后取消断点,Alt+F9返回
此时就是Dump的最佳时机!所有代码已解压,输入表和重定位表都还没处理。
运行LordPE,完全dump出这个DLL
003D71ED FF55 00 call dword ptr ss:[ebp]
003D71F0 56 push esi
//返回这里 ESI=003D442C
//输入表RVA=003D442C-当前基址003D0000=442C ★
003D71F1 8B36 mov esi,dword ptr ds:[esi]
003D71F3 0BF6 or esi,esi
003D71F5 75 02 jnz short EdrLib.003D71F9
003D71F7 8BF7 mov esi,edi
003D71F9 03F3 add esi,ebx
003D71FB 03FB add edi,ebx
003D71FD EB 1B jmp short EdrLib.003D721A
003D71FF D1C1 rol ecx,1
003D7201 D1E9 shr ecx,1
003D7203 73 05 jnb short EdrLib.003D720A
003D7205 0FB7C9 movzx ecx,cx
003D7208 EB 05 jmp short EdrLib.003D720F
003D720A 03CB add ecx,ebx
003D720C 8D49 02 lea ecx,dword ptr ds:[ecx+2]
003D720F 50 push eax
003D7210 51 push ecx
003D7211 50 push eax
003D7212 FF55 04 call dword ptr ss:[ebp+4]
003D7215 AB stos dword ptr es:[edi]
003D7216 58 pop eax
003D7217 83C6 04 add esi,4
003D721A 8B0E mov ecx,dword ptr ds:[esi]
003D721C 85C9 test ecx,ecx
003D721E 75 DF jnz short EdrLib.003D71FF
003D7220 5E pop esi
003D7221 83C6 14 add esi,14
003D7224 8B7E 10 mov edi,dword ptr ds:[esi+10]
003D7227 85FF test edi,edi
003D7229 75 BC jnz short EdrLib.003D71E7
//循环处理输入表
―――――――――――――――――――――――――――――――――
二、获取重定位表信息 + OEP
003D722B 8D8B 0000C0FF lea ecx,dword ptr ds:[ebx+FFC00000]
//DumP后直接F4到这里
003D7231 B8 00600000 mov eax,6000
//EAX=6000就是输入表的RVA ★
003D7236 0BC0 or eax,eax
003D7238 74 34 je short EdrLib.003D726E
//重定位表处理完毕则跳转
003D723A 03C3 add eax,ebx
//EAX=00006000+003D0000=003D6000
003D723C EB 2A jmp short EdrLib.003D7268
003D726E 61 popad
//F4到这里 EAX=003D63B0
//重定位表Size=003D63B0-003D6000=3B0 ★
003D726F E9 90FEFFFF jmp EdrLib.<ModuleEntryPoint>
003D7104 E9 C0A0FFFF jmp EdrLib.003D11C9
//飞向光明之巅! ^O^
003D11C9 55 push ebp
//OEP ★
003D11CA 8BEC mov ebp,esp
003D11CC 53 push ebx
003D11CD 8B5D 08 mov ebx,dword ptr ss:[ebp+8]
003D11D0 56 push esi
003D11D1 8B75 0C mov esi,dword ptr ss:[ebp+C]
003D11D4 57 push edi
003D11D5 8B7D 10 mov edi,dword ptr ss:[ebp+10]
003D11D8 85F6 test esi,esi
003D11DA 75 09 jnz short EdrLib.003D11E5
―――――――――――――――――――――――――――――――――
三、PE修正 + 完成脱壳
用LordPE修正dumped.dll的OEP RVA=000011C9、输入表RVA=0000442C、重定位表RVA=00006000、大小=000003B0,保存之。
有兴趣可以把输出表挪一下,省事就不动了,删除输出表后面的壳数据,用LordPE或者FileScanner优化一下。OK,脱壳完成。
―――――――――――――――――――――――――――――――――
, _/
/| _.-~/ \_ , 青春都一晌
( /~ / \~-._ |\
`\\ _/ \ ~\ ) 忍把浮名
_-~~~-.) )__/;;,. \_ //'
/'_,\ --~ \ ~~~- ,;;\___( (.-~~~-. 换了破解轻狂
`~ _( ,_..--\ ( ,;'' / ~-- /._`\
/~~//' /' `~\ ) /--.._, )_ `~
" `~" " `" /~'`\ `\\~~\
" " "~' ""
UnPacked By : fly
2005-03-05 22:00
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!