Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Если ты никогда не пользовался Radare2, то наверняка о нем слышал: это опенсорсный набор инструментов для исследования программ. В него входит мощный дизассемблер и отладчик, позволяющий погрузиться в систему глубже, чем стандартный GDB. В этой статье мы подробно поговорим о философии Radare2 и начнем работать с ним.
В статье «Отладка программ без исходников. Анализируем двоичные файлы в Linux штатными средствами» мы рассмотрели базовые средства дизассемблирования и отладки приложений в Unix-подобных операционных системах, настолько старых, что ими пользовались еще динозавры. С другой стороны, уже в XXI веке были созданы альтернативные инструменты, благодаря своему удобству и мощи завоевавшие любовь трудящихся на ниве информационной (без)опасности специалистов.
Как известно, Radare2 представляет собой глобально измененный форк первого Radare. В соответствии с законами мира Unix это набор узкоспециализированных утилит командной строки. Их можно применять как порознь, так и вместе: одна утилита использует результаты работы другой.
В набор входит более десятка утилит. Вот некоторые из них:
r_search
для поиска строк или байтов по маске. Так как Radare2 — Unix-ориентированный фреймворк, все утилиты в базовом варианте исполняются в командной строке. Однако с Radare2 можно работать не только в консольной среде: к услугам хакера есть несколько графических оболочек, объединяющих все инструменты фреймворка в мощную интерактивную среду. Среди них особую популярность завоевали iaito и Сutter. Они очень похожи, поскольку второй — форк первого.
Инструменты, входящие в Radare2, можно использовать в самых разных ОС и исследовать код для разных процессорных архитектур. Поддерживаются x86-64, ARM, MIPS, PowerPC, SPARC, Z80, MOS 6502 и байт‑код разных виртуальных машин. Анализировать можно PE32, PE32+, ELF, ROM-файлы игровых приставок и многое другое.
Хотя сами утилиты Radare2 где только не работают, интерактивные среды поддерживаются лишь в основных десктопных ОС. Однако даже консольные утилиты Radare2 удобны в работе, если ты умеешь с ними обращаться. Также управлять Radare2 можно из веб‑оболочки.
Изучив основные сведения, переходим к практике, а точнее — к установке.
В отличие от прошлой статьи, где я использовал Ubuntu, организовывать эксперименты сегодня я буду в Debian Linux.
Перед установкой Radare2 в Debian мне потребовалось установить gnu make
, по умолчанию его в дистрибутиве не было. Лучше сразу установить build-essential
:
sudo apt-get install build-essential
Хотя многие дистрибутивы Linux содержат готовые к инсталляции пакеты Radare2, версия из менеджера пакетов может быть не самой новой, поэтому можешь скачать последнюю версию с GitHub (заметим, что и обновлять в таком случае дальше придется вручную):
git clone https://github.com/radareorg/radare2.git
Запустим установку:
cd radare2 sudo sys/install.sh
Внутри подкаталога binr
находятся подпапки со всеми перечисленными выше утилитами.
Содержимое подкаталога binr
Заодно установим vim, если его нет в системе:
sudo apt install vim
Хотя, если предпочитаешь nano или другой редактор, ты волен ставить, что тебе больше нравится.
Итак, представим, что наш Linux находится в далекой‑предалекой галактике и нам, героям, нужно взломать сервак злодея‑работорговца Джаббы Хатта. Программа на этом сервере работает на C, потому что Джабба предпочитает олдскул.
Я предлагаю тебе скачать исходный код и, не изучая его, чтобы не подглядывать в разгадку, сразу скомпилировать. Первым делом клонируй репозиторий с моего GitHub. Далее компилируй сервер для 64-битной платформы, так как этот вариант для нас явно интереснее.
Находясь в каталоге с исходником нашего сервера, выполним компиляцию и сборку:
gcc server.c -o server64.elf
На выходе получаем исполняемый ELF-файл, над которым мы будем работать на протяжении статьи.
Мы не знаем, что делает утянутый у Джаббы исполняемый файл, поэтому вначале просто запустим его и посмотрим. Неизвестные файлы лучше всего выполнять в изолированной среде, ведь в реальной жизни что только не приходится отлаживать. Поэтому я работаю в виртуальной машине, которая не содержит никаких ценных данных, что рекомендую и тебе.
Итак, из каталога HackThisServer запустим наш сервер:
./server64.elf
Ничего видимого не происходит: вероятно, программа ждет обращения.
В качестве клиента для подключения к запущенному серверу воспользуемся утилитой netcat, задав в параметрах адрес целевой машины и номер порта. В другом окне терминала введи (номер порта мы узнаем чуть позже, пока прими данный по умолчанию):
nc localhost 14884
В результате нас встретит экран авторизации.
Система канализации Джаббы
Попробуем ввести xakep
. Сервер ответит: «These are not the droids you are looking for!». При этом сеанс netcat будет завершен.
Использование Radare2 из командной строки похоже на работу с отладчиком GDB. Чтобы лучше усвоить команды R2, предлагаю первое время использовать именно консольный вариант, не прибегая к помощи визуальных оболочек. Давай посмотрим, как из командной строки проводить статическое исследование и динамический анализ бинарника.
Оставаясь в каталоге с ELF-файлом, натравим на него дизассемблер:
r2 server64.elf
Все последующие команды будут выполняться над указанным файлом, поэтому его имя больше вводить не понадобится.
Источник: xakep.ru