Назад в библиотеку

Защита программного обеспечения методом полиморфной генерации кода

Автор: Шудрак М.О., Лубкин И.А.
Источник: Решетневские чтения // Учредители: Федеральное государственное бюджетное образовательное учреждение высшего образования "Сибирский государственный университет науки и технологий имени академика М.Ф. Решетнева" (Красноярск) - с. 566

Аннотация

Шудрак М.О., Лубкин И.А. Защита программного обеспечения методом полиморфной генерации кода. Рассматривается метод защиты программного кода от исследования и модификаций при помощи полиморфной генерации кода.

На сегодняшний день существует и развивается широкий спектр систем и методов защиты программного обеспечения, позволяющих обеспечивать безопасность интеллектуальной собственности. Но вместе с тем совершенствуются и методы взлома таких систем [1].

В основе практически любого метода исследования программного обеспечения лежит предварительное исследование (дизассемблирование) кода, отвечающего за его защиту. Цель такого исследования заключается в том, чтобы реконструировать алгоритм защиты для его последующей модификации и автоматизации процесса взлома.

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

Такой метод значительно затрудняет анализ кода и полностью исключает автоматизацию процесса взлома программы. Но у этого метода существует и ряд недостатков:

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

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

Этап 2. Сравниваются выходные значения каждой инструкции, в случае совпадения осуществляется выход из алгоритма – необходимая инструкция найдена. Если этого не происходит, то переходим к этапу 3.

Этап 3. С помощью методов генетического программирования, таких как селекция, отберем новую популяцию потомков, в 2 раза меньше начальной.

Этап 4. С помощью методов генетического программирования, таких как рекомбинация и мутация, рекомбинируем и получим вторую часть популяции. Перейдем к этапу 2.

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

Список литературы

  1. Панов А. С. Защита программного обеспечения. Спб. : БХВ-Петербург, 2006.