【问题标题】:How to modify an executable without corrupting it?如何修改可执行文件而不破坏它?
【发布时间】:2012-08-30 00:40:27
【问题描述】:

如果添加到文件的前面,是否存在不会破坏可执行文件的特定空字符或字节序列?我尝试添加 NUL (00 hex),但每次都会破坏可执行文件。是否有一些用于 NOP(无操作)或类似内容的字节码?

长话短说,我想搞砸一个“hack”,它会在 &process+fixed offset 处修改内存中的值。将内存堆栈向上推会(或者我认为)会阻止它工作。

【问题讨论】:

  • 实际上这不会有任何影响,因为节目录仍然具有原始偏移量。你想要的比仅仅移动字节要复杂得多,因为你会弄乱二进制文件中的所有内存引用。为什么不只是在进行无害的更改后重新编译二进制文件。

标签: windows executable exe bytecode nul


【解决方案1】:

不,Windows 可执行文件使用的 PE 文件格式有一个非常具体的标题。详情请见http://en.wikipedia.org/wiki/Portable_Executable

您可以尝试使用ASLR 使您的代码更能抵抗内存中的修补。

【讨论】:

  • 如果不是您自己的代码,请查看 Microsoft 的增强型缓解体验工具包 (EMET)。
  • 感谢您的链接。浏览参考资料,我发现了这个:phreedom.org/research/tinype。看起来相当多的东西可以从 PE 标头中取出而不会破坏它,所以我将尝试删除而不是添加。
【解决方案2】:

您必须将其完全解析为不同的部分和段,修改您要查找的部分,但您将无法在任何代码段之前插入代码: 你最好有一个先执行的段,然后跳转到旧的开始段。

最后你将不得不重新创建一个新的完整的可执行文件。

【讨论】:

    猜你喜欢
    • 2019-02-15
    • 2011-10-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2020-06-26
    • 2014-09-15
    相关资源
    最近更新 更多