还是做一些加密解密3的学习记录

文件链接:https://pan.baidu.com/s/1-KiagpsimjDBsyMF01ouxA 密码:tt8u

工具链接:https://pan.baidu.com/s/14dP_ksqM8WvTnKxCZ18xUw 密码:qqr5

DLL文件脱壳相比于EXE脱壳困难一些

脱壳学习记录----DLL找OEP先压缩,要是失败了,就找别的工具吧

用PEEditor查看一下加壳后的DLL文件的信息

脱壳学习记录----DLL找OEP

ImageBase默认定位在了00400000处,可是我们用OD打开会发现并不是

如果你的OD有插间或者辅助程序Loaddll.exe就可以打开DLL文件了,可以去下一个

用OD打开后,会发现入口点并不在00400000,如果不确定的话可以打开内存看一下,已经是在500000了

脱壳学习记录----DLL找OEP

猜都猜出来用了重定位,难度加大,跳转到pedit段(我们加壳后多出来的区段,即外壳段)

在0050D000处设置断点,运行DLL,第一次会停止在该处(一次不行久多运行几次,加载可能会出问题),正常,要执行外壳嘛,然后我们关闭DLL跳出的文件,然后不断单步执行,你会发现又再次到了这个地点,为什么呢?

因为dll文件的特殊性,加载和脱离的时候都会经过外壳处理,但是在脱离的时候外壳里面的解压代码段就不会执行了,执行的代码量会少一些,既然更少,那就更容易找到OEP,我们直接对text段设访问断电,运行后直接跳转到OEP

脱壳学习记录----DLL找OEP

直接用lordPE dump下来就好,如果想和加壳前地址一样的话,那就要找出重定位代码,强行跳过就好了

同时创建输入表的时候dll和exe也有一点点区别

我们用ImportREC来重建输入表(dump,和重建输入表我都是另外从win7上实行的,所以地址有些不一样)

绑定进程后,在选项里把下图的勾去掉,因为dll加载的不是默认的基地址

脱壳学习记录----DLL找OEP

然后在OEP处填入我们找到的1240,之后自动搜索IAT地址,然后重构建输入表

最后fix dump就好了(当然啦,还缺最后一步,构造重定位表)

为什么要构造重定位表呢,因为dll的动态链接库文件,外壳可能破坏了原始重定位表,具体操作其实就是打补丁把提取重定位的表的值

 

 

 

 

 

 

 

相关文章: