我正在尝试解压缩DLL并使用ImpRec修复导入表。但是,我被这个错误所困扰。以下是我尝试过的。


修改了其PE标头中的标志,以便Windows将文件作为exe(而不是dll)加载。
加载到Immunity Debugger并找到真实的入口点(解压后的二进制文件的入口点)。
现在,将二进制文件转储到该入口点。
现在我打开ImpREC修复的导入表。转储的DLL。但是,在ImpREC中,显示的基本内存为7100000。当我输入“ 068BA2A0”作为入口点时,ImpRec会投诉无效的OEP!。我不了解调试过程的基址如何为“ 7100000”。我怀疑这可能是问题所在。



为什么会出现此错误?有修复的指针吗?

#1 楼

您的分析机是Windows 7,ASLR正在不同执行之间修改模块基地址。

尝试计算OEP的偏移量(即地址-基数),并使用此值以新的基数(base2 +偏移量)计算OEP地址

评论


我刚在XP机器上尝试过,并且可以正常工作。谢谢。

– aMa
15年3月28日在22:26

但是,它不适用于Windows7。我试图将EOP保持为7100000(ImpREC找到的基址)+ BA2A0(在抗扰度中找到的偏移量)= 071BA2A0。还是一样的错误。

– aMa
15年3月28日在22:29

我在XP上再次遇到相同的错误。太奇怪了如果问题是ASLR,如何找到新的基址?

– aMa
15年4月17日在6:29

#2 楼

我认为为时已晚,但是让我们回复。
默认情况下,ImREC已启用“使用磁盘的PE标头”。这意味着它将不使用重定位的DLL映像库。 2个选项:


1-取消勾选选项,然后重新选择目标
2-使用带有自定义PE标头的高级命令/加载PE标头

->首选是最适合您的情况。

说明:默认情况下启用“从磁盘使用PE标头”的原因来自保护器,该保护器会破坏内存中的标头,因此最好依靠在磁盘上,但对DLL不利。