Обновление (2016-11-01): Создатель Radare2 сообщил мне, что все проблемы, о которых я упоминал ниже, уже исправлены.

Обратите внимание на дату публикации. Вполне возможно, что все проблемы, о которых я упоминал ниже, давно уже исправлены.

Я потратил немало времени на обратную инженерную прошивку с использованием IDA . Я никогда не был полностью доволен МАР. Он значительно улучшился благодаря новым связям с пользовательским интерфейсом и Python, но мне кажется, что этому мешали ранние дизайнерские решения. (Чтобы назвать одно, невозможно, чтобы сегмент не был выровнен по 16 байт, что является полученным от Intel 8086. 34-летний Intel 80286 представил защищенный режим, который поддерживает произвольное выравнивание сегмента, и IDA просто не может его обработать.) Тем не менее, я был оснащен умеренно успешным программным обеспечением для инженерного проектирования для широкого спектра процессорных архитектур с использованием IDA. К сожалению, IDA стоит дорого. Как, действительно, очень дорого .

Несколько конкурирующих инструментов в последнее время стали популярными. Вчера я впервые дал radare2 . Я начал читать книгу Radare2 . Почти сразу я заметил некоторые странные варианты дизайна. Например, инструмент rax2 имеет очень неинтуитивный (для меня) интерфейс.

Но любой новый инструмент займет некоторое время, чтобы учиться, поэтому я начал. Я скомпилировал и установил основные бинарные файлы radare2. В качестве первого теста я запустил r2 /usr/bin/true и ввел визуальный режим с помощью команды V

r2 visual mode

Все идет нормально! Поскольку radare2 использует привязки клавиш перемещения vim-esque (hjkl), я немного был не уверен в себе, но почти сразу заметил что-то странное. После прокрутки вниз (j), а затем резервного копирования один раз (k), я ожидаю увидеть то же самое, что и раньше, но вместо этого получаю это.

r2 visual mode scrolled

Так что он прокручивался слишком далеко, но подождите, что это за call qword [rbp + 0x48] ? По-видимому, он решил перенести байт ff который предшествовал main в основном, тем самым меняя разборку! Фактически, прокрутка вправо или влево, изменяет смещение начала разборки. Как я могу сказать, слева уменьшает смещение на единицу, справа увеличивает его на единицу, а уменьшает его на четыре, а вниз увеличивает его на величину инструкции. Я могу себе представить, почему нужно иметь подобную функциональность, но это удивительно, что она по умолчанию.

После выполнения некоторого анализа кода (команда aa ) это поведение исчезает и вверх и вниз прокручивается инструкцией. Слева и справа сохраняют свое поведение.

Далее: режим визуальной панели (команда ! В визуальном режиме). Это кажется аккуратным (хотя стрелки, похоже, не уважают настройку UTF-8.) К сожалению, этот режим кажется очень глючным. Например, сразу после открытия режима визуальной панели, открыв меню « File и выбрав « Close дважды, r2 переходит в режим segfault. В этом режиме я справился с другими segfaults, но я не совсем уверен, что их вызвало. Это напоминает мне много режима текстового пользовательского интерфейса GDB (TUI), который падает каждый раз, когда я его использую.

После выполнения анализа, который может занять некоторое время, переименования функций или добавления комментариев, было бы здорово сохранить мою работу и вернуться к ней. У Radare2 есть понятие проекта. Команда P может открывать и сохранять проекты.

[0x100000f33]> P?
|Usage: P[?osi] [file]Project management
| Pc [file]    show project script to console
| Pd [file]    delete project
| Pi [file]    show project information
| Pl           list all projects
| Pn[j]        show project notes (Pnj for json)
| Pn [base64]  set notes text
| Pn -         edit notes with cfg.editor
| Po [file]    open project
| Ps [file]    save project
| PS [file]    save script file
| NOTE:        See 'e??prj.'
| NOTE:        project are stored in ~/.config/radare2/projects

Итак, давайте сделаем это. Во-первых, я снова запустил r2 /usr/bin/true , запустил v , а затем сохранил проект.

[0x100000f33]> aa
[x] Analyze all flags starting with sym. and entry0 (aa)
[0x100000f33]> Ps true
true

Это создает каталог ~/.config/radare2/projects/true содержащий два файла.

$ ls -l ~/.config/radare2/projects/true
total 68
-rw-r--r-- 1 steve staff 64653 Oct 29 14:26 rc
-rw-r--r-- 1 steve staff  1393 Oct 29 14:26 xrefs

Все идет нормально. Теперь, когда я сохранил проект, я должен увидеть его в списке проектов, используя команду Pl.

[0x100000f33]> Pl
[0x100000f33]> Pl?
[0x100000f33]>

Наверное, нет? Хорошо, я попытаюсь найти один байт вперед, просто чтобы немного изменить состояние, а затем снова открыть проект.

[0x100000f33]> s +1
[0x100000f34]> Po true
Close current session? (Y/n)
[0x100000f33]>

Хорошо, это кажется хорошим. Так как я выполнил aa перед сохранением проекта, эта информация была сохранена, верно? Нет, не было. Понятия не имею почему. Это похоже на довольно важную информацию для сохранения.

Используя флаг командной строки -p, мы можем открыть проект. Это кажется удобным. В качестве окончательного теста управления проектом я открою проект с помощью -p , попрошу список проектов, а затем выйду и сохраните.

$ r2 -p true
[0x100000f31]> Pl
[0x100000f31]> q
Do you want to save the 'true' project? (Y/n)
r_sys_mkdirp: fail '/Users/steve/.config/radare2/projects/true/rc/rop' of '/Users/steve/.config/radare2/projects/true/rc/rop'
sdb: Cannot open '/Users/steve/.config/radare2/projects/true/rc/rop/nop.tmp' for writing.
r_sys_mkdirp: fail '/Users/steve/.config/radare2/projects/true/rc/rop' of '/Users/steve/.config/radare2/projects/true/rc/rop'
sdb: Cannot open '/Users/steve/.config/radare2/projects/true/rc/rop/mov.tmp' for writing.
r_sys_mkdirp: fail '/Users/steve/.config/radare2/projects/true/rc/rop' of '/Users/steve/.config/radare2/projects/true/rc/rop'
sdb: Cannot open '/Users/steve/.config/radare2/projects/true/rc/rop/const.tmp' for writing.
r_sys_mkdirp: fail '/Users/steve/.config/radare2/projects/true/rc/rop' of '/Users/steve/.config/radare2/projects/true/rc/rop'
sdb: Cannot open '/Users/steve/.config/radare2/projects/true/rc/rop/arithm.tmp' for writing.
r_sys_mkdirp: fail '/Users/steve/.config/radare2/projects/true/rc/rop' of '/Users/steve/.config/radare2/projects/true/rc/rop'
sdb: Cannot open '/Users/steve/.config/radare2/projects/true/rc/rop/arithm_ct.tmp' for writing.

Поскольку rc - это файл, а не каталог, сохранение не выполняется. Понятия не имею почему. Открытие проекта с использованием Po а затем сохранение имеет такое же поведение. Я думаю, что проекты непригодны для использования.

Наконец, я взглянул на немного более обширную экосистему radare2. Radare2 поставляется с менеджером пакетов r2pm который может устанавливать пакеты. Прежде всего, пакеты webui . Следуя инструкциям, я попытался установить www-m .

$ r2pm -i www-m
Processing www-m ...
Already up-to-date.
Install Done For www-m
make -C www/m build
...
/Users/steve/.config/radare2/r2pm/db/www-m: line 11: cd: dist/m: No such file or directory

Так что это не сработало. Как насчет интерфейса Python-GTK, Bokken?

$ r2pm -i bokken
Processing bokken ...
...
Install Done For bokken
abort: error: Connection refused
sys/bokken.sh: line 14: cd: bokken: No such file or directory

Поэтому r2pm установил его, но затем дважды провалился. Поскольку r2pm -l утверждает, что r2pm -l установлен, но установка явно не удалась, попробуйте удалить его.

$ r2pm -u bokken
Processing bokken ...
Already up-to-date.
Uninstall Done For bokken
Sorry. This package cannot be uninstalled

Возможно, менеджер пакетов не обновляется.

$ r2pm update
Already up-to-date.
r2pm database initialized. Use 'r2pm update' to update

Почему команда обновления говорит мне запускать обновление?

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

Я r2pm -i radeco выдает вам сотни строк ошибок, которые возникают в результате запуска r2pm -i radeco .

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