如何在radare2调试模式下输入十六进制输入?

逆向工程 调试 雷达2
2021-07-08 02:12:17
#include<stdio.h>
#include<stdlib.h>
int main() {
    puts("Enter input: ");
    char buf[100];
    fgets(buf, 100, stdin);
    printf("%s", buf);
}

假设我正在调试一个程序,例如上面的程序,我需要在其中输入一些输入。通常,radare2 所做的是它允许我在程序要求我有用户输入时输入任何 ascii 输入,它看起来像下面这样:

Enter input: Hello
Hello

但是,如果我需要输入十六进制输入怎么办?通常,如果我想在radare2 之外的程序中使用十六进制输入,我会使用如下所示的命令:

python -c "print('\x48\x65\x6c\x6c\x6f')" | ./program

但是,如果我使用radare2 调试程序并使用\x48\x65\x6c\x6c\x6f 之类的东西作为输入,radare2 会将反冲x 逐字解释为看起来像“\x”的字符串,而不是将输入解释为十六进制。我将如何在radare2内部正确输入十六进制?

1个回答
  • 将字符串写入文件:

    $ echo -e '\x48\x65\x6c\x6c\x6f' > p.text    
    

    或者

    $ python -c "print('\x48\x65\x6c\x6c\x6f')" > p.text   
    
  • 执行radare2:

    $ r2 -d program 
    
  • 一旦进入r2执行dor( 的别名rarun2)并将 设置stdin为文件:

    [0x7f1a2522a090]> dor stdin=p.text
    [0x7fb15f311e06]> doo # Reopen in debugger mode