Реверс-инжиниринг, или обратная разработка, это восстановление логики работы программы без доступа к её исходному коду. Разработчик компилирует исходники в исполняемый файл, а исследователь идёт обратным путём и пытается понять, что именно происходит внутри этого файла.
Само по себе это нейтральная инженерная практика. Её применяют антивирусные лаборатории при разборе вредоносных программ, специалисты по информационной безопасности при поиске уязвимостей, разработчики при восстановлении совместимости с legacy-системами, у которых давно нет ни исходников, ни автора. Проблемой обратная разработка становится тогда, когда её цель — снять лицензионные ограничения, извлечь чужие алгоритмы или встроить в чужой продукт постороннюю функциональность.
Разработчику коммерческого ПО важно понимать общую логику происходящего, чтобы адекватно выстроить защиту. Ниже разбираем её на уровне принципов, без технических деталей.
Зачем применяют реверс-инжиниринг
Целей у нелегального анализа немного, и они довольно предсказуемы.
- Обход лицензионных ограничений. Программа проверяет наличие лицензии, и задача атакующего — сделать так, чтобы результат этой проверки перестал влиять на работу приложения.
- Кража алгоритмов. В расчётных, инженерных, торговых и медицинских программах основная ценность лежит не в интерфейсе, а в математике внутри. Конкурент заинтересован именно в ней.
- Извлечение ресурсов и данных. Тексты, модели, уровни, локализации, учебные материалы, встроенные базы. Всё это тоже интеллектуальная собственность.
- Модификация поведения. Чит-программы в играх, обход ограничений по количеству рабочих мест, снятие проверок целостности.
Как исследуют программы
Статический анализ означает изучение файла без запуска: исследователь смотрит на структуру исполняемого файла, строки, импортируемые функции, пытается восстановить читаемое представление машинного кода. Метод трудоёмкий, но полностью контролируемый и незаметный для разработчика.
Динамический анализ означает наблюдение за программой во время работы: пошаговое исполнение под отладчиком, отслеживание обращений к памяти, сети и файлам, снятие дампов процесса. Так намного быстрее находятся места, где программа принимает решения, но требуется запустить приложение в подконтрольной среде, обычно в виртуальной машине или на изолированном стенде.
На практике оба подхода комбинируют. И именно эта комбинация подсказывает, где ставить барьеры.
Как усложнить реверс-инжиниринг
Полностью исключить обратную разработку невозможно: если код исполняется на устройстве, которым владеет другой человек, у этого человека есть принципиальная возможность его исследовать. Реалистичная цель другая — поднять стоимость атаки выше стоимости легальной лицензии и растянуть её по времени настолько, чтобы к моменту успеха продукт уже обновился.
Работают несколько групп механизмов.
- Обфускация исходного кода. Код преобразуется так, что после компиляции его структура и логика становятся трудночитаемыми при сохранении функциональности. Для проектов на C и C++ это задача StarForce C++ Obfuscator и направления защиты исходного кода.
- Перенос критичных функций в защищённое ядро. Наиболее чувствительные функции удаляются из модуля разработчика и исполняются ядром защиты. Для аналитика это означает, что нужного кода в файле попросту нет, а логика превращается в команды виртуальной машины защиты.
- Защита внутренних переменных. Вместо обычных числовых типов используются защищённые типы из состава API, что заметно усложняет подмену значений в памяти работающего приложения.
- Противодействие среде анализа. Приложение может отказываться работать под отладчиком на пользовательском и системном уровне, в виртуальных машинах и в удалённых терминальных сессиях. Эти параметры настраиваются под сценарий распространения продукта.
- Шифрование данных. Ресурсы и файлы данных шифруются и скрываются в контейнере, а расшифровываются автоматически при обращении из защищённого исполняемого файла.
- Привязка и лицензионный контроль. Даже успешно проанализированная копия остаётся привязанной к конкретному устройству или ключу, а скомпрометированный серийный номер вносится в чёрный список на сервере лицензий.
Как выбрать подход к защите
Разумная последовательность выглядит так. Сначала определите, что именно вы защищаете: бизнес-модель, конкретный алгоритм или контент. От ответа зависит выбор инструмента, потому что защита лицензии и защита алгоритма решаются разными средствами.
Затем оцените, где находится ценность продукта. Если она в уникальной математике, приоритет отдаётся обфускации и переносу функций в ядро защиты. Если в объёме продаж массового продукта, на первый план выходят лицензирование и привязка.
Далее выберите уровень. В StarForce ProActive есть версия Pro с настраиваемым набором функций и версия Elite с максимальным уровнем, для которой возможна отдельная гарантия на защиту от взлома на оговорённый срок. Внедрение возможно как своими силами через бесплатную StarForce Protection Studio, так и силами специалистов компании, вплоть до варианта без внесения изменений в код продукта. Лицензия на защиту ПО на шесть месяцев стоит 24 840 рублей, дальнейшие условия зависят от тиража серийных номеров.
Наконец, заложите в план обновления. Защита — это не разовая операция, а процесс: продукт, который не обновлялся годами, рано или поздно теряет актуальность защиты. Общий обзор направления собран в разделе защиты программ и компьютерных игр, а нестандартные задачи закрывает заказная разработка.

