Помощь в написании студенческих работ
Антистрессовый сервис

Определение обфускатора. 
Надежность и безопасность программного обеспечения

РефератПомощь в написанииУзнать стоимостьмоей работы

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

Определение обфускатора. Надежность и безопасность программного обеспечения (реферат, курсовая, диплом, контрольная)

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

Новая программа — обфускатор 0(Р) должен удовлетворять следующим двум условиям:

  • 1) условию функциональности. Обфускатор О (Р) должен вычислять ту же функцию, что и программа Р;
  • 2) условию (свойство) «виртуального черного ящика». Все, что может быть вычислено эффективным образом из обфускатора О (Р), может быть эффективно вычислено при доступе к программе Р, как «черному ящику». Иными словами, всякий анализ обфусцированной программы на основе ее текста должен быть не более плодотворен, чем проведение тестовых испытаний программы без доступа к ее тексту.

Методы обфускации

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

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

В зависимости от способа модификации кода программы различают:

  • • лексическую обфускацию;
  • • обфускацию структур данных;
  • • обфускацию потока управления;
  • • превентивную обфускацию.

Кратко охарактеризуем вышеназванные методы.

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

Обфускация этого вида включает:

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

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

  • • обфускация хранения;
  • • обфускация соединения;
  • • обфускация переупорядочивая™.

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

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

  • объединение переменных. Две или более переменных v1; …, vk могут быть объединены в одну переменную V, если их общий размер (v1; …, vk) не превышает размера переменной V;
  • реструктурирование массивов заключается в запутывании структуры массивов путем разделения одного массива на несколько подмассивов или объединения нескольких массивов в один путем сворачивания массива (уменьшая его размерность) или, наоборот, разворачивания (увеличивая его размерность).

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

Обфускация потока управления изменяет последовательности выполнения программного кода (потока управления). Существует несколько способов данного вида обфускации:

  • • добавление недостижимого кода;
  • • добавление «мертвого» кода;
  • • добавление избыточного кода;
  • • «переплетение» функций;
  • • «клонирование» функций;
  • • развертка циклов;
  • • распараллеливание кода;
  • • устранение библиотечных вызовов.

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

Добавление «мертвого» кода. «Мертвый» код, в отличие от недостижимого, выполняется в ходе работы программы, но не влияет на результат работы программы. При внесении «мертвого» кода программист должен быть уверен, что фрагмент, который он собирается вставить, не повлияет на код, который вычисляет значение той функции, в которую он был добавлен.

Добавление избыточного кода. В отличие от «мертвого» кода, избыточный код выполняется, и результат его выполнения в дальнейшем используется в программе, но такую конструкцию можно упростить или совсем удалить, так как вычисляется либо константное значение, либо значение, которое уже было вычислено ранее.

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

«Клонирование» функций. В процессе обратной инженерии функций в первую очередь изучается сигнатура функции, а также то, как эта функция используется, т. е. в каких местах программы она вызывается, какие параметры применяет на входе и на выходе и при какой комбинации действий она вызывается. Процесс анализа контекста использования функции можно затруднить, если каждый последующий вызов некоторой функции будет выглядеть как вызов другой, каждый раз новой, функции. Также может быть создано сразу несколько «клонов» одной функции, и к каждому из таких «клонов» будет применяться разный набор запутывающих преобразований.

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

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

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

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

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

Показать весь текст
Заполнить форму текущей работой