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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 19.11.2013
Размер файла 505,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Статическое устранение мёртвого кода (dead-code elimination), имеет целью выявить в программе код, который выполняется, но не оказывает влияние на результат работы программы.

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

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

Статический анализ доменов (domain analysis) является расширением алгоритма продвижения констант. Он позволяет определить множество значений, которые может принимать данная переменная в данной точке программы, если это множество не велико.

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

Статистический анализ покрытия базовых блоков программы позволяет установить, выполнялся ли когда-либо при выполнении программы на заданном множестве наборов входных данных заданный базовый блок.

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

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

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

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

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

2. Анализ запутанных программ

В данном разделе мы сопоставим методы запутывания, описанные в разделе 1 Приложения, и методы анализа программ, рассмотренные в разделе 6. На основании этого сопоставления вводится новая мера устойчивости запутывающих преобразований, а именно.

Таблица 1.1. Методы запутывания программ и методы, которые могут применятся для их анализа.

Метод запутывания

Метод распутывания

искажение имён переменных

переименование переменных

использование специфических языковых конструкций

упрощение специфических языковых конструкций

развёртка цикла

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

использование уникальных переменных в базовых блоках

продвижение копий (статическое и статистическое), минимизация количества используемых переменных

введение детерминированного диспетчера

статистическое восстановление графа потока управления

введение недетерминированного диспетчера

сравнение трасс, полученных на одном и том же наборе входных данных

переплетение кода нескольких базовых блоков в один запутанный базовый блок

статистическое устранение мёртвого кода

введение непрозрачных предикатов

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

все методы

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

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

Таблица 1.2. Классификация запутывающих преобразований

Преобразование

Сложность распутывания (необходимый тип анализа)

Автоматизируемость (тип распутывателя)

Удаление комментариев

Одностороннее преобразование

нет

Переформатирование программы

Синтаксический

автомат.

Удаление отладочной информации

Одностороннее преобразование

нет

Изменение имён идентификаторов

Синтаксический

полуавтомат.

Языково-специфические преобразования

Синтаксический

автомат.

Открытая вставка функций

Одностороннее преобразование

поддерж.

Вынос группы операторов

Синтаксический

автомат.

Непрозрачные предикаты и выражения

Синтаксический - статистический (зависит от вида предиката)

автомат. - поддерж.

Внесение недостижимого кода

Зависит от стойкости непрозрачных предикатов

автомат., полуавтомат.

Внесение мёртвого кода

Синтаксический - статистический

автомат., полуавтомат.

Внесение избыточного кода

Синтаксический - статистический

автомат., поддерж.

Внесение несводимости в граф

Статический, но зависит от стойкости непрозрачных предикатов

автомат., полуавтомат.

Устранение библиотечных вызовов

Одностороннее преобразование

поддерж.

Переплетение функций

Статический - статистический

автомат. - поддерж.

Клонирование функций или базовых блоков

Статический

автомат. - поддерж.

Развёртка циклов

Одностороннее преобразование

поддерж.

Разложение циклов

Статический

автомат. - поддерж.

Введение диспетчера

Статический - статистический

автомат., полуавтомат.

Локализация переменных в базовом блоке

Статический - статистическийе

автомат., полуавтомат.

Расширение области действия переменных

Статический - статистический

автомат., полуавтомат.

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

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

Размещено на Allbest.ru


Подобные документы

  • Средства интегрированной среды Microsoft Visual Studio, предоставляемые программисту для реализации программ на языке С++. Особенности стиля написания программ. Типовые приемы и методы создания и отладки программ. Листинги программ и их тестирование.

    лабораторная работа [814,3 K], добавлен 26.05.2013

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

    контрольная работа [19,6 K], добавлен 04.10.2011

  • Эволюция вирусных систем. Проблема вредоносных программ - рекламных и шпионских. Компьютерный вирус как разновидность компьютерных программ. Шпионское программное обеспечение. Признаки заражения компьютера вирусом. Методы защиты от вредоносных программ.

    реферат [35,9 K], добавлен 19.10.2010

  • История развития вирусов и антивирусов. Классификация антивирусных программ. Методы работы антивирусных программ. Другие методы работы антивирусных программ. Сравнение антивирусов: SymantecNortonAntivirus 2005; антивирус Касперского Personal; DoctorWeb.

    реферат [28,8 K], добавлен 22.06.2019

  • Обзор существующих моделей параллельного программирования, основные средства отладки эффективности MPI-программ, общие проблемы всех средств трассировки. Создание экспериментальной системы отладки эффективности MPI-программ, этапы работы анализатора.

    дипломная работа [767,2 K], добавлен 14.10.2010

  • Общие сведения, понятие и разновидности компьютерных вирусов. Создание компьютерных вирусов как вид преступления. Пути проникновения вирусов и признаки появления их в компьютере. Антивирусные средства. Сравнительный анализ антивирусных программ.

    курсовая работа [40,0 K], добавлен 03.06.2009

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

    презентация [976,8 K], добавлен 21.05.2019

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

    курсовая работа [29,2 K], добавлен 28.11.2010

  • Характеристика предприятия ТОО "Com Sales Group". Составление программ на языке программирования. Составление алгоритмов, разработка численных методов решения задач. Методы откладки программ. Анализ технологии машинной обработки экономической информации.

    отчет по практике [1,3 M], добавлен 19.04.2016

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

    реферат [22,4 K], добавлен 26.03.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.