在调试模式下使用radare2 进行二进制修补

逆向工程 雷达2 修补
2021-07-10 08:06:23

我是radare的新手,当我尝试修补crackme二进制文件时,我第一次以调试模式(-d)打开它,在调试时我使用oo+以写模式重新打开它,当我使用wx修改指令时,它有效,但是当我退出时它给了我两条确认消息,yes no 我按两次 Enter,然后它恢复到原始状态,并取消修改,即使退出后我怎么能保持更改???

2个回答

这是正常和预期的行为。当您在调试器中时,您正在修改的是进程内存,而不是磁盘文件。

我只是尝试打开一个二进制文件并打补丁,它实际上保存了我的补丁。我遵循的步骤是:

[99:99:99] <myuser>:answer $ cp crackme0x00 crackme0x00_patched
[99:99:99] <myuser>:answer $ radare2 -Aw crackme0x00_patched
[0x08048360]> pdf@sym.main 
[0x08048360]> 0x08048487
[0x08048487]> wa ret
Written 1 bytes (ret) = wx c3
[0x08048487]> q
[99:99:99] <myuser>:answer $ cmp -l crackme0x00 crackme0x00_patched | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}' 
00000488 E8 C3

(我从这里偷了比较脚本

如您所见,在我的情况下,即使退出后二进制文件仍然打补丁(C3ret指令的操作码oo+我没有像您那样重新打开文件,而是使用wA(相当于aaa以写入模式打开它。我只是尝试过自己而且我无法修补二进制文件并保存它们(如果有人可以提供更准确的解释,欢迎)。