Обратная разработка
Интерес к принципу работы программ на низшем уровне у меня появился ещё давно. К тому же, учитывая мою специальность, данная дисциплина вполне тесно связана с моим направлением подготовки. Однако, в силу личных обстоятельств, рассмотреть подробно данную тему я смог лишь под конец бакалавриата. Тогда я узнал про обратную разработку, и пробовал разобраться в этом поподробнее, тем более, у меня тогда уже образовалось некоторое понимание архитектуры x86. Тогда это были только небольшие статьи и видео на Youtube. После, посещение некоторых форумов. Тогда это занятие пришлось забросить по причине занятости бакалаврской работой. В следующий раз я вернулся к данной теме примерно через год, пробуя свои силы в некоторых тестовых заданиях при приёме на должность соответствующего специалиста. И хотя тогда мой опыт был недостаточным для решения подобных задач, они вызывали у меня интерес, и я ещё к ним возвращался. Также я пробовал разбирать и "ломать" специальные тренировочные программы, созданные для этого, а также некоторые свои собственные, либо сторонние программы. И хотя мой опыт изучения данного направления сейчас достаточно мал, я хочу продолжить практиковаться дальше, а возможно, и связать с данной специальностью свою жизнь.
Обратная разработка (обратный инжиниринг, реверс-инжиниринг или, кратко, реверсинг; от англ. reverse engineering) — это «исследование некоторого устройства или программы, а также документации на них с целью понять принцип его работы и, чаще всего, воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового».
Обратная разработка программного обеспечения производится с помощью следующих методик:
• Анализ обмена данными, наиболее распространённый в обратной разработке протоколов обмена данными, который производится с помощью анализатора шины и пакетного сниффера для прослушивания шины компьютера и компьютерной сети соответственно.
• Дизассемблирование машинного кода программы для получения её листинга на языке ассемблера. Этот способ работает на любой компьютерной программе, но требует достаточно много времени, особенно для неспециалиста.
• Декомпиляция машинного или байт-кода программы для создания исходного кода на некотором языке программирования высокого уровня.
Объектами обратной разработки могут быть:
• файлы — чтобы узнать, как именно работает приложение;
• часть операционной системы — чтобы использовать недокументированные функции;
• формат данных — чтобы получить структуру файлового формата;
• сетевой протокол — чтобы восстановить формат пакетов данных и последовательность обмена данными.
Реверс-инжиниринг программного обеспечения — это изучение программы с закрытым исходным кодом и, возможно, внесение каких-то изменений. В процессе нередко участвует специальный софт: декомпиляторы, отладчики, дизассемблеры, распаковщики и прочие инструменты. Если упростить, программу неким образом превращается в исходный код, чтобы изучить ее структуру и принципы работы.
Декомпиляция и разбор программ может быть использовано для множества различных целей:
• поиск и исправление ошибок в программах, к исходному коду которых у разработчиков нет доступа;
• анализ вирусов для создания антивирусного программного обеспечения;
• улучшение функциональности приложения, когда связаться с предыдущим разработчиком не получается — например, компания-разработчик перестала существовать;
• описание механики игры;
• обучение: если разработчик не понимает какую-то часть своего продукта, он может проанализировать чужую и сделать выводы о ее функционировании.
Существующие инструменты:
Дизассемблеры
• Hiew — редактор бинарных файлов, ориентированный на работу с кодом. Позволяет просматривать файлы неограниченной длины в текстовом и шестнадцатеричном форматах, а также в режиме дизассемблера для x86-64 и ARM, имеет встроенный ассемблер для x86-64.

Рисунок 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 и не является декомпилятором, она содержит отладчик и может анализировать программы на высоком уровне.

Рисунок 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) для каждого отлаживаемого приложения.
—Поддержка большого количества плагинов.

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

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