什么是radare2 相当于GDB 的find &system,+9999999,"/bin/sh"
?
什么是radare2相当于GDB的'find &system,+9999999,"/bin/sh"'
逆向工程
雷达2
数据库
2021-06-12 09:51:50
2个回答
首先,我们应该使用radare2在调试模式下打开二进制文件
$ r2 -d file
字符串/bin/sh
驻留在system
函数中,libc
所以应该首先将库加载到内存中,以便我们在那里找到字符串。让我们继续执行程序直到它的入口点。此时libc
应该已经加载到内存中了。
[0xf7f9bc60]> dcu entry0
Continue until 0x565914a0 using 1 bpsize
hit breakpoint at: 565914a0
[0x565914a0]>
dcu
代表d ebug ç ontinue ü NTIL
要找到/bin/sh
我们应该使用radare 的搜索功能。默认情况下,radare 正在搜索dbg.map
当前的内存映射。在我们的例子中,不能保证它/bin/sh
会出现在我们当前的内存映射中。因此,我们希望它在所有内存映射中进行搜索,因此我们需要对其进行配置:
[0x080483d0]> e search.in = dbg.maps
如果您将执行 ,您可以查看更多选项e search.in=?
。要以可视方式配置雷达,请使用Ve
.
在radare中搜索是用/
命令完成的,你可以通过执行查看大量的搜索选项/?
。
让我们搜索/bin/sh
:
[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.
等等!radare 在 中找到了字符串0xf7f1180a
。
为了加快速度,我们可以告诉radare 从system
里面开始搜索libc
。首先我们需要system
在 libc 中的地址,我们可以做到这一点,dmi
然后配置search.from
从system
.
[0x565914a0]> dmi libc system
vaddr=0xf7dd3700 paddr=0x0003c700 ord=566 fwd=NONE sz=1126 bind=LOCAL type=FUNC name=do_system
vaddr=0xf7ebf470 paddr=0x00128470 ord=4988 fwd=NONE sz=102 bind=LOCAL type=FUNC name=svcerr_systemerr
vaddr=0xf7dd3c50 paddr=0x0003cc50 ord=6919 fwd=NONE sz=55 bind=WEAK type=FUNC name=system
[0x565914a0]> e search.from=0xf7dd3c50
[0x565914a0]> / /bin/sh
Searching 7 bytes from 0xf7dd3c50 to 0xffffffffffffffff: 2f 62 69 6e 2f 73 68
Searching 7 bytes in [0xf7dd3c50-0xf7f66000]
hits: 1
<..truncated..>
0xf7f1180a hit2_0 .b/strtod_l.c-c/bin/shexit 0canonica.
你去吧!现在,您可以根据需要使用ps @ 0xf7f1180a
或使用地址打印字符串。
感谢来自radare @ Telegram 的David Polverari
在调试模式下:
e search.in=range
e search.from=<start_addr>
e search.to=<end_addr>
"/ /bin/sh"