Как печатать адреса в Radare2


2

Я переключаюсь на Radare2 из GDB, смешанного с peda. Одна из вещей, которые мне нравятся в GDB, - это команда p. Например, p system распечатывает адрес системы. Кроме того, функция searchmem от peda замечательна для таких применений, как searchmem SHELL. В Radare2 я понятия не имею, как этого добиться. Я был Google на небесах безрезультатно. Кто-нибудь знает, обладает ли Radare2 этой способностью?

3

Чтобы напечатать адрес system экспорта libc с radare2 вы можете использовать dmi libc system

Сначала вам нужно открыть radare2 и продолжить выполнение, пока не достигнете EntryPoint программы. Вы должны это сделать, потому что radare2 начинает отладку до загрузки 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 связывает имена интересных смещений в файле, такие как разделы, функция, символы, строки и т.д. Эти имена называются «флагами». Вы можете распечатать флаги и их адреса с помощью f. Для получения дополнительной информации см. f? и прочитайте главу "flags" в книге radare2.

Чтобы узнать, как печатать разные адреса и флаги по-разному, я рекомендую попробовать команду p? и прочитать главу "Printing".


Поиск в radare2, в том числе и в памяти, может быть сделано с помощью команды /. Вы можете получить дополнительную информацию о доступных командах поиска, используя /?. Я настоятельно рекомендую прочитать главу "Search" в книге radare2. См. Мой ответ here, например.


Ссылки


1

От peda source code:

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 «s searching capability:

Поиск radare2 двигатель основан на работе, проделанной Эстив, а также множество функций, реализованных на вершине Это. Он поддерживает несколько поисков по ключевым словам, двоичные маски и шестнадцатеричные значения. Он автоматически создает флаги для местоположений удаленных поисковых запросов, облегчающих последующие ссылки.

Поиск инициируется командой /.

[0x00000000]> /? 
|Usage: /[amx/] [arg]Search stuff (see 'e??search' for options) 
|/foo\x00   search for string 'foo\0' 
| /j foo\x00   search for string 'foo\0' (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 'f\0o\0o\0' 
| /wi foo    search for wide string ignoring case 'f\0o\0o\0' 
| /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