我正在为系统编程课程做作业,为了获得额外的学分,我们被要求修改一个可执行文件以允许它接受我们的 PIN 的反向(发现 PIN 是原始作业)。我能够使用 GDB 将为 PIN 存储的内存值更改为相反的值,并且当我运行该程序时,它按预期工作。唯一的问题是我无法将这些更改保存到可执行文件中。一旦我退出调试器,它就会恢复正常。在进行更改之前,我曾尝试使用“set write on”和“gdb -write”,但更改仍然不成立。有谁知道我正在做的事情是否可行,或者我可能哪里出错了?
使用 GDB 修改可执行文件
逆向工程
x86
数据库
2021-06-24 01:26:05
1个回答
你记得之后重新加载你的程序set write on
吗?
您是否加载了原始程序的(可写)副本(而不是教授的副本位于共享位置,每个人都可以读取,但没有人可以写入)?
实际上,我从来没有使用 gdb 直接修补文件,我通常使用十六进制编辑器。
如果您的系统上没有十六进制编辑器,也许您有xxd
,它允许您将二进制文件转换为十六进制转储,反之亦然。
如果一切都失败了,你仍然可以做类似的事情
echo 'X' | dd of=binary.file bs=1 seek=12345 count=1
将文件中偏移量 12345 处的字节修补为 X。此方法的优点是它不依赖于任何 gnu 实用程序,因此它适用于大多数 unix 变体。