ДонНТУ > Портал магистров ДонНТУ

Переключиться на русский вариант Switch to the English version Перемикнутися на український варіант

Заглавная страница

Библиотека

Ссылки

Отчет о поиске

Индивид. задание


Противенский Денис Михайлович

Исследование и разработка методов защиты программных продуктов и обфускации кода

АВТОРЕФЕРАТ

Введение

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

Существует четыре основных класса запутывающих преобразований:

  1. Лексическая обфускация.
  2. Обфускация структур данных.
  3. Обфускация графа потока управления.
  4. Превентивная обфускация.

Рис. 1. Классификация запутывающих преобразований (5 кадров, размер 36,8 Кб).

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

Обфускация структур данных - изменение структуры данных, с которыми работает программа. В нее входят:

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

Обфускация графа потока управления изменяет граф потока управления одной функции или программы в целом. Она может приводить к созданию в программе новых функций. Это самый обширный класс запутывающих преобразований. Некоторые методы обфускации графа потока управления:

  • введение детерминированного диспетчера - блока, который будет получать управление после выполнения ряда операторов и продолжать выполнение алгоритма по заданному условию, переходя на другие блоки выполнения. Диспетчер полностью контролирует ход алгоритма, с помощью такого диспетчера преобразуется граф потока управления;
  • открытая вставка функций, которая заключается в том, что тело функции подставляется в точку вызова функции;
  • вынос группы операторов. Данное преобразование является обратным к предыдущему и хорошо дополняет его;
  • переплетение функций. Идея этого запутывающего преобразования в том, что две или более функций объединяются в одну функцию;
  • развёртка циклов - тело цикла размножается два или более раз, условие выхода из цикла и оператор приращения счётчика соответствующим образом модифицируются.

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

Актуальность темы

Запутывание исходного кода является относительно новым направлением в современной вычислительной технике. Оно появилось с развитием глобальной сети Интернет как защита от "компьютерного пиратства". Первые статьи об обфускации были опубликованы в 1996-1997 г.г. в США, где и поныне уровень развития этой области знаний является ведущим в мире.

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

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

Цели и задачи

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

  1. Рассмотрение и анализ существующих методов обфускации, их классификация.
  2. Изучение вопросов оптимизирующих преобразований компиляторов и принципов работы с графами потоков управления и данных программ.
  3. Создание алгоритма, выполняющего запутывающие преобразования и удовлетворяющего поставленным критериям оптимальности.
Предполагаемая научная новизна

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

Экспериментальные исследования

Разработанный метод должен быть реализован на языке программирования C++ и опробован на тестовых исходных файлах программ. Полученные результаты работы будут подвергнуты анализу с целью получения эмпирических значений основных показателей эффективности данного метода.

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

Обзор результатов и выводы

На данном этапе изучены и систематизированы основные теоретические сведения о методах обфускации, исследованы области разработки новых методов.

Рассмотрены вопросы запутывания для процедурных и объектно-ориентированных языков программирования (типа C/C++, Java), причем подобных методов наибольшее количество и они связаны с заменой стандартных конструкций языка эквивалентными, но более сложными для понимания и разбора.

Изучены методы запутывания данных в программах (массивов, классов, абстрактных типов данных).

Также уделено внимание работам по созданию алгоритмов запутывания для языков программирования низкого уровня (типа Assembler и других).

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

Список литературы
  1. Christian Collberg, Clark Thomborson, and Douglas Low. A taxonomy of obfuscating transformations. Technical Report 148, Department of Computer Science, University of Auckland, July 1997.
  2. Christian Collberg, Clark Thomborson, and Douglas Low. Manufacturing cheap, resilient, and stealthy opaque constructs. In SIGPLAN-SIGACT POPL'98. ACM Press, San Diego, CA, January 1998.
  3. Boaz Barak, Oded Goldreich, Russel Impagliazzo, Steven Rudich, Amit Sahai, Salil Vadhan, Ke Yang. On the (im)possibility of obfuscating programs, Advances in Cryptology - CRYPTO'01, Springer Lecture Notes in Computer Science vol. 2139, pp. 1 - 18, Santa Barbara, CA, November 2001.
  4. Ахо А., Сети Р., Ульман Д. - Компиляторы: принципы, технологии и инструменты. : Пер. с англ. - М.: Вильямс, 2003 г. - 768 с.
  5. Ахо А., Ульман Д. - Теория синтаксического анализа, перевода и компиляции. В 2-х т. : Пер. с англ. - М.: Мир, 1978 г.

Заглавная страница

Библиотека

Ссылки

Отчет о поиске

Индивид. задание

ДонНТУ > Портал магистров ДонНТУ