Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Дизассемблирование и отладка программ — весьма непростой и трудоемкий процесс, а значит, заниматься этим нужно с комфортом. Этот самый комфорт вместе с удобным интерфейсом и предлагает специальная надстройка для Radare2 под названием Cutter. Как она работает? Сейчас разберем на простых примерах.
Некоторое время назад мы во всех подробностях (с примером взлома сервера) обсудили фреймворк для анализа программного обеспечения Radare2. На основе этого фреймворка усилиями сообщества была создана навороченная среда с графическим интерфейсом, позволяющая видеть промежуточные результаты разных процессов анализа и с удобством ими управлять.
Эта среда позволяет настраивать параметры с помощью визуальных компонентов и свободно перемещаться по разным листингам во время анализа, а также настраивать поведение среды. Не секрет, что это сделало хакинг (оговорился: анализ безопасности программ) более дружественным и наглядным.
Сначала разработчики Radare2 выпустили в свет iaito. Через некоторое время его форкнула группа Rizin, сделала несколько надстроек и опубликовала под названием Cutter. Эти усовершенствования настолько понравились общественности, что народная слава сделала Cutter популярнее прародителя.
Среди самых крутых фич стоит отметить хотя бы то, что в Cutter до ума (с некоторыми оговорками) доведен отладчик, добавлена консоль Rizin, в которой можно выполнять команды фреймворка Radare2 (или его брата‑близнеца — фреймворка Rizin). Оговорки относятся к работе отладчика в Linux. В следующем разделе рассмотрим их подробнее.
Ранее я уже рассказывал про анализ и взлом приложений для Linux. Если тебе нужен материал об исследовании программ для Windows, практическом анализе защиты и внутренностях операционной системы, направляю тебя на монументальный труд Криса Касперски, переизданный в соавторстве со мной: «Фундаментальные основы хакерства. Анализ программ в среде Win64».
Существуют версии Cutter под все распространенные операционные системы. Чтобы выбрать нужную, переходим на официальный сайт проекта Cutter, мотаем страницу вниз, видим возможность скачать Cutter во всех доступных вариантах: для Linux — в формате распространения переносимых приложений (.AppImage), в zip-архиве — для Windows и образ инсталляционного диска (.dmg) — для macOS. Еще можно перейти на страницу проекта в GitHub, скачать исходники и сбилдить проект from scratch.
Образы для скачивания приложения под любую операционную систему
Установка Cutter в Windows и macOS проходит гладко, а итоговая тулза работает довольно стабильно. Между тем в Linux все не так безоблачно. На первый взгляд, установленный любым доступным образом Cutter работает в Linux вполне сносно. Однако, запустив под отладчиком более или менее солидную по размерам программу и сделав несколько шагов по трассе кода, ты с удивлением увидишь, что Cutter бесповоротно крашится. В момент запуска отладки Cutter сообщает о том, что отладочный режим находится в состоянии активной разработки со всеми вытекающими.
Я провел тесты с разными дистрибутивами Linux, на разных виртуальных машинах, на реальном железе — везде одно и то же: Cutter безбожно падал. Я загружал Cutter из разных источников, пробовал собирать его из исходников. Однако результат оставался прежним. Даже скачанный с сайта разработчика «полностью укомплектованный» бандл Cutter-x86_64.AppImage
не исправил ситуацию.
В процессе поисков и тестирования я наткнулся на менеджер пакетов openSUSE, а в нем, собственно, обнаружил нужный мне пакет Cutter-Re. Начал тестировать его.
Страница менеджера пакетов openSUSE
OpenSUSE предлагает несколько вариантов установки множества пакетов для разных версий Linux. Там можно получить бинарники Cutter напрямую. Не советую, проигрышный вариант. Лучше установить программу вручную:
echo 'deb http://download.opensuse.org/repositories/home:/RizinOrg/xUbuntu_22.04/ /' | sudo tee /etc/apt/sources.list.d/home:RizinOrg.list curl -fsSL https://download.opensuse.org/repositories/home:RizinOrg/xUbuntu_22.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home_RizinOrg.gpg > /dev/null sudo apt update sudo apt install cutter-re
После выполнения этих несложных действий я получил стабильно работающий Cutter, способный корректно выполнить отладку любого приложения.
Из минусов в сравнении с версией, которую можно скачать с официального сайта, я заметил отсутствие декомпилятора, но при необходимости его можно доустановить в качестве плагина. В этом случае придется перекомпилировать Cutter вместе с исходниками плагина. Но в рамках нашего сегодняшнего исследования мы вполне обойдемся без декомпилятора, ограничившись дизассемблером.
info
На момент написания статьи Cutter в менеджере пакетов openSUSE еще не был заточен под последнюю версию Ubuntu 24.04, поэтому я остался на предыдущей версии ОС.
В случае если для корректной работы Cutter ты не желаешь переходить на Ubuntu с другого Linux-дистрибутива, можешь заюзать iaito — официальный графический интерфейс для Radare2. В нем отсутствуют некоторые фичи, добавленные в Cutter, но без них вполне можно жить и успешно исследовать программы в Linux. Неудобство доставит разве что отсутствие отладчика.
Для испытания Cutter воспользуемся готовым набором крякмисов. Самый известный среди реверс‑инженеров источник крякмисов — сайт crackmes.one почил вечным сном как раз во время подготовки статьи. Что ж, свято место пусто не бывает. Воспользуемся набором крякмисов от Леоноры Тиндол (программиста, хакера, Rust-кодера и автора двух книг по языку Rust) aka Nora Codes.
Как говорит сама разработчица комплекта, «Don’t ruin it for yourself by reading the source code!» («Не портите себе жизнь чтением исходного кода!»), следовательно, скачав с GitHub’а файлы, не погружаясь в их исходники, в консоли выполняем команду make crackme*
в зависимости от того, крякми под каким номером тебе нужен.
Репозиторий Норы
Для начала я предлагаю рассмотреть функциональность Cutter на элементарном примере. Сбилдим крякми под номером 01e. Запустив этот крякми на выполнение командой ./crackme01e.64
, ты обнаружишь, что в параметре командной строки требуется указать пароль.
Исходник первого крякми со скрытым паролем (чтобы интереснее было)
Настало время расчехлить ранее установленный Cutter и отправиться в увлекательное путешествие. После загрузки Cutter в пригласительном окне выбираем только что скомпилированный файл crackme01e.64
.
Пригласительное окно Cutter
В следующем окне можно настроить параметры первичного анализа открываемого файла. Единственное, что нас может здесь заинтересовать, — это флажок «Загрузить в режиме записи (-w)». В большинстве случаев файлы открываются для анализа без необходимости внесения в них изменений. Однако в данном случае я предлагаю установить этот флажок, так как мы будем резать файл по живому.
Параметры загрузки
Наконец откроется главное окно приложения. Именно с этим окном ты будешь иметь дело на протяжении практически всего времени использования программы. Посмотрим на самые полезные вкладки.
Cutter: основное окно приложения
На первой странице — Dashboard — мы можем наблюдать общую информацию об открытом файле:
Ниже представлены разные варианты хешей, используемые приложением системные библиотеки (в нашем случае только одна — libc), далее присутствует целый раздел с информацией об анализе: сколько функций было обнаружено в программе, перекрестные ссылки, вызовы и прочее.
На вкладке Strings приведены все строки, содержащиеся в препарируемом файле. Наметанным глазом среди названий системных функций, библиотек, секций файла и сообщений для пользователя мы можем обнаружить строчку, напоминающую искомый пароль.
Подозрительная, выбивающаяся из основного потока строка
Проверим нашу догадку. Ты можешь пока закрыть Cutter, в противном случае крякми нельзя будет запустить на выполнение из‑за того, что он занят другим процессом. Не забудь только сохранить свой Cutter-проект исследования.
Источник: xakep.ru