4566

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

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

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

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

Русский

2012-11-22

23.15 KB

31 чел.

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

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

Задание:

  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],. Разложение циклов состоит в том, что цикл с сложным телом разбивается на несколько отдельных циклов с простыми телами и с тем же пространством итерирования.

Литература.

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


 

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

34093. Договор аренды земельных участков 34 KB
  Договор аренды земельных участков. В основе аренды лежит договор. По договору аренды одна сторона арендодатель обязуется передать другой стороне арендатору земельный участок во временное владение или и пользование за плату. Заключается договор аренды в простой письменной форме.
34094. Договор дарения земельного участка. Наследование земельных участков 32 KB
  Договор дарения земельного участка. Право дарения земельного участка имеют собст ДАРЕНИЕ венники земли граждане и юридические лица ЗЕМЕЛЬНОГО на основании Указа Президента РФ О регули УЧАСТКА ровании земельных отношений и развитии аг рарной реформы в России п. Для обеспечения заключения договоров дарения так же как и договоров мены Комитетом РФ по земельным ресурсам и землеустройству была разработана форма договора дарения земельного участка1. Договор дарения земельного участка должен быть оформлен...
34095. Общая долевая собственность на земельные участки 63.5 KB
  Право общей долевой собственности на земельный участок 1 возникает на основе юридических фактов обусловливающих право собственности граждан и юридических лиц. Право собственности на земельные доли предметом рассмотрения в данной статье не является. Право частной собственности на землю. N 13051 О собственности в СССР но которые не были надлежаще оформлены и зарегистрированы имеют право бесплатно приобрести право собственности на указанные земельные участки в соответствии с правилами установленными ст.
34096. Общая совместная собственность на земельные участки 26.5 KB
  Общая совместная собственность на земельные участки. Общая собственность на земельные участки Существует 2 вида: долевая; общая совместная. Общая долевая собственность возникает при попадании двум и более лицам неделимого участка в случаях предусмотренных в законе или договоре. Совместная собственность возникает в следующих случаях прямо предусмотренных законами: общая собственность супругов если брачным контрактом не предусмотрено иное; возникает собственность крестьянскофермерских хозяйств если соглашением между членами...
34097. Изъятие (выкуп) земельных участков для государственных и муниципальных нужд: основания, порядок 62.5 KB
  Следует иметь в виду что предполагаемое назначение объекта должно соответствовать полномочиям органа принимающего решение об изъятии земельного участка. Например решение об изъятии земельного участка для целей связанных с защитой Государственной границы России может быть принято только органами государственной власти Российской Федерации согласно п. Данное обстоятельство по сути означает что в случае возникновения судебного спора орган принявший решение об изъятии земельного участка должен будет представить суду убедительные...
34098. Право ограниченного пользования чужим земельным участком (сервитут). Обременения земельного участка 33 KB
  Обременения земельного участка. Однако возможно рассмотрение сервитута в качестве обременения земельного участка.С точки зрения собственника земельного участка который соседи используют для прохода к водоему сервитут является ограничением его права. Публичные сервитуты могут устанавливаться для:1 прохода или проезда через земельный участок;2 использования земельного участка для ремонта коммунальных инженерных электрических и других линий и сетей а также транспортной инфраструктуры;3 размещения на участке межевых и геодезических знаков...
34099. Право пользования земельным участком собственником недвижимости. Последствия утраты собственником недвижимости права пользования земельным участком 93 KB
  В случае когда земельные участки находящиеся в государственной или муниципальной собственности предоставляются за плату наряду с решением органа государственной власти или местного самоуправления о предоставлении земельного участка юридический состав образует также договор куплипродажи земельного участка. При наследовании земельного участка по наследству переходят также находящиеся в границах этого земельного участка поверхностный почвенный слой замкнутые водоемы находящиеся на нем лес и растения. Раздел земельного участка...
34100. Права и обязанности субъектов, использующих землю. Защита их прав 52.5 KB
  Взаимосвязанные между собой права и обязанности субъектов земельных правоотношений составляют суть содержания любого правоотношения. Права субъектов земельных правоотношений можно классифицировать на две основные группы: 1. Право на действия субъектов земельных правоотношений можно подразделить на: а виды действий. Право на бездействие субъектов земельных правоотношений можно подразделить на: а полное бездействие.
34101. онятие и особенности ответственности в области использования и охраны земель 25.5 KB
  Ответственность за земельные правонарушения. Ответственность нужно понимать в двояком смысле: юридическая ответственность как правовой институт в объективном смысле это совокупность юридических норм устанавливающих неблагоприятные последствия за совершение правонарушения в области использования и охраны земель и порядок их возложения на правонарушителя; в субъективном смысле юридическая ответственность это обязанность лица виновного в совершении правонарушения претерпеть неблагоприятные последствия предусмотренные законом...