1

我目前正在radare2中调试一个名为“test”的C程序,我想知道是否有任何方法可以让我通过radare2发送十六进制字符作为输入。我的意思是当你在radare2之外运行一些东西时,你可以很容易地做这样的事情来将十六进制值作为输入发送到一个可执行文件中:

$ python -c "print('\x42\x97\x53\x8e\x46\x56')" | ./test

但是当我在radare2中以调试模式打开文件并尝试将十六进制值输入到我的程序中时,它并没有将以“\x”开头的字符视为十六进制字符,而是将每个字符视为实际的ascii输入字符。我可以在radare2中复制上述命令吗?

4

1 回答 1

2

环境:

  • radare2: radare2 4.2.0-git 23519 @ linux-x86-64 git.4.1.1-84-g0c46c3e1e 提交:0c46c3e1e30bb272a5a05fc367d874af32b41fe4 构建:2020-01-08__09:49:06
  • 系统: Ubuntu 18.04.3 LTS

解决方案:

  • 要在radare2 中重新创建所描述的功能,我们可以使用两个radare2 命令并在您的输入字符串中添加额外的转义包。
    • 命令一:doo [args] # 在调试模式下使用提供的参数重新打开二进制文件。
    • 命令二:dc #继续执行
    • 输入中的其他转义包:“\x54\x65\x73\x74”->“\\x54\\x65\\x73\\x74”

例子:

  • 将十六进制值传递给 /bin/echo:
user@host:~$ echo -e "\x54\x65\x73\x74"
Test
  • 在radare2中尝试同样的事情:
user@host:~$ r2 /bin/echo
[0x00001d10]> doo -e "\x54\x65\x73\x74"
Process with PID 13820 started...
= attach 13820 13820
File dbg:///bin/echo  -e "\x54\x65\x73\x74" reopened in read-write mode
13820
[0x7ff1924ee090]> dc
x54x65x73x74
[0x7ff1924ee090]>
  • 再次使用radare2,但带有额外的转义包(“\x54”->“\\x54”):
user@host:~$ r2 /bin/echo
[0x00001d10]> doo -e "\\x54\\x65\\x73\\x74"
Process with PID 17265 started...
= attach 17265 17265
File dbg:///bin/echo  -e "\\x54\\x65\\x73\\x74" reopened in read-write mode
17265
[0x7fb080026090]> dc
Test
[0x7fb07fd18e06]>
于 2020-01-08T15:51:25.580 回答