p
命令。例如,p system
打印出系统地址。同样,peda的searchmem
功能对于诸如searchmem SHELL
之类的用途也非常有用。在Radare2中,我不知道该如何实现。我一直在谷歌上空的天堂。有谁知道Radare2是否具备此功能?#1 楼
要使用radare2打印system
出口的libc
输出地址,可以使用dmi libc system
首先,您需要打开radare2并继续执行直到到达程序的入口点。您必须执行此操作,因为Rade2在加载
libc
之前开始调试。当您到达入口点时,可能会加载该库。现在使用
dmi
命令并将其传递给libc和所需的函数。 $ r2 -d binary_name
[0xf771ab30]> dcu entry0
Continue until 0x080483d0 using 1 bpsize
hit breakpoint at: 80483d0
[0x080483d0]> dmi libc system
这里值得一提的是,经过分析(请参阅
a?
),radare2将名称与文件中有趣的偏移量相关联,例如Sections,Function,Symbols,String等。这些名称称为“标志”。您可以使用f
打印标志及其地址。有关更多帮助,请参见f?
并阅读radare2书中的“标志”一章。 要了解如何以不同的方式打印不同的地址和标志,建议您尝试使用
p?
命令并阅读“打印”一章。搜索可以使用
/
命令完成radare2(包括在内存中)的操作。您可以使用/?
获得有关可用搜索命令的更多帮助。我强烈建议阅读radare2书中的“搜索”一章。例如,请参见我的答案。 br /> #2 楼
来自peda
源代码: def searchmem(self, start, end, search, mem=None):
"""
Search for all instances of a pattern in memory from start to end
Args:
- start: start address (Int)
- end: end address (Int)
- search: string or python regex pattern (String)
- mem: cached mem to not re-read for repeated searches (raw bytes)
Returns:
- list of found result: (address(Int), hex encoded value(String))
"""
这听起来与
r2
的搜索功能非常相似:radare2搜索引擎基于esteve完成的工作,并实现了多项功能在它的上面。它支持多个关键字搜索,二进制掩码和十六进制值。它会自动为搜索匹配位置创建标记,以方便将来参考。
通过/命令启动搜索。
[0x00000000]> /?
|Usage: /[amx/] [arg]Search stuff (see 'e??search' for options)
| / foo\x00 search for string 'fooq4312078q'
| /j foo\x00 search for string 'fooq4312078q' (json output)
| /! ff search for first occurrence not matching
| /+ /bin/sh construct the string with chunks
| /!x 00 inverse hexa search (find first byte != 0x00)
| // repeat last search
| /h[t] [hash] [len] find block matching this hash. See /#?
| /a jmp eax assemble opcode and search its bytes
| /A jmp find analyzed instructions of this type (/A? for help)
| /b search backwards
| /B search recognized RBin headers
| /c jmp [esp] search for asm code
| /C[ar] search for crypto materials
| /d 101112 search for a deltified sequence of bytes
| /e /E.F/i match regular expression
| /E esil-expr offset matching given esil expressions %%= here
| /f file [off] [sz] search contents of file with offset and size
| /i foo search for string 'foo' ignoring case
| /m magicfile search for matching magic file (use blocksize)
| /o show offset of previous instruction
| /p patternsize search for pattern of given size
| /P patternsize search similar blocks
| /r[e] sym.printf analyze opcode reference an offset (/re for esil)
| /R [grepopcode] search for matching ROP gadgets, semicolon-separated
| /v[1248] value look for an `cfg.bigendian` 32bit value
| /V[1248] min max look for an `cfg.bigendian` 32bit value in range
| /w foo search for wide string 'fq4312078qoq4312078qoq4312078q'
| /wi foo search for wide string ignoring case 'fq4312078qoq4312078qoq4312078q'
| /x ff..33 search for hex string ignoring some nibbles
| /x ff0033 search for hex string
| /x ff43 ffd0 search for hexpair with mask
| /z min max search for strings of given size