Зворотній інжиніринг із використанням Radare2

2 квітня 2023 1 хвилина Автор: Endpool

Основи роботи з феймворком Radare2

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

А поки що розглянемо його особливості, які розроблені на даний момент. Radare2 це фреймворк для аналізу бінарних файлів. Він включає велику кількість утиліт. Спочатку він розвивався як шістнадцятковий редактор для пошуку та відновлення даних, потім він обростав функціоналом і на даний момент став потужним фреймворком для аналізу даних. Основним недоліком, що перешкоджає поширеності фреймворку, є відсутність якісного GUI. Radare2 найчастіше застосовується як інструмент реверс інжинірингу, як просунутого дизассемблера.

Встановлення Radare2

Для встановлення Radare2 почніть із перевірки, можливо ця програма вже присутня у стандартних репозиторіях вашого дистрибутива. Наприклад, у Kali Linux ця програма не тільки є, а й встановлена за замовчуванням.

У Debian та похідних виконати інсталяцію за допомогою команди:

В Arch Linux та BlackArch для встановлення Radare2 виконайте:

Для встановлення Radare2 у дистрибутиви Linux, для яких вона відсутня в джерелах додатків, вам потрібно клонувати вихідний код із GitHub і запустити файл sys/install.sh:

Тепер погляньмо на бінарники, які ви завантажили раніше (або створили самі). Програма intro під час запуску в консолі виводить рядок “Hello World”:

Код цієї програми простий:

Radare2 поставляється з дуже зручним інструментом під назвою rabin2. Він може бути використаний для витягування інформації з бінарника, в цій інформації будуть: рядки, час компіляції та інша корисна інформація. Я зазвичай використовую це перед запуском будь-якого серйозного аналізу, тому можу дізнатися загалом, що програма може бути робить. Я почну з додавання прапора -I. Це дасть нам важливу інформацію про бінарника.

Приклад висновку:

Це говорить нам, що програма призначена для роботи на Linux і що вона була написана мовою програмування C. Ми також можемо побачити, що bintype має значення “elf”. Це називається магічним числом (magic number) і може нам допомогти дізнатися, якого типу цей файл (бінарник Linux). Це все, що нам потрібно зараз знати. Наступна команда, яку я люблю використовувати, це rabin2-z. Вона виведе список усіх рядків із секції даних (data) цього бінарного файлу. Запуском цієї команди ми можемо побачити наш рядок “Hello World”:

Приклад висновку:

Після цього я іноді продовжую з rabin2 -zz, яка показує всі рядки в бінарнику (а не тільки із секції даних). Вона зазвичай виводить досить багато рядків. Іноді там є важливі заховані рядки, іноді ні. У випадку з програмою, що розбирається, там нічого цікавого, тому ми закінчили з rabin2. Інші прапори rabin2 ви можете подивитися командою:

Є багато інших цікавих речей, які можуть показати rabin2, такі як імпорти, експорти та секції коду, але для цього двійкового файлу це не особливо цікаво. При аналізі шкідливого ПЗ, цим команди можуть стати в нагоді, але не для такої простої програми на зразок цієї. Тому тепер ми можемо перейти до дійсного запуску нашої програми в radare2 для перегляду коду асемблера. Запускаємо команду:

Вона завантажить наш здійсненний файл у radare2. Наступний крок – це включити аналіз двійкового файлу в radare2. За допомогою нього знайдуться такі речі як рядки, функції та інша важлива інформація, яку radare2 може показати нам під час аналізу, тобто ми не просто вираємося в код Асемблера. Щоб увімкнути аналіз, запустіть команду “aa”. Це базова команда аналізу для radare2. У нас також є “aaa” та “aaaa”, кожна аналізує більше інформації, ніж попередня. На даний момент нам досить просто “aa”.

Тепер наш файл можна аналізувати, ми можемо перейти в розділ бінарника, де насправді розміщений код. Команда “s” у radare2 використовується для “seek” (пошуку) місця у пам’яті. Її можна використовувати або з дійсним шістнадцятковим адресою, або ми можемо надрукувати ім’я функції, яку потрібно знайти. Оскільки ми знаємо, більшість програм Linux запускаються з функції “main”, ми можемо пошукати

Ви помітите, що адреса курсора змінилася з 0x00000540 на 0x0000064a. Це означає, що тепер поточна адреса 0x0000064a і що ми в функції main. Мені подобається аналізувати код у візуальному режимі radare2 (прямо зараз ми в командному режимі). Щоб перейти до візуального режиму, наберіть “v” та натисніть Enter.

Те, на що ви дивитеся зараз – це шістнадцятковий редактор radare2 (так, у нього є все!). Але це не обов’язково код, який хочемо бачити. Щоб змінити вигляд, натисніть “p”. Вигляд зміниться на “вид розбирання” (disassembly view) і ми зможемо побачити код асемблера програми. Зверніть увагу, що radare2 відокремлює функції на невеликі типи ASCII блоків. Код головної функції виглядає приблизно так:

Тепер давайте пройдемося за вихідним кодом. Оскільки цей файл є x64 додатком, ми можемо побачити, що ми поміщаємо наш рядок “Hello World” в rdi за адресою пам’яті 0x0000064e. Потім ми викликаємо функцію “sym.imp.puts” (або “puts“), яка те саме, що і “printf“. Тобто ця функція надрукує наш рядок. Після цього команда “nop” робить абсолютно нічого (як команда pass у python), потім ми очищаємо та завершуємо функцію, використовуючи “pop rbp” та “ret”. Оскільки наша функція закінчила роботу і оскільки це головна функція, наша програма також відпрацювала.

Навіть без запуску самої програми ми можемо сказати, що ця програма виводить стоку Hello World. Це було дуже просте застосування radare2. У наступній статті ми будемо використовувати radare2 для «злому» простої програми в стилі Capture the Flag (вирішення хакерських завдань, коли доказом досягнення мети є отримання спеціально захованої автором завдання інформації – «Прапора»)

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.