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

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

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

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

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

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

 

Список использованных источников:

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

2. T. J. McCabe. Design complexity measurement and testing. Communications of the ACM, 32:1415–1425, 1989.