使用 GDB 修改可执行文件

逆向工程 x86 数据库
2021-06-24 01:26:05

我正在为系统编程课程做作业,为了获得额外的学分,我们被要求修改一个可执行文件以允许它接受我们的 PIN 的反向(发现 PIN 是原始作业)。我能够使用 GDB 将为 PIN 存储的内存值更改为相反的值,并且当我运行该程序时,它按预期工作。唯一的问题是我无法将这些更改保存到可执行文件中。一旦我退出调试器,它就会恢复正常。在进行更改之前,我曾尝试使用“set write on”和“gdb -write”,但更改仍然不成立。有谁知道我正在做的事情是否可行,或者我可能哪里出错了?

1个回答

你记得之后重新加载你的程序set write on吗?

您是否加载了原始程序的(可写)副本(而不是教授的副本位于共享位置,每个人都可以读取,但没有人可以写入)?

实际上,我从来没有使用 gdb 直接修补文件,我通常使用十六进制编辑器。

如果您的系统上没有十六进制编辑器,也许您有xxd,它允许您将二进制文件转换为十六进制转储,反之亦然。

如果一切都失败了,你仍然可以做类似的事情

echo 'X' | dd of=binary.file bs=1 seek=12345 count=1

将文件中偏移量 12345 处的字节修补为 X。此方法的优点是它不依赖于任何 gnu 实用程序,因此它适用于大多数 unix 变体。