Post on 25-Jan-2017
Radare2 - от A до Z
Radare2 воркшоп (4 часа)
Anton Kochkov (@akochkov), Boris Ryutin (@dukebarman)
18 апреля 2016 г.
SECON 2016
Anton Kochkov
• Москва, Россия
• Хобби - реверс инжиниринг, языки и путешествия
• Участник R2 crew и евангелист radare2
• Security Code Ltd.
1
Boris Ryutin
• Санкт-Петербург, Россия
• Реверсер, blizzard фан
• Участник R0 crew (reverse4you) и евангелист radare2
• Автор журнала “Хакер”
• Digital Security
2
Краткий обзор radare2
Что такое radare2
• radare1 начат в 2006, radare2 в 2009
• Поддерживает много архитектур, OS, файловых форматов, etc
• 10 встроенных утилит
• CLI и Visual (TUI) режимы, GUI (bokken), WebUI
• 149 контрибьюторов со всего мира
• Участие в программе GSoC и проведение своей RSoC
3
Установка
• Правило 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
Утилиты
Утилиты
• rax2
• rabin2
• rasm2
• radiff2
• rafind2
• rahash2
• radare2
• r2pm
• rarun2/ragg2/ragg2-cc
5
Утилиты
• rax2
• rabin2
• rasm2
• radiff2
• rafind2
• rahash2
• radare2
• r2pm
• rarun2/ragg2/ragg2-cc
6
Утилиты: rax2
rax2 — конвертер и калькулятор
$ rax2 10
0xa
$ rax2 33 0x41 0101b
0x21 65 0x5
$ rax2 -s 4142434445
ABCDE
$ rax2 0x5*101b+5
30
7
Утилиты
• rax2
• rabin2
• rasm2
• radiff2
• rafind2
• rahash2
• radare2
• r2pm
• rarun2/ragg2/ragg2-cc
8
Утилиты: rabin2
rabin2 — извлечение информации из бинарных файлов
$ rabin2 -e
Entrypoints
$ rabin2 -i
Shows imports
$ rabin2 -zz
Shows strings
$ rabin2 -g
Show all possible information
9
Утилиты
• rax2
• rabin2
• rasm2
• radiff2
• rafind2
• rahash2
• radare2
• r2pm
• rarun2/ragg2/ragg2-cc
10
Утилиты: rasm2
rasm2 — ассемблер и дизассемблер
$ rasm2 -a x86 -b 32 ’mov eax, 33’
ассемблирование
$ rasm2 -d 9090
дизассемблирование
$ rasm2 -L
вывести список загруженных плагинов
$ rasm2 -a x86 -b 32 ’mov eax, 33’ -C
Вывести в формате C-массива
11
Утилиты
• rax2
• rabin2
• rasm2
• radiff2
• rafind2
• rahash2
• radare2
• r2pm
• rarun2/ragg2/ragg2-cc
12
Утилиты: radiff2
radiff2 — утилита для бинарного сравнения
$ radiff2 original patched
Сравнение кода
$ radiff2 -C original patched
Сравнение с использованием graphdiff алгоритма
$ radiff2 -g main -a x86 -b32 original patched
Сравнение с генерацией графа функции
13
Утилиты: radiff2 — пример с генерацией графа
/bin/true /bin/false
14
Утилиты
• rax2
• rabin2
• rasm2
• radiff2
• rafind2
• rahash2
• radare2
• r2pm
• rarun2/ragg2/ragg2-cc
15
Утилиты: rafind2
rafind2 — утилита поиска и редктирования бинарной информации
$ rafind2 -X -s passwd dump.bin
Поиск строки “passwd”
16
Утилиты
• rax2
• rabin2
• rasm2
• radiff2
• rafind2
• rahash2
• radare2
• r2pm
• rarun2/ragg2/ragg2-cc
17
Утилиты: 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
Утилиты
• rax2
• rabin2
• rasm2
• radiff2
• rafind2
• rahash2
• radare2
• r2pm
• rarun2/ragg2/ragg2-cc
19
Командная строка
1 команда <—>1 назначение
Для запоминания команд важно помнить:
1. Каждый символ в команде имеет своё значение (w = write, p =print)
2. Большинство команд представляют собой аббревиатуры pdf = p<->print d <->disassemble f <->function
3. Каждая команда имеет короткую помощь: cmd?, напримерpdf?,?, ???, ???, ?$?, ?@?
20
Команда # - хэш и скрипты
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
Флаги
• Флаги используются для соответствия offset - имя флага: f?.
• Добавить функцию af+ (требует afb+)
• f. name @ offset добавить “локальный” флаг
• R2 работает с данными по-блочно. Изменить размер блокаможно командой ‘b’.
22
Команда ’i’ — общая информация
1. Получить короткую справку по команде i?
2. Аналог rabin2
3. izj для показа строк в секциях данных в виде JSON
4. Дополнительные команды: ,̃ ls, {}, @, . . .
23
Radare2 — использование команды pf
Небольшое демо
24
Radare2 - работа с типами командами t*
Небольшое демо
25
Radare2 — основные команды CLI режима
1. r2 -A или r2 затем aaa : анализ
2. s : перейти по адресу/смещению
3. pdf : вывести дизасм функции
4. af? : анализировать функцию
5. ax? : анализировать XREF
6. /? : поиск
7. ps? : вывод строк
8. C? : работа с комментариями
9. w? : запись данных
26
Radare2 — визуальный режим
Главные команды
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
ASCII граф
28
Radare2 - разбор простого x86 malware
Небольшое демо
29
Radare2 - разбор простого ARM malware
Небольшое демо
30
Radare2 — Отладка
Radare2 — Отладка
1. radare2 -d
2. переключиться в визуальный режим отладки: Vpp
3. горячие клавиши похожи на OllyDBG/IDApro
31
Утилиты
• rax2
• rabin2
• rasm2
• radiff2
• rafind2
• rahash2
• radare2
• r2pm
• rarun2/ragg2/ragg2-cc
32
R2PM
R2PM — radare2 package manager
1. r2pm -s (вывести список доступных плагинов)
2. r2pm -i retdec
33
Виды отладки
• Локальная (нативная) отладка (r2 -d)
• Удаленная с помощью r2 agent (протокол rap://)
• Удаленная отладка по протоколу GDB
• Удаленная отладка по протоколу WinDBG
34
Режим “телескопирования”
• r2 можетпоказыватьссылки врегистрах илистеке
• очень удобнодлядинамическойотладки
• разрешаетсимволы,флаги, строки,etc.
• drr (регистры)pxr N @ esp/rsp(стек)
35
Команды отладчика
• d? - справка по командам
• db addr/flag - установка breakpoint
• dc[u] debug, continue [until]
• visual mode "?"c для курсора, b для breakpoints
• Останавливается на entry, не мэйн, "dcu entry0"перед стартоманализа.
36
Отладочные “профили”
• r2 -de dbg.profile=file.rr2 exec.elf
• или r2 -R file.rr2 exec.elf
• установать среду выполнения, переназначение stdin/out
• удобны для быстрой репродукции среды выполнения
37
Протокол GDB
Запустить gdbserver где-нибудь
И подсоединить r2 к нему:
• r2 -D gdb gdb://99.44.23.50:4589
38
Протокол GDB в Wine
Winedbg позволяет запускать Windows программы
Режим отладки при этом включает встроенный gdbserver:
• winedbg –gdb –no-start malware.exe
• r2 -a x86 -b 32 -D gdb gdb://localhost:44840
39
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
Скриптование
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
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
Документация
• Website: http://rada.re/
• Blog: http://radare.today
• Book: http://radare.gitbooks.io/radare2book/content
• Cheatsheet: https://github.com/pwntester/cheatsheets/blob/master/radare2.md
43
References
Список литературы I
Список литературы
R2pipe API (2014).Radare2 types command (2014).
44