请拉到后面看一下问题:
ReloX修复DLL脱壳重定位表的简便方法――用Ollydbg手脱Neolite加壳的DLL
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:WinXP、Ollydbg V1.10、PEiD、LordPE、WinHex、ReloX
【实例下载】:点击下载
―――――――――――――――――――――――――――――――――
【脱壳过程】:
某些壳保护的DLL脱壳时重定位表修复让人头痛,偶然发现了ReloX修复重定位表的工具,试验了几次居然成功了,所以写个简单的过程加以推广这个工具。由于比较忙,所以只测试了Neolite和UPX加壳DLL的重定位表修复,其它壳大家再多测试吧。
EdrLib.dll是Neolite V2.0最大比例压缩,加密了重定位表,无法自动脱壳。
―――――――――――――――――――――――――――――――――
一、Entry Point
Neolite是压缩壳,OEP非常容易走到。
003D710F E9 A6000000 jmp EdrLib.003D71BA
//进入Ollydbg后暂停在这
003D71BA 8B4424 04 mov eax,dword ptr ss:[esp+4]
003D71BE 2305 20713D00 and eax,dword ptr ds:[3D7120]
003D71C4 E8 ED040000 call EdrLib.003D76B6
003D71C9 FE05 B9713D00 inc byte ptr ds:[3D71B9]
003D71CF FFE0 jmp eax
//这里就是跳向OEP的地方!:-) 在这里“埋伏”个断点,开始第二步操作
―――――――――――――――――――――――――――――――――
二、适当的Dump时机:搞定输入表
下断:BP VirtualProtect
中断后取消断点,Alt+F9返回
003D7B22 FF55 7A call dword ptr ss:[ebp+7A]; kernel32.VirtualProtect
003D7B25 FF75 66 push dword ptr ss:[ebp+66]
003D7B28 8D55 A2 lea edx,dword ptr ss:[ebp-5E]
003D7B2B 8D85 5EFDFFFF lea eax,dword ptr ss:[ebp-2A2]
003D7B31 FF75 5A push dword ptr ss:[ebp+5A]
003D7B34 8B4F 0C mov ecx,dword ptr ds:[edi+C]
003D7B37 E8 B4030000 call EdrLib.003D7EF0
//区段解压
003D7B3C 8B55 0A mov edx,dword ptr ss:[ebp+A]
003D7B3F 8B47 04 mov eax,dword ptr ds:[edi+4]
003D7B42 8B52 24 mov edx,dword ptr ds:[edx+24]
003D7B45 25 00000080 and eax,80000000
003D7B4A 81E2 00000080 and edx,80000000
003D7B50 39D0 cmp eax,edx
003D7B52 0F84 60FFFFFF je EdrLib.003D7AB8
003D7B58 F647 04 20 test byte ptr ds:[edi+4],20
003D7B5C 0F84 4FFFFFFF je EdrLib.003D7AB1
003D7B62 C745 AA 20000000 mov dword ptr ss:[ebp-56],20
003D7B69 E9 4AFFFFFF jmp EdrLib.003D7AB8
//循环
003D7B6E 837E 24 00 cmp dword ptr ds:[esi+24],0
//F4到这里 [esi+24]=[003E4024]=0000442C 输入表的RVA! ★
003D7B72 0F84 1D010000 je EdrLib.003D7C95
这是FLY的一篇脱壳文章,脱壳的步骤步骤是知道了,就是这个值到底是怎么来的//F4到这里 [esi+24]=[003E4024]=0000442C 输入表的RVA! ★
这个0000442C 是怎么计算出来的
我查了很多的资料
但是就是无法获得和这个值相等的数值
请熟悉RAV计算机的指点一下.....
先谢过了
[培训]科锐逆向工程师培训第53期2025年7月8日开班!