什么是radare2相当于GDB的'find &system,+9999999,"/bin/sh"'

逆向工程 雷达2 数据库
2021-06-12 09:51:50

什么是radare2 相当于GDB 的find &system,+9999999,"/bin/sh"

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.fromsystem.

[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"