4566

Запутывающие преобразования в программировании

Лабораторная работа

Информатика, кибернетика и программирование

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

Русский

2012-11-22

23.15 KB

30 чел.

Запутывающие преобразования

Цель работы: научится программировать средства затрудняющие изучение программ.

Задание:

  1.  Изучить основные методы обфускации.
  2.  По заданию преподавателя запрограммировать один из методов.
  3.  Провести оценку запутывания.
  4.  Написать отчет.
  5.  Защитить у преподавателя.

Методы обфускации для реализации

  1.  Преобразование типов
  2.  Форматирование текста
  3.  Внесение мертвого кода
  4.  Внесение бесполезного кода

Качество обфускации

Качество преобразований осуществляемых в процессе обфускации определяется с помощью следующих критериев:

  1.  Эффективность: Насколько программа становится нечитабельной.
  2.  Устойчивость: Насколько сложно взломать программу автоматизированными средствами деобфускации.
  3.  Прозрачность: Насколько хорошо обфусцированный код взаимодействует с остальным кодом.
  4.  Стоимость: Насколько велик объем избыточного кода в обфусцированном приложении.

Основные методы запутывания программ

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

  1.  Преобразования форматирования, которые изменяют только внешний вид программы. К этой группе относятся преобразования, удаляющие комментарии, отступы в тексте программы или переименовывающие идентификаторы.

  1.  Преобразования структур данных, изменяющие структуры данных, с которыми работает программа. К этой группе относятся, например, преобразование, изменяющее иерархию наследования классов в программе, или преобразование, объединяющее скалярные переменные одного типа в массив.

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

  1.  Преобразование форматирования

Под преобразованием форматирования или лексической обфускацией понимается:

-  удаление всех комментариев в коде программы или изменение их на дезинформирующие;

- удаление различных пробелов, отступов, которые обычно используют для лучшего визуального восприятия кода программы;

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

-  добавление различных лишних (мусорных) операций;

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

Преобразование структур данных

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

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

Преобразование потока управления

Внесение недостижимого кода (adding unreachable code). Если в программу внесены непрозрачные предикаты видов PF или PT, ветки условия, соответствующие условию "истина" в первом случае и условию "ложь" во втором случае, никогда не будут выполняться. Фрагмент программы, который никогда не выполняется, называется недостижимым кодом. Эти ветки могут быть заполнены произвольными вычислениями, которые могут быть похожи на действительно выполняемый код, например, собраны из фрагментов той же самой функции. Поскольку недостижимый код никогда не выполняется, данное преобразование влияет только на размер запутанной программы, но не на скорость её выполнения. Общая задача обнаружения недостижимого кода, как известно, алгоритмически неразрешима. Это значит, что для выявления недостижимого кода должны применяться различные эвристические методы, например, основанные на статистическом анализе программы.

Внесение мёртвого кода (adding dead code). В отличие от недостижимого кода, мёртвый код в программе выполняется, но его выполнение никак не влияет на результат работы программы. При внесении мёртвого кода запутыватель должен быть уверен, что вставляемый фрагмент не может влиять на код, который вычисляет значение функции. Это практически значит, что мёртвый код не может иметь побочного эффекта, даже в виде модификации глобальных переменных, не может изменять окружение работающей программы, не может выполнять никаких операций, которые могут вызвать исключение в работе программы.

Внесение избыточного кода (adding redundant code). Избыточный код, в отличие от мёртвого кода выполняется, и результат его выполнения используется в дальнейшем в программе, но такой код можно упростить или совсем удалить, так как вычисляется либо константное значение, либо значение, уже вычисленное ранее. Для внесения избыточного кода можно использовать алгебраические преобразования выражений исходной программы или введение в программу математических тождеств. Например, можно воспользоваться комбинаторным тождеством и заменить везде в программе использование константы 256 на цикл, который вычисляет сумму биномиальных коэффициентов по приведённой формуле.

Подобные алгебраические преобразования ограничены целыми значениями, так как при выполнении операций с плавающей точкой возникает проблема накопления ошибки вычислений. Например, выражение sin2x+cso2x при вычислении на машине практически никогда не даст в результате значение 1. С другой стороны, при операциях с целыми значениями возникает проблема переполнения. Например, если использование 32-битной целой переменной x заменено на выражение x * p / q, где p и q гарантированно имеют одно и то же значение, при выполнении умножения x * p может произойти переполнение разрядной сетки, и после деления на q получится результат не равный p. В качестве частичного решения задачи можно выполнять умножение в 64-битных целых числах.

Переплетение функции (function interleaving) Идея этого запутывающего преобразования в том, что две или более функций объединяются в одну функцию. Списки параметров исходных функций объединяются, и к ним добавляется ещё один параметр, который позволяет определить, какая функция в действительности выполняется.

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

Развёртка циклов (loop unrolling) Развёртка циклов применяется в оптимизирующих компиляторах для ускорения работы циклов или их распараллеливания. Развёрка циклов заключается в том, что тело цикла размножается два или более раз, условие выхода из цикла и оператор приращения счётчика соответствующим образом модифицируются. Если количество повторений цикла известно в момент компиляции, цикл может быть развёрнут полностью.

Разложение циклов (loop fission) [5],. Разложение циклов состоит в том, что цикл с сложным телом разбивается на несколько отдельных циклов с простыми телами и с тем же пространством итерирования.

Литература.

Анализ запутывающих преобразований программ Чернов А. В., Труды Института Системного программирования РАН


 

А также другие работы, которые могут Вас заинтересовать

30710. Основные тенденции и итоги развития Европейского Сообщества в 1990-е 23.5 KB
  ЕЕА провозгласил создание Европейского Союза на основе существующих Сообществ и углубление компетенции союза ЕС в области координации экономической валютной социальной политики социальноэкономического сплочения исследований и технологического развития защиты окружающей среды а также развитие европейского сотрудничества в области внешней политики. Амстердамский договор 1997 подтвердил основные цели Союза и дополнил раздел общей внешней политики и политики безопасности. При анализе политики Европейского Союза...
30711. Создание и основные направления деятельности антигитлеровской коалиции 24 KB
  Черчилль и США – Рузвельт заявили о своем желании оказать помощь Сов. Великобритания и США подписывают Атлантическую Хартию о совместных действиях против Гитлера СССР присоединилась к ней. Нападение Японии на США ускорило формирование Антигитлеровской коалиции. В декабре 1941 США официально вступает во 2у мировую войну.
30712. Парижская мирная конференция и ее решения. Версальский мирный договор 24 KB
  Возглавлял конференцию – Климансо присутствовали лидеры ведущих стран ЛлойдДжордж Великобритания Вильсон США и др. Но главные решения принимались в узком кругу сначала пяти государств Франция Великобритания США Италия Япония а затем только трех Франции Великобритании США таким образом сохранялась практика тайной дипломатии т. Американский конгресс не утвердил вступление США в эту организацию. Франция и Италия – за военное давление на Сов России; Великобритания и США – более осторожны за переговоры.
30713. США динамика развития в двухполюсном мире 31 KB
  Вторая мировая война стимулировала быстрое экономическое развитие США. Изменилась отраслевая структура экономики США успешнее решались проблемы занятости населения. В первые послевоенные годы в США была успешно проведена конверсия военного производства. С конца 40х годов устойчивый и непрерывный экономический рост стал отличительной особенностью функционирования экономической системы США.
30714. Противоречия Версальско-Вашингтонской системы международных отношений 26.5 KB
  Франция требовала вернуть им Эльзас и Лотарингию установить контроль за промышленным Рурским районом претендовали на германские колонии в Африке и Средиземноморье и т. Великобритания – хотели сохранить единство Германии установив контроль над её экономикой.
30715. Факторы социальной и политической нестабильности во Франции в 1950-е годы. Конец 4-ой республики (1958 г.) 25.5 KB
  во Франции обострилась проблема инфляции. В этот период во Франции усилились попытки коммунистов дискредитировать американскую помощь или отказаться от нее а партия де Голля Объединение французского народа РПФ желая уберечь страну от коммунизма стремилась к власти и изменению государственного строя.
30716. Развитие социально-политического кризиса в Европе в начале 1920-х гг 22 KB
  : сильный рост промышленного правительства в США Франции в результате 1 мировой войны они обогатились. Основой промышленного подъема был технический прогресс новые технологии новые отрасли автомобили Увеличение концентрации и централизации капитала усиления мощи корпораций смена промышленности и банков – рост финансового капитала. Рост благотворительности для поддержания социальной стабильности.
30717. ФРГ: переход к новой «восточной политике». Договор с СССР от 12 августа 1970 г 27 KB
  Брандт – с 1969 канцлер ФРГ лидер социалдемократов. Подтверждалось что Западный Берлин не является частью территории ФРГ и устанавливался тройной механизм взаимоотношений между компетентными органами ГДР Западного Берлина и ФРГ по вопросам регулирования транзитных перемещений граждан транспортного телефонного и телеграфного сообщения и пр. Но Западный Берлин имел международные соглашения заключенные ФРГ поэтому ФРГ получила право представлять интересы жителей Западного Берлина в международных организациях по вопросам не...
30718. Причины, особенности и основные последствия мирового экономического кризиса 1929 – 1933 гг 23 KB
  Мировой экономический кризис 19291933 годов носивший название Великой депрессии наиболее сильно затронул такие страны как Великобритания США Франция Канада и Германия. Важным фактором обусловившим всемирный характер великой депрессии стал процесс перемещения экономического центра из Западной Европы в США. Последствиями Великой депрессии стали: ухудшение уровня жизни фермеров и мелких торговцев; уменьшение уровня производства; рост числа безработных; возрастание сторонников фашистских организаций.