更改已编译二进制文件的部分

学习英语作为第二个郎,对错误和尴尬感到抱歉

我已经给出了一个特殊的项目。 该公司已丢失该应用程序的源代码,我必须对其进行更改。 现在,逆向工程整个事情对于一个人来说是不可能的,它太过庞大,但是修补个别function是可行的,因为这些变化并不是那么具有纪念意义。

因此,一种可能的解决方案是编译C代码,然后以某种方式 – 重写地址 – 将其修补到实际二进制文件中,理想情况下,替换CALL指令跳转到的代码,或者将JMP插入到我的代码中。

有没有办法用MingW32来实现这个目的? 如果是,您能提供一个简单的例子吗? 我也对可以帮助我完成任务的书籍感兴趣。

谢谢你的帮助

我使用OllyDBG来做这类事情。 它允许您查看反汇编并对其进行调试,您可以放置​​断点等,还可以编辑二进制文件。 因此,您可以编辑该程序的PE头,在其中添加一个包含您的 (已编译)代码的代码段,然后从原始程序中调用它。
因为我从未尝试过,所以我无法给你任何建议,尽管我多次考虑过这个问题。 你知道,懒惰.. 🙂

我会用一个高质量的反汇编程序来反汇编程序,它可以生成可以组装回可运行应用程序的东西,然后用C代码替换你需要修改的部分。

这样的东西可以让你将机器代码转换为源代码。 它不会很漂亮,但确实有效。

http://www.hex-rays.com/idapro/

例如,还有用于运行时修补的工具http://www.dyninst.org/ 。 它们确实不是用于修补,但它们可以做到这一点。

当然最后的选择是只使用汇编程序并编写机器代码:)