Сочнева Е.В.
Белорусский государственный университет информатики и радиоэлектроники, Беларусь

Запутывающее кодирование программного обеспечения с целью его защиты

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

Существует три вида атак на ПП: воровство (piracy), обратная инженерия (reverse engineering) и модификация кода (code modification). В большинстве случаев, для осуществления атаки взломщику требуется изучить принцип работы кода программы –  этот процесс изучения называется процессом обратной инженерии (понимания).

Обфускация ("obfuscation" – запутывание) – это одно из достаточно универсальных программных средств (ПС) защиты программного кода, которое позволяет усложнить процесс обратной инженерии кода защищаемого ПП и тем самым значительно повысить временные затраты злоумышленника на проведение атаки.

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

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

С учетом недостатков существующих обфускаторов было разработано новое ПС для обфускации программного кода, в котором путем анализа быстродействия работы и оценки эффективности преобразования были совмещены различные методы лексической обфускации: замена пользовательских имен идентификаторов на неинформативные имена вида «знак подчеркивания – последовательность символов», удаление комментариев и отметок типа #region <имя_функции> и #endregion, использованных в коде для лучшего понимания его функциональности, а также форматирование кода – удаление пробелов и отступов в коде, использованных для лучшего восприятия кода. Разработанное ПС выгодно отличается от ему подобных стоимостью преобразования и выполнения кода после обфускации – запутанная программа в общем случае не увеличивается в объеме и выполняется с той же скоростью. Также ПС определяет оценку целесообразности использования того или иного метода лексической обфускации для исходного кода программы в самом начале работы, путем определения величины процента потенциально запутываемого кода.

 

Литература:

1. Collberg C., Thomborson C., Low D. A Taxonomy of Obfuscating Transformations. – Department of Computer Science, University of Auckland, 1997.

2. Collberg C., Thomborson C. Watermarking, Tamper-Proofing, and Obfuscation – Tools for Software Protection. Technical Report. – Department of Computer Science, University of Arizona, 2000.