BSD/UNIX上可执行文件的动态修补
-
09-10-2019 - |
题
我面临着一个很大的问题。我需要修补可执行的行为以修改其行为。该程序是用C编写的,到目前为止,我一直在使用IDA来编辑它,但是这样我无法替换整个功能等。对我来说,最简单的方法是创建一种将加载程序并在运行之前对其进行修补的加载程序。这可以节省我很多时间,所有编辑都会容易得多。
问题是我找不到有关如何做的文章。你们中的任何人都可以解释我应该如何处理这个过程吗?加载程序将用C/C ++编写。
解决方案
尝试该过程是完全惯用的。
- 您为什么不只是重新编译这些更改?
- 来源不可用是通常的原因。
- 它是一个封闭的源程序吗?
- 如果是这样,您可能会通过尝试破坏许可条款。
- 来源丢失了吗?
- 备份和版本控制发生了什么?
- 它是用共享库中的密钥代码构建的吗?
- 如果是这样,您可以希望用新功能替换共享库?
- 你可以使用吗?
LD_PRELOAD
实现您的目标?
由于UNIX的“来源可用”理念,因此没有太多工具可以帮助修补二进制文件 - 从经典上讲,选择的工具是一个名为的程序 adb
- 调试器(第七版Unix手册说“ ADB-调试器”)。它允许您编辑二进制文件。
但是,人们很少做出重大的改变,因为这听起来像您想做的那样,主要是因为它非常艰苦,并且通过重新编译原始来源来简单得多,更可靠。
不隶属于 StackOverflow