为代码洞添加新的 PE 部分

逆向工程 聚乙烯 十六进制 二进制格式
2021-07-06 16:37:45

我正在尝试使用 LordPE 将 1000 字节的代码洞穴添加到独立的 exe。据我所知,我必须用 1000 字节的新部分编辑 PE 标头,然后在十六进制编辑器中打开 exe 并将 1000 字节添加到文件末尾。

当我添加新部分时,偏移量不在文件末尾,它实际上指向现有代码。如果我更改RawOffset以匹配文件的实际结尾,0xAE370它会损坏。

为什么不会在文件的真正末尾添加新部分?另外,如何在不损坏文件的情况下添加新的 1000 字节部分?

更新: 调试器在内存映射中新部分的位置上仍然不完美,但我可以看到我的新字节从它们列出的位置向下约 200h。为了让它工作,我必须:

  • 使用 CFF 添加新部分
  • 保存并在十六进制编辑器中打开文件以找到真正的 RawOffset
  • 然后手动将 CFF 中的 RawOffset 更改为 CFF 实际放置我的新字节的位置 0xAE378
  • 回到 CFF 右键单击​​并重建 PE 标头并重建图像大小(不确定是否需要重建大小部分)
  • 现在在调试器中导航到 .NewSec 所在的位置并向下滚动几百个字节,新插入的字节就在那里

仍然不确定为什么内存映射稍微偏离但还不错。我想一旦找到它们,您就可以编辑该部分的虚拟地址以反映它实际加载到内存中的位置。

在此处输入图片说明

1个回答

向 PE 文件添加节并不总是像编辑节表那样简单。有时您必须处理几个边缘情况,例如清单、签名和其他潜在的文件结尾可选“扩展”。

尽管 LordPE 是一个很棒的工具,但它并不是执行此任务最佳工具。它太低级了,并且不允许您透明地创建一个完整的新部分。它将允许您根据添加新部分的需要编辑不同的字段,但您必须自己处理所有内容。

有更高级的 PE 编辑器,例如CFF Explorer,可提供从头开始创建部分的功能。它将增加您的文件大小并创建一个您可以直接从 CFF Explorer 中编辑的部分。

要添加新节,请使用 CFF Explorer 打开文件,从左侧树视图中选择节标题选项,右键单击节表,选择“添加节(空白空间)”选项,如下图所示:

在此处输入图片说明

然后,指定新部分的大小。

要编辑新部分,请选择它,然后使用底部面板修改、粘贴、复制或填充该部分的十六进制视图。您可以右键单击它以打开带有其他编辑选项的菜单。