На радаре — Cutter. Исследуем программы в графической надстройке Cutter для Radare2

Содержание статьи

  • Установка Cutter в Linux
  • Испытываем Cutter — статический анализ
  • Способы взлома программы
  • Динамический анализ
  • Выводы

Ди­зас­сем­бли­рова­ние и отладка прог­рамм — весь­ма неп­ростой и тру­доем­кий про­цесс, а зна­чит, занимать­ся этим нуж­но с ком­фортом. Этот самый ком­форт вмес­те с удоб­ным интерфей­сом и пред­лага­ет спе­циаль­ная надс­трой­ка для Radare2 под наз­вани­ем Cutter. Как она работа­ет? Сей­час раз­берем на прос­тых при­мерах.

Не­кото­рое вре­мя назад мы во всех под­робнос­тях (с при­мером взло­ма сер­вера) обсу­дили фрей­мворк для ана­лиза прог­рам­мно­го обес­печения Radare2. На осно­ве это­го фрей­мвор­ка уси­лиями сооб­щес­тва была соз­дана наворо­чен­ная сре­да с гра­фичес­ким интерфей­сом, поз­воля­ющая видеть про­межу­точ­ные резуль­таты раз­ных про­цес­сов ана­лиза и с удобс­твом ими управлять.

Эта сре­да поз­воля­ет нас­тра­ивать парамет­ры с помощью визу­аль­ных ком­понен­тов и сво­бод­но переме­щать­ся по раз­ным лис­тингам во вре­мя ана­лиза, а так­же нас­тра­ивать поведе­ние сре­ды. Не сек­рет, что это сде­лало хакинг (ого­ворил­ся: ана­лиз безопас­ности прог­рамм) более дру­жес­твен­ным и наг­лядным.

Сна­чала раз­работ­чики Radare2 выпус­тили в свет iaito. Через некото­рое вре­мя его фор­кну­ла груп­па Rizin, сде­лала нес­коль­ко надс­тро­ек и опуб­ликова­ла под наз­вани­ем Cutter. Эти усо­вер­шенс­тво­вания нас­толь­ко пон­равились общес­твен­ности, что народ­ная сла­ва сде­лала Cutter популяр­нее пра­роди­теля.

Сре­ди самых кру­тых фич сто­ит отме­тить хотя бы то, что в Cutter до ума (с некото­рыми ого­вор­ками) доведен отладчик, добав­лена кон­соль Rizin, в которой мож­но выпол­нять коман­ды фрей­мвор­ка Radare2 (или его бра­та‑близ­неца — фрей­мвор­ка Rizin). Ого­вор­ки отно­сят­ся к работе отладчи­ка в Linux. В сле­дующем раз­деле рас­смот­рим их под­робнее.

 

Установка Cutter в 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 — статический анализ

Для испы­тания 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

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *