Многие из нас грезят об утечке в публичный доступ новой версии IDA, так как 6.1 уже немного устарела. Но некоторые не стали сидеть на месте и начали разрабатывать свой инструмент, помогающий в повседневной работе.

 

Intro

Небольшой экскурс в историю. Проект radare начал разрабатывать хакер с ником pancake в 2006 году, и долгое время, по сути, он был единственным разработчиком. Созданный фреймворк обладал простым консольным интерфейсом для работы как шестнадцатеричный редактор, поддерживающий 64-битную архитектуру. Это позволяло находить и восстанавливать данные с жестких дисков. Поэтому его еще называли инструментом для компьютерной криминалистической экспертизы. Но в 2010 год произошел «редизайн» фреймворка, после чего проект стал разрастаться и пополняться новым функционалом, позволяющим использовать его не только как редактор, но и как дизассемблер, анализатор и кода, и шелл-кодов. На данный момент этот фреймворк используют знаменитые CTF-команды (Dragon Sector) и вирусные аналитики (MalwareMustDie и AlienVault), причем последние представляют его на своем воркшопе на Black Hat. Достаточно большой список тех, кто использует radare2, с примерами представлен в блоге проекта.

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

Начнем с поддержки большого количества архитектур — есть даже для Gameboy, видео по анализу популярной игры Pokemon для которого опубликовал на канале YouTube один из исследователей, правда, на немецком языке.

Одна из особенностей — поддержка многих скриптовых языков. Помимо популярных Python с Perl, которые поддерживаются в других дизассемблерах, есть также Vala, Go, Guile, Ruby, Lua (о его плюсах и минусах я писал ранее), Java, JavaScript (Node.js и ducktape), sh и многие другие.

Также многим пригодится поддержка типов, особенно при анализе C++ программ. Достаточно создать *.h-файл с описанием и подключить его. Ниже я привел пример от автора фреймворка. Содержимое файла с описанием структуры:

[0x00000000]> cat test.h
#define uint32_t unsigned int
typedef struct addr {  
char street[127];
char city[40];
uint32_t zip;
addr_t;

Подключаем файл и помечаем область со структурой:

[0x00000000]> to test.h
[0x00000000]> tl addr 0x4000
[0x00000000]> tf 0x4000
struct addr {  
street : 0x00004000 = "Wallaby Way"  
city : 0x00004000 = "Sydney"
zip : 0x00004008 = 2000
}

Существует поддержка отладки. Причем ты можешь проводить как прямую отладку, так и работу с протоколами gdb, winedbg.

Благодаря тому что фреймворком заинтересовались вирусные аналитики, появилась поддержка утилиты yara, о которой мы писали ранее. Помимо поддержки самой утилиты, было встроено много правил. Некоторые из них, например, позволяют определить большое количество упаковщиков. Ниже я привел такой пример для одного из сэмплов вредоносной программы:

[0x0040324d]> yara scan
dUP_v2_x_Patcher
Nullsoft_PiMP_Stub
 

Установка

Так как radare2 не является версией 1.0 (на момент написания статьи она была 0.9.8), разработчики советуют использовать свой фреймворк: скачать и собрать его из исходников с GitHub (заодно вспомним, как работать с Git):

$ git clone https://github.com/radare/radare2.git

Если же у тебя исходники были уже скачаны, то нужно их обновить следующей командой:

$ git pull

Для автоматической компиляции можешь воспользоваться встроенным скриптом:

$ sys/install.sh

Если же он выдал ошибку, то попробуй сделать вручную:

$ ./configure --prefix=/usr
$ gmake
$ sudo gmake install

Или вместо gmake используй утилиту make. Например, для OS X мне так и пришлось сделать. А после перезагрузки я увидел долгожданное окно (рис. 1):

Рис. 1. Запуск radare2
Рис. 1. Запуск radare2

 

Также ты можешь поставить radare2 из macports или использовать утилиту homebrew, но там версии периодически отстают. По этой же причине, если ты используешь Kali Linux, советую удалить встроенный radare2 через утилиту apt-get и поставить фреймворк из исходников, как я описал выше.

Для Windows бинарный файл можно скомпилировать с помощью какой-либо *nix-платформы или воспользоваться mingw-компилятором.

Android-версия доступна в Google play, причем права root не требуются. Так как с помощью фреймворка можно анализировать и Java-файлы — об этом есть неплохая статья с примерами, то легко добавили поддержку APK-файлов. Ниже я покажу, как выглядят интерфейс программы (рис. 2) и дизассемблированный код.

Рис. 2. Обновление radare2 на телефоне Android
Рис. 2. Обновление radare2 на телефоне Android

 

В отличие от Android, на iOS-устройствах придется вначале сделать jailbreak, только после этого появится возможность установить фреймворк. Для этого нужно добавить репозиторий cydia.radare.org в Cydia.

Хотя в некоторых случаях можно обойтись и без компиляции. Благодаря сервису СI есть возможность скачивать уже скомпилированные файлы под различные платформы, в том числе и для Windows. Например, именно поэтому Android-версия идет рука об руку с основной.

Теперь немного остановимся на доработке функционала. Чтобы отменить свои модификации исходников, вернемся к нормальной версии:

$ git reset --hard HEAD

Если же твои доработки, наоборот, исправили какую-то проблему, то помимо обычного commit можно сделать патч и отправить его разработчику:

$ git diff > radare-foo.patch

Теперь рассмотрим саму работу с фреймворком.

 

Обзор утилит

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

Rasm2 — ассемблер/дизассемблер фреймворка, выполнен как отдельное приложение и позволяет дизассемблировать как бинарные, так и отдельные строки.

root@kali:~/# rasm2 -a x86 nop
90
root@kali:~/# rasm2 -a x86 -d 'eb00'
jmp 0x2

Обычным переводом опкодов туда и обратно, правда, мало кого удивишь, пусть и с поддержкой большого количества архитектур (рис. 3). Зато описание всех опкодов не всегда есть под рукой:

root@kali:~/# rasm2 -w cmpsb
cmp DS:[SI], ES:[edi] (esi++, edi++)
root@kali:~/# rasm2 -w sqrtpd
compute square roots of packed double-fp values
Рис. 3. Большая часть списка поддерживаемых по умолчанию архитектур в утилите rasm2
Рис. 3. Большая часть списка поддерживаемых по умолчанию архитектур в утилите rasm2

 

Также эта утилита может помочь при быстром анализе найденных шелл-кодов. Пример небольшого шелл-кода, который запускает /bin/sh, представлен ниже:

root@kali:~/# rasm2 -d eb165e31d2525689e189f331c0b00bcd8031db31c040cd80e8e5ffffff2f62696e2f7368

jmp 0x18
pop esi
xor edx, edx
push edx
push esi
mov ecx, esp
mov ebx, esi
xor eax, eax
mov al, 0xb
int 0x80
xor ebx, ebx
xor eax, eax
inc eax
int 0x80
call 0x2
das
bound ebp, [ecx+0x6e]
das
jae 0x8c

Rabin2 — утилита для работы с различными исполняемыми файлами (ELF, PE, Java class, Mach-O). Используется для получения различной информации о файле: импортируемые функции, экспортируемые символы, секции, подключаемые библиотеки и прочее. Рассмотрим самые популярные действия.

Получаем информацию о формате и включенных системах защиты.

root@kali:~/# rabin2 -I 9f2520a3056543d49bb0f822d85ce5dd
file    9f2520a3056543d49bb0f822d85ce5dd
type    DLL (Dynamic Link Library)
pic    false
canary    false
nx    false
crypto    false
has_va    true
root    pe
class    PE32
lang    unknown
arch    x86
bits    32
machine    i386
os    windows
subsys    Windows GUI
endian    big
strip    false
static    false
linenum    true
lsyms    true
relocs    true
rpath    NONE
  1. Получаем список импортируемых функций и из каких библиотек они вызываются:
root@kali:~/# rabin2 -i 9f2520a3056543d49bb0f822d85ce5dd
...
ordinal=001 plt=0x00000000 bind=NONE type=FUNC name=WS2_32.DLL_WSAIoctl
ordinal=001 plt=0x00000000 bind=NONE type=FUNC name=SHFolder.dll_SHGetFolderPathA
ordinal=001 plt=0x00000000 bind=NONE type=FUNC name=ntdll_NtUnmapViewOfSection
ordinal=001 plt=0x00000000 bind=NONE type=FUNC name=user32.dll_EnumDisplayMonitors
ordinal=002 plt=0x00000000 bind=NONE type=FUNC name=user32.dll_GetMonitorInfoA
ordinal=001 plt=0x00000000 bind=NONE type=FUNC name=SHELL32.DLL_SHEmptyRecycleBinA
ordinal=001 plt=0x00000000 bind=NONE type=FUNC name=AVICAP32.DLL_capGetDriverDescriptionA
600 imports
  1. Ищем строки и где они находятся. Кто-то скажет, что ему хватает утилиты strings, но данный вариант более умный и показывает дополнительную информацию, которая нужна при анализе:
root@kali:~/# rabin2 -z 9f2520a3056543d49bb0f822d85ce5dd
...
ordinal=001 plt=0x00000000 bind=NONE type=FUNC name=WS2_32.DLL_WSAIoctl
ordinal=001 plt=0x00000000 bind=NONE type=FUNC name=SHFolder.dll_SHGetFolderPathA
ordinal=001 plt=0x00000000 bind=NONE type=FUNC name=ntdll_NtUnmapViewOfSection
ordinal=001 plt=0x00000000 bind=NONE type=FUNC name=user32.dll_EnumDisplayMonitors
ordinal=002 plt=0x00000000 bind=NONE type=FUNC name=user32.dll_GetMonitorInfoA
ordinal=001 plt=0x00000000 bind=NONE type=FUNC name=SHELL32.DLL_SHEmptyRecycleBinA
ordinal=001 plt=0x00000000 bind=NONE type=FUNC name=AVICAP32.DLL_capGetDriverDescriptionA
600 imports

Можно указать эти параметры вместе и получить сразу нужную информацию в один поток. А в блоге проекта представлена статья, как вытаскивать исполняемые файлы из бинарного файла.

Rahash2 — утилита для получения хеш-значений во многих форматах как от бинарных файлов, так и от определенных частей данных. Пример получения хешей для одной из RAT-малвари представлен на скриншоте (рис. 4).

Рис. 4. Подсчитанные хеши для вредоносной программы DarkComet
Рис. 4. Подсчитанные хеши для вредоносной программы DarkComet

 

Radiff2 — утилита для сравнения бинарных файлов. Для более успешной работы советую доустановить программу xdot, если у тебя ее еще нет:

root@kali:~/# apt-get install xdot

Работает как через xdot, так и в консольном (ASCII) режиме. Пример ее работы я покажу в разделе по решению crackme.

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

Ragg2 — экспериментальная утилита для компиляции небольших программ (шелл-кодов ;)) для x86/x64- и ARM-архитектур.

Rax2 — утилита для конвертации данных в различных форматах. Преобразуем hex-данные в строку:

root@kali:~/# rax2 -s 43 4a 50
CJP

Rarun2 (rr2) — позволяет запускать программу с различными параметрами среды, аргументами, правами и директориями. Это пригодится не только для решения различных crackme или CTF-задач, но и при фаззинге или тестах.

Теперь перейдем к самому radare2 и рассмотрим основные команды для работы с ним на примере небольшого crackme.

 

Разбираем crackme

В качестве примера я взял простой crackme от пользователя Lord из архива сайта crackmes.de, а работать будем в 32-битном Kali Linux. Запустим загруженный файл:

root@kali:~/crackmes# ./cm1eng
Password : dukebarman
root@kali:~/crackmes# 

Значит, нам требуется найти правильный пароль. Причем неверный вариант никак не помечается, программа просто завершается. Ну что же, для начала рассмотрим сам файл:

root@kali:~/crackmes# rabin2 -I cm1eng
...
root    elf
class    ELF32
lang    c
arch    x86
bits    32
machine    Intel 80386
os    linux
subsys    linux
endian    little
strip    true
...

Как видим, опция strip присутствует. Несмотря на то что crackme записан для новичков, автор решил уж совсем задачу не облегчать и удалил «лишнюю» информацию из файла. Поэтому теперь загрузим программу в radare2 и увидим одну из встречающихся случайных фраз:

root@kali:~/crackmes# r2 ./cm1eng
 -- Nothing to see here. Move along.
[0x08048080]> 

После запуска нам нужно проанализировать файл с помощью команды, начинающейся с a. Кстати, чтобы увидеть возможные команды, достаточно добавить знак вопроса к изменяющемуся символу, в нашем случае это будет a?:

[0x08048080]> a?
|Usage: a
| a8 [hexpairs]     analyze bytes
| aa                analyze all (fcns + bbs)
...

Вернемся к анализу. В фреймворке возможно проанализировать как весь файл, так и отдельные блоки, строки и так далее. Проанализируем весь файл и, раз требуется ввести пароль, попробуем его найти — возможно, его оставили вшитым в программу. Все-таки этот crackme считается начального уровня:

[0x08048080]> aa
[0x08048080]> iz
addr=0x100910f8 off=0x000000f8 ordinal=000 sz=13 len=12 section=.data type=a string=\nPassword : 
addr=0x10091105 off=0x00000105 ordinal=001 sz=33 len=32 section=.data type=a string=Great you did it !:)\n\n         
addr=0x10091126 off=0x00000126 ordinal=002 sz=8 len=7 section=.data type=a string=QTBXCTU
[0x08048080]> 

Ты уже знаком с командой iz, поэтому уточню небольшой нюанс о работе со строками в фреймворке. Все строки автоматически преобразуются в переменную со схожим именем:

Great you did it !:)\n\n -> str.Great_you_did_it_____n_n


К таким переменным можно обращаться: @str.Great_you_did_it_____n_n. Также работает автодополнение через клавишу Tab, что очень удобно при их большом количестве. Помимо этого, есть возможность поиска как строк, так и различных байтов через команду /. Пример поиска строки:

[0x08048080]> / Password
Searching 8 bytes from 0x08048000 to 0x0804a0f8: 50 61 73 73 77 6f 72 64
hits: 2
0x080480f9 hit3_0 "Password"
0x080490f9 hit3_1 "Password"
[0x08048080]> px 10 @0x080480f9
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x080480f9  5061 7373 776f 7264 203a                 Password :      

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

root@kali:~/crackmes# ./cm1eng
Password : QTBXCTU
root@kali:~/crackmes# 

Увы, но это не пароль, хотя, возможно, все-таки нам пригодится. А пока, раз у нас есть строка, которая теоретически выводится при удачном решении, попробуем решить crackme «нечестным» образом — пропатчим файл. Создадим копию файла (заодно она нам пригодится для обещанного примера) и загрузим ее в фреймворк, но через дополнительную команду, которая откроет файл в режиме записи:

root@kali:~/crackmes# r2 -w ./cm1eng_crack 
-- Nothing to see here. Move along.
[0x08048080]> aa
[0x08048080]> pdf

Помимо команды проанализировать файл, добавилась новая — pd? Она позволяет вывести на экран дизассемблированные строки. В нашем случае — всей функции, а так как файл небольшой, она и является главной. Вывод осуществляется до конца функции. Так как мы запускаем с десктопа, то и прокрутить вывод в терминале не составит труда, но можно вывести только первые N строчек с текущего адреса. Поэтому найдем строчку с позитивным сообщением в этой функции. Если же так не получается, то воспользуемся еще одной особенностью фреймворка.

Помимо различного встроенного функционала, в radare2 есть поддержка запуска системных утилит, в частности grep:

[0x08048080]> pdf | grep str.Great
|     |     0x080480e3    b905910408   mov ecx, str.Great_you_did_it_____n_n ;  0x08049105   

Вот мы и получили сразу нужный адрес, в который передается наша строка. Так как проверка пароля должна быть до обращения к ней, то выведем строки до нее. Для начала возьмем десять:

[0x08048080]> pd -10 @0x080480e3
|          0x080480c2    02e2         add ah, dl
|          0x080480c4    f1           int1
|          ; JMP XREF from 0x080480c1 (section..text)
|          0x080480c5    be1b910408   mov esi, 0x804911b ;  0x0804911b 
|          0x080480ca    bf26910408   mov edi, str.QTBXCTU ;  0x08049126 
|          0x080480cf    b907000000   mov ecx, 0x7 ;  0x00000007 
|          0x080480d4    fc           cld
|          0x080480d5    f3a6         repe cmpsb
|      ,=< 0x080480d7    7516         jne 0x80480ef ; (section..text)
|      |   0x080480d9    b804000000   mov eax, 0x4 ;  0x00000004
|      |   0x080480de    bb01000000   mov ebx, 0x1 ;  0x00000001
[0x08048080]> 

Вот мы и нашли проверку и переход не к нужной нам функции по адресу 0x080480d7. Более наглядно часть кода представлена на скриншоте, где я проскроллил до нужного нам места (рис. 5).

Рис. 5. Функция, которая проверяет введенный код в crackme
Рис. 5. Функция, которая проверяет введенный код в crackme

 

Описание операнда сравнения я приводил выше. Как видишь, какая-то строка (а какая, кроме введенной, в принципе, еще может быть?) сравнивается с найденной нами ранее, но оставим это пока что. Наша задача теперь — пропатчить эту команду перехода.

Перейдем к ней и проверим, правильный ли адрес указали:

[0x08048080]> s 0x080480d7
[0x080480d7]> pd 7
|      ,=< 0x080480d7    7516         jne 0x80480ef ; (section..text)
|      |   0x080480d9    b804000000   mov eax, 0x4 ;  0x00000004 
|      |   0x080480de    bb01000000   mov ebx, 0x1 ;  0x00000001 
|      |   0x080480e3    b905910408   mov ecx, str.Great_you_did_it_____n_n ;  0x08049105 
|      |   0x080480e8    ba16000000   mov edx, 0x16 ;  0x00000016 
|      |   0x080480ed    cd80         int 0x80
|      |      syscall[0x80][0]=? ; section_end..shstrtab+91
|      |   ; JMP XREF from 0x080480d7 (section..text)
|      `-> 0x080480ef    b801000000   mov eax, 0x1 ;  0x00000001 
[0x080480d7]> 

А вот запатчить можно разными способами. Примеры операндов в шестнадцатеричном представлении:

[0x080480d7]> !rasm2 -a x86 -d '7516'
jne 0x18
[0x080480d7]> !rasm2 -a x86 -d '7416'
je 0x18
[0x080480d7]> !rasm2 -a x86 -d 'eb00'
jmp 0x2
[0x080480d7]> !rasm2 -a x86 -d '9090'
no
nop
  • Наша непосредственная команда.
  • Старый добрый патчинг: видим n — удаляем, не видим — добавляем.
  • Прыжок на «следующий» адрес.
  • Ну и просто забить пропускающимися байтами.

Возьмем третий вариант и выйдем для проверки:

[0x080480d7]> wx eb00
[0x080480d7]> q 

Результат ты можешь увидеть на скриншоте (рис. 6). Теперь любой введенный код будет считаться правильным :). А утилиту rasm2 в этом случае можно использовать для проверки правильности ввода. Командой w? вида wx ты патчишь в виде шестнадцатеричных чисел, но при желании можно вводить и обычными командами:

wa jmp 0x80480d9 
Рис. 6. Удачный патчинг crackme
Рис. 6. Удачный патчинг crackme

 

С помощью «грязного» трюка мы решили этот crackme, но хотелось бы разобраться с настоящим паролем. Вспомним, что неизвестная строка все-таки проверяется перед выводом победного сообщения. При анализе находим небольшой цикл, который берет семь символов и XOR’ит их с ключом 0x21 (рис. 7).

Рис. 7. Найденная строка с нужным ключом
Рис. 7. Найденная строка с нужным ключом

 

Попробуем провести обратную операцию с найденной строкой. Найдем ее представление в коде:

[0x08048080]> px 16 @str.QTBXCTU 
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x08049126  5154 4258 4354 5500 0054 6865 204e 6574  QTBXCTU..The Net

Мне было быстрее найденные hex-значения загрузить в 010-Editor и расшифровать, но radare2 поддерживает различные арифметические операции, и при желании можно сделать XOR для каждого символа:

[0x08048080]> ? 51h^21h
112 0x70 0160 112.0 0000:0070 112 "p" 01110000 112.0 0.000000

Или написать небольшой плагин :). Но в итоге все равно получаем строку pucybut. Это и есть наш пароль.

На будущее можно сразу искать необычные XOR-команды.

[0x08048080]> pdf | grep xor
|           0x080480b3    31db         xor ebx, ebx
|      |    0x080480b7    3421         xor al, 0x21
| ||||      0x08048149    2e3338       xor edi, [cs:eax]
[0x08048080]> 

Такую выборку еще используют для нахождения различных call-команд. Но теперь покажу обещанный пример использования утилиты radiff2. У нас имеются два файла с одной отличной функцией. Я предпочитаю смотреть сразу на два файла, то есть на одном отличия первого, на другом — второго.

root@kali:~/crackmes# radiff2 -g main cm1eng_crack cm1eng > /tmp/cm1
root@kali:~/crackmes# radiff2 -g main cm1eng cm1eng_crack > /tmp/cm2  
root@kali:~/crackmes# xdot /tmp/cm1 & xdot /tmp/cm2
Рис. 8. Сравниваем оригинальный и пропатченный файлы
Рис. 8. Сравниваем оригинальный и пропатченный файлы

 

Кстати, в таком формате можно и просто смотреть файл. Достаточно его сравнить с самим собой:

root@kali:~/crackmes# radiff2 -g main cm1eng cm1eng > /tmp/cm & xdot /tmp/cm

Раз мы коснулись визуализации, то рассмотрим существующие возможности.

Для сравнения я открыл этот же crackme на своем Android-устройстве.

Рис. 11. Анализ crackme на телефоне Android при портретном режиме экрана
Рис. 11. Анализ crackme на телефоне Android при портретном режиме экрана

 

Рис. 12. Анализ crackme на телефоне Android при альбомном режиме экрана
Рис. 12. Анализ crackme на телефоне Android при альбомном режиме экрана

 

Как видишь, вполне читабельно и удобно. Для этого примера я запустил фреймворк через консоль, но можно воспользоваться веб-интерфейсом, который работает и в мобильной версии. Так что теперь в поездках можешь попытаться порешать небольшие crackme или даже поучаствовать в различных CTF-мероприятиях со своего смартфона.

 

GUI

Единственная причина, на мой взгляд, почему radare2 до сих пор пробивается в массы не такими быстрыми шагами, — это потому, что отсутствует нормальный GUI-интерфейс. Во времена обилия как карманных, так и настольных устройств с touch-экранами это уже считается минимумом. На данный момент существует несколько встроенных утилит:

    • визуальный интерфейс в консольном окне, который запускается командой VV (согласен, страшновато выглядит);

 

Рис. 9. Визуальный интерфейс в radare2
Рис. 9. Визуальный интерфейс в radare2

 

    • у radare2 есть встроенный веб-интерфейс (в отличие от IDA и Hopper), который более-менее помогает в работе. Запускается следующей командой:

 

root@kali:~/crackmes# r2 -c=H cm1eng
Рис. 10. Веб-интерфейс для radare2
Рис. 10. Веб-интерфейс для radare2

 

Помимо встроенных интерфейсов, существует разработка от команды энтузиастов Inguma под названием Bokken. Это опенсорсный проект, с недавних пор поддерживает патчи как из GitHub, так и с Bitbucket. Написан с использованием PyGTK для работы с radare2 и pyew. С ним также работают ребята из CTF-команды Dragon Sector.

 

Outro

Увы, полностью описать работу с каждым модулем я не смогу, так как ограничен размером статьи. Но надеюсь, тех небольших знаний, которые ты получил из статьи, тебе хватит. Также советую просмотреть материалы по указанным ссылкам. Некоторые примеры тебя приятно удивят. В случае если возникнут проблемы с освоением, найдешь возможную ошибку в фреймворке или, может, захочешь помочь с программированием — милости просим на IRC-канал #radare в сети irc.freenode.net. Причем в отличие от ряда каналов, на которых я тоже присутствую, на этом ежедневно ведется обсуждение как проекта, так и других различных вещей.

Разработка фреймворка не стоит на месте, и версия 1.0 все ближе. Одно из планируемых нововведений, которое, как мне кажется, пригодится многим, — это поддержка 010-шаблонов для одноименного шестнадцатеричного редактора. А такие шаблоны особенно помогают при фаззинге.

Поэтому не удивляйся, если в момент чтения этого номера ты установишь версию 1.x.

Антон Кочков (xvilka), один из разработчиков этого фреймворка, представил его, как мне кажется, впервые на русском языке в виде небольшого доклада на PHDays 2014. В докладе он показал пример использования radare2 для анализа вредоносных программ. В качестве экземпляров были представлены Windows-троян Shylock и 64-битный Linux-вирус Snakso.A, для которых был проведен как статический анализ, так и отладка с использованием дебаггера. Видео доклада доступно на официальном сайте PHDays. А с презентацией ты можешь ознакомиться на slideshare-аккаунте мероприятия.

Создатели программы подали заявку в Summer of Code от Google, но получили отказ. Поэтому разработчики запустили краудфандинговую кампанию с целью провести свой Summer of Code — Radare Summer of Code 2014, о чем также написали на Хабрахабре.

Знаменитый хакер @pof, а по совместительству тот, кто создал Android Hacker Handbook и поддерживает Android-версию фреймворка, написал статью. В ней он объясняет разницу между взломом RAM-памяти и ROM-образа на примере игры Super Street Fighter II Turbo, используя для редактирования образа radare2.

Для улучшения читабельности дизассемблированного кода (в частности, сделать непрерывные стрелки, показывающие переходы) советую добавить опцию:

e scr.utf8=true

Такие небольшие команды можно прописать в файле конфигурации ./radarerc, чтобы они выполнялись автоматически при запуске фреймворка.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии