ДонНТУ   Портал магистров

Обратная разработка

Интерес к принципу работы программ на низшем уровне у меня появился ещё давно. К тому же, учитывая мою специальность, данная дисциплина вполне тесно связана с моим направлением подготовки. Однако, в силу личных обстоятельств, рассмотреть подробно данную тему я смог лишь под конец бакалавриата. Тогда я узнал про обратную разработку, и пробовал разобраться в этом поподробнее, тем более, у меня тогда уже образовалось некоторое понимание архитектуры x86. Тогда это были только небольшие статьи и видео на Youtube. После, посещение некоторых форумов. Тогда это занятие пришлось забросить по причине занятости бакалаврской работой. В следующий раз я вернулся к данной теме примерно через год, пробуя свои силы в некоторых тестовых заданиях при приёме на должность соответствующего специалиста. И хотя тогда мой опыт был недостаточным для решения подобных задач, они вызывали у меня интерес, и я ещё к ним возвращался. Также я пробовал разбирать и "ломать" специальные тренировочные программы, созданные для этого, а также некоторые свои собственные, либо сторонние программы. И хотя мой опыт изучения данного направления сейчас достаточно мал, я хочу продолжить практиковаться дальше, а возможно, и связать с данной специальностью свою жизнь.

Обратная разработка (обратный инжиниринг, реверс-инжиниринг или, кратко, реверсинг; от англ. reverse engineering) — это «исследование некоторого устройства или программы, а также документации на них с целью понять принцип его работы и, чаще всего, воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового».

Обратная разработка программного обеспечения производится с помощью следующих методик:

• Анализ обмена данными, наиболее распространённый в обратной разработке протоколов обмена данными, который производится с помощью анализатора шины и пакетного сниффера для прослушивания шины компьютера и компьютерной сети соответственно.

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

• Декомпиляция машинного или байт-кода программы для создания исходного кода на некотором языке программирования высокого уровня.

Объектами обратной разработки могут быть:

• файлы — чтобы узнать, как именно работает приложение;

• часть операционной системы — чтобы использовать недокументированные функции;

• формат данных — чтобы получить структуру файлового формата;

• сетевой протокол — чтобы восстановить формат пакетов данных и последовательность обмена данными.

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

Декомпиляция и разбор программ может быть использовано для множества различных целей:

• поиск и исправление ошибок в программах, к исходному коду которых у разработчиков нет доступа;

• анализ вирусов для создания антивирусного программного обеспечения;

• улучшение функциональности приложения, когда связаться с предыдущим разработчиком не получается — например, компания-разработчик перестала существовать;

• описание механики игры;

• обучение: если разработчик не понимает какую-то часть своего продукта, он может проанализировать чужую и сделать выводы о ее функционировании.

Существующие инструменты:

Дизассемблеры

     • Hiew — редактор бинарных файлов, ориентированный на работу с кодом. Позволяет просматривать файлы неограниченной длины в текстовом и шестнадцатеричном форматах, а также в режиме дизассемблера для x86-64 и ARM, имеет встроенный ассемблер для x86-64.

интерфейс редактора Hiew

Рисунок 1 – интерфейс редактора Hiew

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

— просмотр файлов любой длины в текстовом, шестнадцатеричном и в режиме дизассемблера;

— x86-64 ассемблер и дизассемблер;

— просмотр и редактирование логических и физических дисков;

— поддержка форматов исполняемых фалов NE,LE,LX,PE/PE32+,ELF/ELF64(little-endian);

—поддержка Netware Loadable Modules NLM,DSK,LAN.

дизассемблированный код

Рисунок 2 – дизассемблированный код

Отладчики

    • IDA. это интерактивный дизассемблер и отладчик. Она позволяет превратить бинарный код программы в ассемблерный текст, который может быть применен для анализа работы программы. Название IDA Pro происходит от английского Interactive Disassembler.

IDA используется для анализа вирусов, исследования защит систем , обратной инженерии. Хотя IDA и не является декомпилятором, она содержит отладчик и может анализировать программы на высоком уровне.

интерфейс программы IDA

Рисунок 3 – интерфейс программы IDA

    • OllyDBG. Это 32-битный отладчик для операционных систем Windows, предназначенный для анализа и модификации откомпилированных исполняемых файлов и библиотек, работающих в режиме пользователя.

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

К возможностям OllyDbg относится:

—Поддерживаемые процессоры: вся серия 80x86, Pentium и совместимые;

—расширения MMX, 3DNow! и SSE до версии SSE4 включительно.

—Поддерживаемые форматы отображения данных: hex-код, ASCII, юникод, 16- и 32-битные целые числа со знаком и без знака, 32-, 64- и 80-битные числа с плавающей запятой (float).

—Способы отображения дизассемблированного кода: MASM, IDEAL, HDA.

—Мощный анализатор кода, распознающий процедуры, циклы, ветвления, таблицы, константы и текстовые строки.

—Развёрнутая система поиска: поиск всех возможных констант, команд, последовательностей команд, текстовых строк и ссылок в коде на адрес.

—Распознание и расшифровка более двух тысяч типичных функций Windows API и языка C.

—Распознание и расшифровка PE-заголовка.

—Эвристический анализ стека, распознание адресов возврата в родительскую процедуру.

—Простые, условные и протоколирующие точки остановки (breakpoints).

—Пошаговая отладка с протоколированием хода выполнения (run trace).

—Индивидуальный файл конфигурации (UDD) для каждого отлаживаемого приложения.

—Поддержка большого количества плагинов.

интерфейс программы OllyDBG

Рисунок 4 – интерфейс программы OllyDBG

Дебаггеры

• dotPeek – это Бесплатный инструмент для декомпиляции и исследования сборок .NET.

Возможности dotPeek:

• Декомпиляция сборок .NET Framework 1.0-4.5 в эквивалентный код на C#. Поддерживаются библиотеки (.dll), исполняемые файлы (.exe), а также файлы метаданных Windows 8 (.winmd). Кроме того, dotPeek умеет искать сборки в каталогах, которые вы ему указываете, и открывает разного рода архивы: как .zip, так и родственные форматы .vsix и .nupkg.

• Возможность подключения к серверам символов и кода, что позволяет загружать и показывать исходный код, когда его удается обнаружить. Если разрешить программе искать PDB-файлы или сервер кода, dotPeek сможет заполучить исходный код, соответствующий версиям просматриваемых сборок, и показать его в первозданном виде.

• Быстрый обзор структуры и иерархии кода.

• Поиск вызовов.

интерфейс программы dotPeek

Рисунок 5 – интерфейс программы dotPeek

Источники

  1. Tribute to HIEW[Электронный ресурс]. – Режим доступа: https://habr.com/ru/post/208176/
  2. Гладких А., IDA Pro и техники реверс-инжиниринга[Электронный ресурс]. – Режим доступа: https://habr.com/ru/company/inforion/blog/493416/
  3. Введение в отладчик OllyDbg[Электронный ресурс]. – Режим доступа: https://codeby.school/blog/informacionnaya-bezopasnost/vvedenie-v-otladchik-ollydbg
  4. dotPeek — новый, бесплатный декомпилятор от JetBrains[Электронный ресурс]. – Режим доступа: https://habr.com/ru/post/119153/