我要从混合了peda的GDB切换到Radare2。我喜欢GDB的一件事是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