【目标程序】:ASPack加壳的EdrLib.dll。附件中含有输入表和UnPacked以供参考。
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:WinXP、Ollydbg1.10、LordPE、ImportREC
—————————————————————————————————
【脱壳过程】:
一、重定位表RVA + OEP
代码:--------------------------------------------------------------------------------
003B7001 60 pushad//进入OD后停在这
003B7002 E8 03000000 call EdrLib.003B700A
--------------------------------------------------------------------------------
提供一个简便寻找ASPack加壳DLL的重定位处理代码段的方法!
Ctrl+S在“整个段块”搜索命令序列:
代码:--------------------------------------------------------------------------------
mov ecx,dword ptr ds:[esi+4]
sub ecx,8
shr ecx,1
--------------------------------------------------------------------------------
找到在003B71F6处!我们在其上的003B71DA处下断,F9运行,中断。
代码:--------------------------------------------------------------------------------
003B71C8 8785 35050000 xchg dword ptr ss:[ebp+535],eax
003B71CE 8B95 22040000 mov edx,dword ptr ss:[ebp+422]
003B71D4 8B85 2D050000 mov eax,dword ptr ss:[ebp+52D]
003B71DA 2BD0 sub edx,eax
//这里其实就是检测与映像基址是否相符,和ASProtect的方法一样。不符则重定位处理!★
003B71DC 74 79 je short EdrLib.003B7257
//可以在这里改标志位Z=1,使其跳转,这样脱壳后就不需要修改基址了。 ★
003B71DE 8BC2 mov eax,edx
003B71E0 C1E8 10 shr eax,10
003B71E3 33DB xor ebx,ebx
003B71E5 8BB5 39050000 mov esi,dword ptr ss:[ebp+539]
//[ebp+539]=003B754C=00006000 ★ 这个00006000就是重定位表的RVA!
003B71EB 03B5 22040000 add esi,dword ptr ss:[ebp+422]
003B71F1 833E 00 cmp dword ptr ds:[esi],0
003B71F4 74 61 je short EdrLib.003B7257
//重定位处理完毕后这里就跳转 在003B7257处下断
003B71F6 8B4E 04 mov ecx,dword ptr ds:[esi+4]
//找到这里
003B71F9 83E9 08 sub ecx,8
003B71FC