什么是radare2与GDB的find &system,+9999999,"/bin/sh"等效?

#1 楼

首先,我们应该使用radare2在调试模式下打开二进制文件。
$ r2 -d file

为了让我们在这里找到字符串。让我们继续执行程序,直到其进入点为止。在这一点上,应该已经将/bin/sh加载到内存中。
搜索功能。默认情况下,radare在system中搜索,这是当前的内存映射。在我们的情况下,不能保证libc将在我们当前的内存映射中。因此,我们希望它在所有内存映射中搜索,因此我们需要对其进行配置:

[0xf7f9bc60]> dcu entry0
Continue until 0x565914a0 using 1 bpsize
hit breakpoint at: 565914a0
[0x565914a0]> 


如果执行libc,则可以查看更多选项。要配置可视化雷达,请使用dcu。搜索/bin/sh

[0x080483d0]> e search.in = dbg.maps


EtVoilà! radare在dbg.map中找到了字符串。

为了加快处理速度,我们可以告诉radare从/bin/sh内部的e search.in=?开始搜索。使用Ve执行此操作,然后将/配置为从/?开始。

[0x565914a0]> / /bin/sh
Searching 7 bytes from 0x00000000 to 0xffffffffffffffff: 2f 62 69 6e 2f 73 68 
Searching 7 bytes in [0x56591000-0x56592000]
hits: 1

<..truncated..>

Searching 7 bytes in [0xf7d97000-0xf7f66000]
hits: 1

0xf7f1180a hit1_2 .b/strtod_l.c-c/bin/shexit 0canonica.


你去了!现在,您可以使用/bin/sh打印该字符串,也可以使用所需的地址。

#2 楼

感谢rarad @ Telegram的David Polverari

,同时处于调试模式:

e search.in=range
e search.from=<start_addr>
e search.to=<end_addr>

"/ /bin/sh"