使用 ImpREC 修复解压 DLL 的导入表:ImpRec 抛出“无效的 OEP!” 错误

逆向工程 dll 开箱 免疫调试器 倾倒 进口改造
2021-06-30 11:14:46

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

  1. 修改了 PE 标头中的标志,以便 Windows 将文件加载为 exe,而不是 dll。
  2. 加载到 Immunity Debugger 并找到真正的入口点(解包二进制文件的入口点)
  3. 在此入口点转储二进制文件。
  4. 现在我打开 ImpREC 来修复转储的 DLL 的导入表。然而,在 ImpREC 中显示的基本内存是 7100000。当我将“068BA2A0”作为入口点时,ImpRec 抱怨 OEP 无效!。我不明白被调试进程的基地址是如何“7100000”的。我怀疑这可能是问题所在。

在此处输入图片说明

为什么会出现这个错误?任何指示来修复它?

2个回答

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

  • 1 - 在选项中取消勾选并重新选择您的目标
  • 2 - 使用带有高级命令的自定义 PE 标头/加载 PE 标头

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

说明:默认情况下启用“Use PE Header From Disk”的原因是保护器会破坏内存中的头,因此最好依赖磁盘,但对DLL不利。

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

尝试计算您的 OEP 的偏移量(即地址 - 基址)并使用此值计算具有新基址的 OEP 地址(基址 2 + 偏移量)