Пример реверс инжиниринга с использованием Ghidra

Ghidra

Добро пожаловать в очередную статью, посвященную реверс-инжинирингу. Мы уже рассказывали об инструменте для реверс-инжиниринга — Ghidra. Сегодня я покажу простой пример реверс-инжиниринга программы на языке C с использованием Ghidra. Наша цель: найти пароль, анализируя бинарник, без исходного кода.

Еще по теме: Реверс прошивок роутера

Что такое реверс инжиниринг

Реверс-инжиниринг (Reverse engineering) — это процесс анализа программного или аппаратного обеспечения с целью понять, как оно работает, раскрыть его конструкцию и функционал.

При реверс инжиниринге кода на языках Си и Си++ необходимо разобрать код на составные части, проанализировать каждую из них, а затем собрать заново, чтобы понять, как работает программа. Для этого часто используются такие инструменты реверс-инжиниринга, как Ghidra, IDA Pro или OllyDbg.

Дизассемблирование кода заключается в том, чтобы взять скомпилированный код и разложить его на инструкции языка ассемблера. Это может быть непростым процессом, поскольку код может быть оптимизирован и замаскирован, чтобы сделать его более сложным для реверса.

Статья в образовательных целях и предназначена для обучения этичных хакеров. При написании статьи использовались личные устройства автора. Использование Ghidra для несанкционированного взлома программ является незаконным. Ни редакция spy-soft.net, ни автор не несут ответс­твен­ности за ваши действия.

Один из распространенных приемов, используемых при реверсе Си и Си++, называется трассировкой функций. Она заключается в отслеживании выполнения программы с целью определения того, как она работает. Для этого необходимо установить точки останова в определенных местах кода и затем проследить за выполнением программы. Это может помочь обнаружить потенциальные уязвимости в защите или понять, как работает программа.

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

Что такое Ghidra

Ghidra — это инструмент для реверс-инжиниринга программного обеспечения, разработанное и предоставленное в свободный доступ Национальным управлением по информационной безопасности США (NSA). Это программное обеспечение предназначено для анализа исполняемого кода, понимания его структуры и функций, а также для поиска уязвимостей и создания новых инструментов.

Основные возможности Ghidra:

  1. Декомпилятор и дизассемблер.
  2. Мощные аналитические возможности.
  3. Графический пользовательский интерфейс.
  4. Многоплатформенность.
  5. Скриптинг и расширяемость.

Ghidra — это полезный инструмент для специалистов ИБ, разработчиков и всех, кто занимается анализом программного обеспечения.

Код защищенной программы на C

В качестве примера будем использовать следующий код:

Давайте разберем код:

1 Подключение библиотек:

Эти строки подключают стандартные библиотеки языка C, которые понадобятся для работы с вводом-выводом ( stdio.h) и обработки строк ( string.h).

2 Определение цветов:

Здесь определены строки для управления цветом текста в консоли с использованием ANSI escape-последовательностей. Это позволит выводить текст красным ( VT_RED), зеленым ( VT_GREEN) или сбрасывать цвета ( VT_RESET).

3 Функция для проверки ключа:

Это функция, которая принимает строку key и сравнивает ее с предопределенным ключом secretkey. Если строки совпадают, функция возвращает 1 (true), в противном случае (false).

4 Функция main:

  • main() — это главная функция, которая начинает выполнение программы.
  • Создается массив key размером 100 символов для хранения ключа активации.
  • Выводится сообщение «продукт не активирован» с красным цветом.
  • Пользователь вводит ключ активации.
  • Вызывается функция checkKey(key) для проверки ключа.
  • В зависимости от результата проверки выводится сообщение о успешной активации продукта с зеленым цветом и некий текст, либо сообщение о неверном ключе с красным цветом.
  • Функция возвращает 0, что обозначает успешное завершение программы.

Пример реверс инжиниринга с использованием Ghidra

После установки Ghidra на Windows или Kali Linux откройте бинарник. После чего появится вот такой экран:

Пример реверс инжиниринга

Теперь давайте воспользуемся очень простой техникой реверса программы, перейдем к функциям:

Пример реверс инжиниринга программы C

И найдем функцию main, главная функция в C (всегда является точкой входа программы).

Проверим содержимое:

Реверс инжиниринг ghidra

В разделе декомпиляции вы можете увидеть фрагмент кода:

Пример использования ghidra

Это простой код, который считывает пользовательский ввод с запросом пароля, когда программа получает пользовательский ввод, то сохраняет его в переменной iVarl, здесь же отправляет ключ в функцию CheckKey.

Перейдем в раздел functions и найдем функцию CheckKey:

Ghidra пример использования

Она здесь.

Теперь в разделе декомпилятора мы видим следующее:

Ghidra использование

Программа взломана, пароль — secretkey.

Заключение

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

ПОЛЕЗНЫЕ ССЫЛКИ:

QUASAR

Этичный хакер и компьютерный ниндзя. Новые статьи в нашей Телеге!

Добавить комментарий