【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:WinXP、Ollydbg V1.10、PEiD、LordPE、ImportREC
—————————————————————————————————
【脱壳过程】:
朋友拿来这个东东让我看看,30天的试用,Vbox的标记,看其调用的vboxa.dll版本是4.5.0.0,所以知道了是Vbox V4.5。恰巧很久没写东西了,索性记录一下过程吧。目标程序自己搜索。
—————————————————————————————————
设置Ollydbg忽略所有异常选项。老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。
00D71248 75 00 jnz short Dreamwea.00D7124A//进入OD后停在这
00D7124A 90 nop
00D7124B 32E0 xor ah,al
00D7124D 8BC5 mov eax,ebp
00D7124F 40 inc eax
00D71250 86E0 xchg al,ah
00D71252 85C0 test eax,eax
00D71254 EB 00 jmp short Dreamwea.00D71256
Shift+F9运行,确定几个入口提示,弹出经典的Vbox保护画面。
现在下断:BP GetProcAddress,然后点“试用”,中断后取消断点。
Ctrl+F9两次,就来到处理IAT的地方了。
0700B17B E8 26FBFFFF call vboxta.0700ACA6
//GetProcAddress
0700B180 83C4 14 add esp,14
//返回这里
0700B183 85C0 test eax,eax
0700B185 0F84 80000000 je vboxta.0700B20B
0700B18B FF45 F0 inc dword ptr ss:[ebp-10]
0700B18E 8906 mov dword ptr ds:[esi],eax
//函数写入
0700B190 8B45 F0 mov eax,dword ptr ss:[ebp-10]
0700B193 83C7 04 add edi,4
0700B196 3B45 D8 cmp eax,dword ptr ss:[ebp-28]
0700B199 72 88 jb short vboxta.0700B123
//循环
因为Vbox V4.5没加密输入表(除了一个函数),所以这里看看而已,就不必多管了。
————————————————————————
下断:BP FreeLibrary
中断后取消断点,Ctrl+F9返回
070081E2 FF15 D0C10407 call dword ptr ds:[704C1D0] ; kernel32.FreeLibrary
070081E8 8B76 14 mov esi,dword ptr ds:[esi+14]; Dreamwea.009801C0
//返回这里。[esi+14]=009801C0 这就是OEP值!★
想看看Vbox V4.5是如何跳OEP的?OK,我们在[esi+14]=[015B0014]转存处下内存访问断点,F9运行,中断。
016009B9 8B48 14 mov ecx,dword ptr ds:[eax+14]; Dreamwea.009801C0
016009BC EB 02 jmp short 016009C0
016009C0 894D F0 mov dword ptr ss:[ebp-10],ecx; Dreamwea.009801C0
016009C3 EB 01 jmp short 016009C6
016009C6 8B5D F0 mov ebx,dword ptr ss:[ebp-10]; Dreamwea.009801C0
016009C9 EB 02 jmp short 016009CD
016009CD FFE3 jmp ebx ; Dreamwea.009801C0
//飞向光明之巅! ^O^
————————————————————————
009801C0 6A 02 push 2
//在这儿用LordPE纠正ImageSize后完全DUMP这个进程
009801C2 FF15 08C2B900 call dword ptr ds:[B9C208] ; kernel32.SetErrorMode
009801C8 68 40019800 push Dreamwea.00980140
009801CD FF15 0CC2B900 call dword ptr ds:[B9C20C] ; kernel32.SetUnhandledExceptionFilter
009801D3 E9 20221700 jmp Dreamwea.00AF23F8
————————————————————————
运行ImportREC,选择这个进程。把OEP改为005801C0,点IT AutoSearch,点“Get Import”,有一个无效函数:
0079DB54 ? 0000 0700EBBF
我们Ctrl+G:0700EBBF看看:
0700EBBF 55 push ebp
0700EBC0 8BEC mov ebp,esp
0700EBC2 E8 A7FFFFFF call vboxta.0700EB6E
0700EBC7 FF75 18 push dword ptr ss:[ebp+18]
0700EBCA FF75 14 push dword ptr ss:[ebp+14]
0700EBCD FF75 10 push dword ptr ss:[ebp+10]
0700EBD0 FF75 0C push dword ptr ss:[ebp+C]
0700EBD3 FF75 08 push dword ptr ss:[ebp+8]
0700EBD6 FF15 D4C30407 call dword ptr ds:[704C3D4]; USER32.PeekMessageA
0700EBDC 5D pop ebp
0700EBDD C2 1400 retn 14
把这个函数修改为USER32.PeekMessageA,FixDump!
OK,启动时不见试用提示,Vbox 荡然无存了。
—————————————————————————————————
, _/
/| _.-~/ \_ , 青春都一晌
( /~ / \~-._ |\
`\\ _/ \ ~\ ) 忍把浮名
_-~~~-.) )__/;;,. \_ //'
/'_,\ --~ \ ~~~- ,;;\___( (.-~~~-. 换了破解轻狂
`~ _( ,_..--\ ( ,;'' / ~-- /._`\
/~~//' /' `~\ ) /--.._, )_ `~
" `~" " `" /~'`\ `\\~~\
" " "~' ""
Cracked By 巢水工作坊——fly [FCG][NUKE][DCM]
2004-08-15 17:00