Программирование PC radare2 Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


radare2 Печать
Добавил(а) microsin   

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

Функциональные возможности radare2:

- Режимы: пакетный (batch), командной строки (commandline), визуально-интерактивный, панельный.
- Встроенный web-сервер с поддержкой скриптов js и webui.
- Ассемблирование и дизассемблирование большого списка CPU.
- Работает на Windows и любом другом UNIX.
- Анализирует и эмулирует код с ESIL.
- Native-отладчик, GDB, WINDBG, QNX и FRIDA.
- Навигация по ascii-art, графам управления потоком.
- Возможность наложение патчей на бинарники, модификации кода или данных.
- Поиск паттернов, magic headers, сигнатур функций.
- Упрощенное расширение и модификация.
- Командная строка, C API, скрипты с помощью r2pipe на любом языке.

[Установка]

Рекомендуемый способ установки - компиляция из исходников git [2]. Альтернативно можете взять последний релиз (выпускается каждые 6 недель) на Github (см. релизы также на https://radare.mikelloc.com/).

Установка выполняется следующим образом:

$ git clone https://github.com/radareorg/radare2
$ cd radare2 ; sys/install.sh

В случае проблем попробуйте:

$ sudo make purge
$ rm -rf shlr/capstone
$ git clean -xdf
$ git reset --hard @~50
$ sys/install.sh

[Как использовать radare2]

Radare2 может использоваться многими способами, от командной строки и шелл-скриптов до вызова индивидуальных инструментов:

$ rasm2 -a arm -b 32 -d `rasm2 -a arm -b 32 nop`
$ rabin2 -Ss /bin/ls  # list symbols and sections
$ rahash2 -a md5 /bin/ls
$ rafind2 -x deadbeef bin

Все программы также доступны как команды изнутри r2:

$ r2 -
> pa nop
90
> pad 90
nop

Вот несколько общих команд, которые вы можете использовать в повседневной работе:

$ r2 /bin/ls
> aaa      # анализировать все что можно
> is       # список символов
> afl      # список найденных функций
> pdf      # дизассемблирование
> s < tab> # seek to address
> v        # вход в визуальный панельный режим

Отладчик. Слой IO, выбранный URI файла, когда файл открывается в r2, может быть любым - локальным, remote r2 shell, полный диск, другой процесс в памяти, и т. д.

Для упрощения жизни флаг -d будет использовать dbg://uri, чтобы породить процесс или подключиться к процессу для чтения/записи его памяти, модификации регистров и инспекции потока выполнения кода. Это отладчик низкого уровня. Не волнуйтесь, разработчики не пытаются заменить gdb/lldb.

$ r2 -d gdb://127.0.0.1
> ds          # step into
> dso         # step over
> dr=         # показать регистры столбцами
> dbt         # show backtrace
> dsu entry0  # продолжить до точки входа
> dr rax=33   # поменять значение регистра
> pxr@rsp     # инспекция стека
> drr         # periscoped-значения регистра

Плагины. С помощью интегрированного менеджера пакетов вы можете легко устанавливать внешние плагины из разных источников. Самые интересные это native ghidra decompiler, r2dec decompiler и интеграция frida, но также могут быть и другие.

$ r2pm update
$ r2pm -i r2ghidra r2dec r2frida

Frida. Это популярный отладчик/трассировщик, также доступный внутри r2 после установки плагина r2frida. С его помощью вы можете присоединиться или запустить под отладкой (attach/spawn) локальную или удаленную программу через USB или TCP, и исследовать память процесса путем её чтения и записи.

Одно из основных достоинств использования r2frida вместо frida: несмотря на зависимость от Python по факту вы можете вводить короткие команды место ввода нескольких строк Javascript.

Основные возможности r2frida:

- Доступ к remote файловым системам.
- Модификация дескрипторов файла.
- Точки останова (breakpoints как в DWARF).
- Load/Unload агент-скриптов как плагинов.
- Символизация из локальных бинарников, скриптов или runtime-информации.
- Поддержка macOS/iOS/Linux/Android/QNX/Windows.

$ r2 frida:///bin/ls
> :dc         # продолжить выполнение
> :dd         # список дескрипторов файлов
> :dm         # показать карту памяти процесса
> :dmm        # показать отображенные модули
> :dl foo.so  # загрузить shlib
> :dt write   # трассировка каждого вызова 'write'
> :isa read   # найти, где находится символ read
> :ii         # список импортов из текущего модуля
> :dxc exit 0 # вызов символа 'exit' с аргументом 0

[Документация]

Присоединяйтесь к каналам Telegram / IRC [3] и не стесняйтесь задавать вопросы, читайте документацию [4]. Но также имейте в виду, что в r2 есть встроенная документация (просто добавьте символ '?') или см. man-документацию и результат вывода r2 -h.

Usage: r2 [-ACdfjLMnNqStuvwzX] [-P patch] [-p prj] [-a arch] [-b bits] [-c cmd]
          [-s addr] [-B baddr] [-m maddr] [-i script] [-e k=v] file|pid|-|--|=

 --                запустить radare2 без открытия какого-либо файла
 -                 то же самое, что 'r2 malloc://512'
 =                прочитать файл из stdin (используйте -i и -c для запуска команд)
 -=               выполнить команду !=! для удаленного запуска всех команд
 -0                печать \x00 после init и каждой команды
 -2                закрыть дескриптор файла stderr (подавляет warning-сообщения)
 -a [arch]      установить asm.arch
 -A                запустить команду 'aaa' для анализа всего ссылочного кода
 -b [bits]       установить asm.bits
 -B [baddr]    установить базовый адрес для бинарников PIE
 -c 'cmd..'      выполнить radare-команду
 -C                файл это host:port (алиас для -c+=http://%s/cmd/)
 -d                 отладка исполняемого файла, или запущенного процесса pid
 -D [backend] разрешить debug-режим (e cfg.debug=true)
 -e k=v          вычислить переменную конфигурации
 -f                 block size = file size
 -F [binplug]  принудительно использовать плагин rbin
 -h, -hh         показать сообщение подсказки по командам, -hh для расширенной подсказки
 -H ([var])     показать переменную
 -i [file]         запустить файл скрипта
 -I [file]        запустить файл скрипта перед открытием файла
 -j                 использовать json для -v, -L и возможно для других целей
 -k [OS/kern] установить asm.os (linux, macos, w32, netbsd, ...)
 -l [lib]          загрузить файл плагина
 -L, -LL          список поддерживаемых IO плагинов (-LL список core плагинов)
 -m [addr]      отобразить файл по указанному адресу (loadaddr)
 -M                не выполнять восстановление (demangle) оригинальных символов
 -n, -nn          не загружать RBin информацию (-nn загружать только bin структуры)
 -N                 не загружать настройки пользователя и скрипты
 -NN               не загрузить никакие скрипты или плагины
 -q                 quiet-режим (тихий режим, без приглашения ввода команд) и выход после -i
 -qq               выход после выполнения всех -c и -i
 -Q                quiet-режим (без приглашения ввода) и более быстрый выход (quickLeak=true)
 -p [prj]         использовать проект, список если не указаны аргументы, загрузка если нет файла
 -P [file]         применить rapatch файл и выход
 -r [rarun2]     указывает профиль rarun2 для загрузки (то же самое что и -e dbg.profile=X)
 -R [rr2rule]    указывает пользовательскую rarun2 директиву
 -s [addr]        начальный seek
 -S                 запуск r2 в режиме песочницы (sandbox mode)
 -t                  загрузка rabin2 info в поток
 -u                  установка bin.filter=false чтобы получить raw-имена sym/sec/cls
 -v, -V             показать версию radare2 (-V покажет lib-версии)
 -w                 открыть файл в режиме записи
 -x                  открыть без exec-флага (asm.emu не будет работать), см. io.exec
 -X                  то же самое, что и -e bin.usextr=false (полезно для dyldcache)
 -z, -zz            не загружать строки, и не загружать их даже в raw

Вы также можете использовать HUD-режим для интерактивного просмотра всех внутренних команд r2 с помощью команды (выход из этого режима через q+Enter):

$ r2 -Qc'?*~...' --

[Ссылки]

1. radare2 https://rada.re/n/radare2.html.
2. GitHub: radareorg / radare2.
3. https://t.me/radare.
4. The Official Radare2 Book.

 

Добавить комментарий


Защитный код
Обновить

Top of Page