我正在阅读此CTF撰写的文章,并希望了解更多而不是作者愿意解释的内容。


我实际上只是修补了getenv(),ptrace()和sleep()的PLT条目,因为在调试过程中睡眠变得很烦人


我想知道的是将PLT或GOT条目直接修补到二进制文件中的最佳方法是什么?

#1 楼

您可以使用radare2来执行此操作。首先以“写入”模式打开二进制文件。

radare2 -w ./binaryname


现在您需要查找要修改的地址:

s 0x8048739


假设您希望出于任何原因写出5条NOP,则可以执行以下操作: br />
wx 9090909090


#2 楼

您可以使用HxD或HIEW之类的十六进制编辑器直接修改二进制文件。找到要更改的十六进制字节,并查找要将其更改为的操作码。另外,如果您愿意,也可以直接从IDA进行修补,这可以通过idapatcher插件轻松实现。

https://thesprawl.org/projects/ida-patcher/

#3 楼

您可以使用Pwntools轻松完成此操作:
from pwn import *

elf = ELF('./your-binary')
elf.asm(elf.symbols.ptrace, 'xor eax, eax; ret')
elf.save('./your-patched-binary')


评论


这是最大错别字而不是eax吗?

–大卫
20 Sep 28 '21:37