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

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
  • 4.
  • 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
  • 7.
  • 8.
    Утилиты • rax2 • rabin2 •rasm2 • radiff2 • rafind2 • rahash2 • radare2 • r2pm • rarun2/ragg2/ragg2-cc 5
  • 9.
    Утилиты • rax2 • rabin2 •rasm2 • radiff2 • rafind2 • rahash2 • radare2 • r2pm • rarun2/ragg2/ragg2-cc 6
  • 10.
    Утилиты: rax2 rax2 —конвертер и калькулятор $ rax2 10 0xa $ rax2 33 0x41 0101b 0x21 65 0x5 $ rax2 -s 4142434445 ABCDE $ rax2 0x5*101b+5 30 7
  • 11.
    Утилиты • rax2 • rabin2 •rasm2 • radiff2 • rafind2 • rahash2 • radare2 • r2pm • rarun2/ragg2/ragg2-cc 8
  • 12.
    Утилиты: rabin2 rabin2 —извлечение информации из бинарных файлов $ rabin2 -e Entrypoints $ rabin2 -i Shows imports $ rabin2 -zz Shows strings $ rabin2 -g Show all possible information 9
  • 13.
    Утилиты • rax2 • rabin2 •rasm2 • radiff2 • rafind2 • rahash2 • radare2 • r2pm • rarun2/ragg2/ragg2-cc 10
  • 14.
    Утилиты: 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
  • 15.
    Утилиты • rax2 • rabin2 •rasm2 • radiff2 • rafind2 • rahash2 • radare2 • r2pm • rarun2/ragg2/ragg2-cc 12
  • 16.
    Утилиты: radiff2 radiff2 —утилита для бинарного сравнения $ radiff2 original patched Сравнение кода $ radiff2 -C original patched Сравнение с использованием graphdiff алгоритма $ radiff2 -g main -a x86 -b32 original patched Сравнение с генерацией графа функции 13
  • 17.
    Утилиты: radiff2 —пример с генерацией графа /bin/true /bin/false 14
  • 18.
    Утилиты • rax2 • rabin2 •rasm2 • radiff2 • rafind2 • rahash2 • radare2 • r2pm • rarun2/ragg2/ragg2-cc 15
  • 19.
    Утилиты: rafind2 rafind2 —утилита поиска и редктирования бинарной информации $ rafind2 -X -s passwd dump.bin Поиск строки “passwd” 16
  • 20.
    Утилиты • rax2 • rabin2 •rasm2 • radiff2 • rafind2 • rahash2 • radare2 • r2pm • rarun2/ragg2/ragg2-cc 17
  • 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
  • 22.
    Утилиты • rax2 • rabin2 •rasm2 • radiff2 • rafind2 • rahash2 • radare2 • r2pm • rarun2/ragg2/ragg2-cc 19
  • 23.
  • 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
  • 28.
    Radare2 — использованиекоманды pf Небольшое демо 24
  • 29.
    Radare2 - работас типами командами t* Небольшое демо 25
  • 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
  • 31.
  • 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
  • 33.
  • 34.
    Radare2 - разборпростого x86 malware Небольшое демо 29
  • 35.
    Radare2 - разборпростого ARM malware Небольшое демо 30
  • 36.
  • 37.
    Radare2 — Отладка 1.radare2 -d 2. переключиться в визуальный режим отладки: Vpp 3. горячие клавиши похожи на OllyDBG/IDApro 31
  • 38.
    Утилиты • rax2 • rabin2 •rasm2 • radiff2 • rafind2 • rahash2 • radare2 • r2pm • rarun2/ragg2/ragg2-cc 32
  • 39.
    R2PM R2PM — radare2package manager 1. r2pm -s (вывести список доступных плагинов) 2. r2pm -i retdec 33
  • 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
  • 44.
    Протокол GDB Запустить gdbserverгде-нибудь И подсоединить r2 к нему: • r2 -D gdb gdb://99.44.23.50:4589 38
  • 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
  • 47.
  • 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. Weneed 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
  • 50.
    Документация • 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
  • 51.
  • 52.
    Список литературы I Списоклитературы R2pipe API (2014). Radare2 types command (2014). 44