В ходе мастер-класса мы продемонстрируем основы владения фреймворком radare2, а так же разберем с помощью него несколько практических примеров. В частности проанализируем простую вредоносную программу и ПО для ARM-устройств (Android / iOS)
SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z
1. Radare2 - от A до Z
Radare2 воркшоп (4 часа)
Anton Kochkov (@akochkov), Boris Ryutin (@dukebarman)
18 апреля 2016 г.
SECON 2016
2. Anton Kochkov
• Москва, Россия
• Хобби - реверс инжиниринг, языки и путешествия
• Участник R2 crew и евангелист radare2
• Security Code Ltd.
1
3. Boris Ryutin
• Санкт-Петербург, Россия
• Реверсер, blizzard фан
• Участник R0 crew (reverse4you) и евангелист radare2
• Автор журнала “Хакер”
• Digital Security
2
5. Что такое radare2
• radare1 начат в 2006, radare2 в 2009
• Поддерживает много архитектур, OS, файловых форматов, etc
• 10 встроенных утилит
• CLI и Visual (TUI) режимы, GUI (bokken), WebUI
• 149 контрибьюторов со всего мира
• Участие в программе GSoC и проведение своей RSoC
3
6. Установка
• Правило 1: Всегда использовать версию из git!1
• Или использовать виртуальную машину (radare:radare /
root:radare)
• git clone http://github.com/radare/radare2 && cd radare2
&& ./sys/install.sh
• Для Windows лучше всего работает с Msys2 или ConEmu
1До выхода версии 1.0
4
16. Утилиты: radiff2
radiff2 — утилита для бинарного сравнения
$ radiff2 original patched
Сравнение кода
$ radiff2 -C original patched
Сравнение с использованием graphdiff алгоритма
$ radiff2 -g main -a x86 -b32 original patched
Сравнение с генерацией графа функции
13
21. Утилиты: rahash2
rahash2 — утилита поблочного хэширования и шифрования
$ rahash2 -a all binary.exe
Отобразить хэши файла во всех алгоритмах
$ rahash2 -B -b 512 -a md5
Вычислить md5 для блоков в 512 байт
$ rahash2 -B -b 512 -a entropy
Вычислить энтропию для блоков в 512 байт
$ echo -n "admin" | rahash2 -a md5 -s "
Вычислить md5 для строки “admin”
18
24. 1 команда <—>1 назначение
Для запоминания команд важно помнить:
1. Каждый символ в команде имеет своё значение (w = write, p =
print)
2. Большинство команд представляют собой аббревиатуры pdf = p
<->print d <->disassemble f <->function
3. Каждая команда имеет короткую помощь: cmd?, например
pdf?,?, ???, ???, ?$?, ?@?
20
25. Команда # - хэш и скрипты
1. Откроем файл в radare2 radare2 file.exe
2. Распечатать короткую помощь: #? Usage: #algo <size>@ addr
3. Вывести список поддерживаемых алгоритмов ##
4. Расчет SHA1 #sha1
5. Расчет SHA1 с начала #sha1 @ 0
6. Расчет с размером блока равным размеру файла #sha1 $s @ 0x0
Аналог вызова rahash2 -a sha1 file.exe
21
26. Флаги
• Флаги используются для соответствия offset - имя флага: f?.
• Добавить функцию af+ (требует afb+)
• f. name @ offset добавить “локальный” флаг
• R2 работает с данными по-блочно. Изменить размер блока
можно командой ‘b’.
22
27. Команда ’i’ — общая информация
1. Получить короткую справку по команде i?
2. Аналог rabin2
3. izj для показа строк в секциях данных в виде JSON
4. Дополнительные команды: ˜, ls, {}, @, . . .
23
30. Radare2 — основные команды CLI режима
1. r2 -A или r2 затем aaa : анализ
2. s : перейти по адресу/смещению
3. pdf : вывести дизасм функции
4. af? : анализировать функцию
5. ax? : анализировать XREF
6. /? : поиск
7. ps? : вывод строк
8. C? : работа с комментариями
9. w? : запись данных
26
32. Главные команды
1. V? : помощь по визуальному режиму
2. p/P : переключение между режимами
3. перемещение стрелками/hjkl
4. o : перейти по смещению
5. e : r2configurator
6. v : список функций
7. _ : HUD
8. V : ASCII граф
9. 0-9 : перейти по ссылке (функции)
10. u : вернуться назад (seek undo)
27
40. Виды отладки
• Локальная (нативная) отладка (r2 -d)
• Удаленная с помощью r2 agent (протокол rap://)
• Удаленная отладка по протоколу GDB
• Удаленная отладка по протоколу WinDBG
34
41. Режим “телескопирования”
• r2 может
показывать
ссылки в
регистрах или
стеке
• очень удобно
для
динамической
отладки
• разрешает
символы,
флаги, строки,
etc.
• drr (регистры)
pxr N @ esp/rsp
(стек) 35
42. Команды отладчика
• d? - справка по командам
• db addr/flag - установка breakpoint
• dc[u] debug, continue [until]
• visual mode "?"c для курсора, b для breakpoints
• Останавливается на entry, не мэйн, "dcu entry0"перед стартом
анализа.
36
43. Отладочные “профили”
• r2 -de dbg.profile=file.rr2 exec.elf
• или r2 -R file.rr2 exec.elf
• установать среду выполнения, переназначение stdin/out
• удобны для быстрой репродукции среды выполнения
37
45. Протокол GDB в Wine
Winedbg позволяет запускать Windows программы
Режим отладки при этом включает встроенный gdbserver:
• winedbg –gdb –no-start malware.exe
• r2 -a x86 -b 32 -D gdb gdb://localhost:44840
39
46. WinDBG
r2 может подсоединяться к WinDBG/KD2
Например, для отладки ядра Windows через последовательный порт
(VM):
• bcdedit /debug on
• bcdedit /dbgsettings serial debugport:1 baudrate:115200
И подсоединимся с помощью r2:
• r2 -a x86 -b 32 -D wind windbg:///tmp/windbg.pipe
На данный момент проверена работа с QEMU и VirtualBox
2r2windbg.
40
48. The t command — types management
1. Get Usage on the command t?3
2. to to load the types from the C header file
3. tl link type to the memory, tf shows it like the pf
4. add j to get the output in the json format
3Radare2 types command (2014).
41
49. Searching GUIDs
1. We need r2pipe (python) for that #?4
2. . command to load the pipe script
3. >. search_guids.py
4. this script using the EFI guids list from the snarez’s repo5
4R2pipe API (2014).
5ida-efiutils.
42