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"