Математические и программные средства обфускации программ | Прикладная дискретная математика. Приложение. 2009. № 1.

Математические и программные средства обфускации программ

The paperpresents an universal representation of computer programs that contains all the necessaryinformation for obfuscation, and the software implementation of the representationis suggested. This representation applies to programs executed in different environmentsand allows to use different analysis methods of programs that must be protected. Also themethod for the code obfuscation by separating data streams is proposed.

Mathematical and software tools for programs obfuscation.pdf Одной из наиболее важных проблем в сфере защиты ПО от нелегального использованияявляется защита от обратной инженерии и несанкционированной модификации.Целью данной работы является анализ подходов к защите программ от исследованияметодами запутывания (обфускации) кода, создание представления компьютерныхпрограмм, содержащего всю необходимую для производимых преобразованийинформацию, и программная реализация данного представления. Такое представлениеприменимо для программ, исполняемых в различных средах, и позволяет решатьширокий спектр задач анализа программ, подлежащих защите.Традиционно запутывающим преобразованием (обфусцирующим преобразованием,или обфускацией) программы неформально называют такое преобразование кодапрограммы, которое, полностью сохраняя функциональность программы, затрудняетеё анализ и возможность модификации [1, 2]. Основная сложность формализации понятиязапутывающего преобразования связана с описанием критериев «затруднения»анализа программы [3]. Задача обфускации - придумать алгоритм, который, получаяна вход некоторую программу P , преобразует её в программу O(P) таким образом, чтокод программы O(P) не должен раскрывать информацию об алгоритмах, параметрахи внутренней структуре программы P.Выделяют три ключевых подхода к применению запутывающих преобразований[4]. В первом случае программа запутывается на её языке программирования так,что P и O(P) - это программы, записанные на том же языке. Второй подход предусматриваетразработку специального языка программирования, не допускающего возможностианализа программ, написанных на нём. В третьем подходе предполагаетсяиспользование промежуточного языка, называемого языком обфускации и предназначенногоисключительно для внесения путаницы в тексты на нём. В данной работепредставлены исследования и разработки, ориентированные на третий подход.Сформулированы следующие требования к языку обфускации: он должен соответствоватьпарадигме объектно-ориентированного программирования, допускать трансляциюиз программ в различных исполняемых кодах и обратную трансляцию в исходноепредставление и позволять в процессе трансляции программы в него производитьсбор и анализ всей необходимой для проведения запутывающих преобразований информации.Язык обфускации, удовлетворяющий этим требованиям, создан и используетсяв практической разработке автоматизированной системы обфускации программ.В рамках практической части работы реализована библиотека программ для запутыванияи анализа программного кода, состоящая из трех компонентов. Задача первогокомпонента - трансляция входной программы из языка исполняемого кода вязык обфускации. Второй компонент - непосредственно обфускатор, реализующийзапутывающие преобразования для программы на языке обфускации. Кроме того, обфускаторв наглядном виде представляет полученную аналитическую информацию,содержащуюся в описании программы. Третий компонент выполняет обратную трансляциюпрограммы в язык исполняемого кода.Внутреннее представление программы на языке обфускации содержит большое количествоаналитической информации. Для представления этой информации в удобномдля исследователя виде в системе используется визуализация графов потоков управления и потоков данных. Реализована возможность построения подграфов по заданнымкритериям. Таким образом, система может использоваться и как деобфускатор [5, 6].Разработан и реализован метод запутывания программ - метод обфускации поданным. Он является комбинацией и модификацией существующих методов запутыванияи обладает уникальными свойствами. Суть метода следующая.В графе вызовов функций программы по некоторому заданному критерию выбираетсяпоток управления, соединяющий две смежные вершины графа. Соответствующийпоток данных из вызывающей функции (функция A) в вызываемую (функция B) разбиваетсяна N потоков таким образом, что через разные образованные потоки проходятданные, принимающие значения из непересекающихся диапазонов. Далее создаются Nкопий функции B (Bj, i = 0 ,1 ,... , N - 1), и вызывающая функция модифицируетсятаким образом, чтобы каждый из образованных потоков данных направлялся в отдельнуюкопию функции B. На этом этапе происходит и образование новых потоковуправления: управление из функции A может быть передано на любую из функций В^.Поскольку диапазоны допустимых значений разных потоков данных не пересекаются,то формируется однозначное отображение из множества диапазонов {Ij :j = 0 ,1 ,... , N - 1} значений данных в множество функций {B j}. В каждую функциюBj внедряется проверка на принадлежность входного аргумента интервалу I j.Если результат проверки - истина, то далее работа программы продолжается без изменений.При отсутствии внешних воздействий (со стороны исследователя программы)результат проверки всегда будет равен истине. Однако, если проверка вернет значениеложь (воздействие со стороны исследователя), то для противодействия исследователюнужно каким-либо образом нарушить правильное функционирование программы,например изменить значения в произвольных потоках данных или передать управлениена некоторую функцию, которая в нормальных условиях не должна получитьуправление. Таким образом, исследователь не может произвольно изменить значениеданных в рассматриваемом потоке и, чтобы пройти по всем функциям B j, ему нужноперебрать все диапазоны значений. Следовательно, программа должна бытьзапущенакак минимум N раз, и время исследования возрастает в N раз.Данный метод предназначен для применения в комбинации с другими методамиобфускации, затрудняющими обнаружение схожей функциональности функций B j.

Ключевые слова

Авторы

ФИООрганизацияДополнительноE-mail
Поздеев Анатолий ГеннадьевичТомский государственный университетаспирантanatoliy.pozdeev@vitasw.com
Кривопалов Владимир НиколаевичЗАО «ВериСофт», г. Томскинженер-программистvladimir.krivopalov@gmail.com
Ромашкин Евгений ВикторовичТомский государственный университетаспирантe.v.romashkin@gmail.com
Радченко Егор ДмитриевичТомский государственный университетстудентtalar@sibmail.com
Всего: 4

Ссылки

Collberg C., Thomborson C., Low D. Manufacturing cheap, resilient, and stealthy opaque constructs / / Proc. Symp. Principles of Programming Languages (POPL'98), Jan. 1998.
Collberg C., Thomborson C., Low D. Taxonomy of Obfuscating Transformations. Режим доступа: http://www.cs.arizona.edu/collberg/Research/Publications/ CollbergThomborsonLow97a/index.html, свободный.
Чертов А. В. Исследование и разработка методологии маскировки программ: Дис. канд. физ.-мат. наук. Моск. гос. ун-т им. М. В. Ломоносова. М., 2003. 133 с.
Лифшиц Ю. М. Запутывание (обфускация) программ. Обзор. СПб.: СПб. отд. Мат. инст. им. В. А. Стеклова РАН, 2004. Режим доступа: http://logic.pdmi.ras.ru/~yura/of/ survey1.pdf, свободный.
Чертов А. В. Анализ запутывающих преобразований программ / Библиотека аналитической информации [Электронный ресурс]. Режим доступа: http://www.citforum.ru/ security/articles/analysis/, свободный.
Barak B., Goldreich O., Impagliazzo R. et al. On the (Im)possibility of Obfuscation Programs / / LNCS. 2001. V. 2139. P. 1-18.
 Математические и программные средства обфускации программ | Прикладная дискретная математика. Приложение. 2009. № 1.

Математические и программные средства обфускации программ | Прикладная дискретная математика. Приложение. 2009. № 1.