还是做一些加密解密3的学习记录
文件链接:https://pan.baidu.com/s/1-KiagpsimjDBsyMF01ouxA 密码:tt8u
工具链接:https://pan.baidu.com/s/14dP_ksqM8WvTnKxCZ18xUw 密码:qqr5
DLL文件脱壳相比于EXE脱壳困难一些
先压缩,要是失败了,就找别的工具吧
用PEEditor查看一下加壳后的DLL文件的信息
ImageBase默认定位在了00400000处,可是我们用OD打开会发现并不是
如果你的OD有插间或者辅助程序Loaddll.exe就可以打开DLL文件了,可以去下一个
用OD打开后,会发现入口点并不在00400000,如果不确定的话可以打开内存看一下,已经是在500000了
猜都猜出来用了重定位,难度加大,跳转到pedit段(我们加壳后多出来的区段,即外壳段)
在0050D000处设置断点,运行DLL,第一次会停止在该处(一次不行久多运行几次,加载可能会出问题),正常,要执行外壳嘛,然后我们关闭DLL跳出的文件,然后不断单步执行,你会发现又再次到了这个地点,为什么呢?
因为dll文件的特殊性,加载和脱离的时候都会经过外壳处理,但是在脱离的时候外壳里面的解压代码段就不会执行了,执行的代码量会少一些,既然更少,那就更容易找到OEP,我们直接对text段设访问断电,运行后直接跳转到OEP
直接用lordPE dump下来就好,如果想和加壳前地址一样的话,那就要找出重定位代码,强行跳过就好了
同时创建输入表的时候dll和exe也有一点点区别
我们用ImportREC来重建输入表(dump,和重建输入表我都是另外从win7上实行的,所以地址有些不一样)
绑定进程后,在选项里把下图的勾去掉,因为dll加载的不是默认的基地址
然后在OEP处填入我们找到的1240,之后自动搜索IAT地址,然后重构建输入表
最后fix dump就好了(当然啦,还缺最后一步,构造重定位表)
为什么要构造重定位表呢,因为dll的动态链接库文件,外壳可能破坏了原始重定位表,具体操作其实就是打补丁把提取重定位的表的值