Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ1 Обфускация.doc
Скачиваний:
3
Добавлен:
21.09.2019
Размер:
699.9 Кб
Скачать

Московский Авиационный Институт

(Государственный Технический Университет)

Лабораторная работа по дисциплине «Методы защищенного доступа к распределенным информационным ресурсам»

на тему:

Обфускация”

Выполнил студент 4 курса

Группа№_________942________________

Студент:_Савельев А.М._____________

(фамилия и инициалы)

Принял:_______Боровков А.В.__________

Оценка:_____________________________

(дата, подпись, преподавателя)

Серпухов-2009

Цели:

  1. Получить теоретические навыки по методам обфускации, и способам ее применения.

  2. Получить практические навыки при работе с приложениями обфускаторами.

  3. Выяснить положительные и отрицательные стороны обфускации.

  4. Сделать выводы.

Что такое обфускация?

[обфускацией] (от английского obfuscation — буквально «запутывание») называется совокупность методик и средств, направленных на затруднение анализа программного кода.

Существуют различные типы обфускаторов: одни занимаются интерпретируемыми языками типа Perl или PHP и «корежат» исходные тексты (удаляют комментарии, дают переменным бессмысленные имена, шифруют строковые константы и т.д.), другие «перемалывают» байт-код виртуальных машин Java и .NET, что технически сделать намного труднее. Более развитые обфускаторы вламываются непосредственно в машинный код, «разбавляя» его мусорными инструкциями и выполняя целый ряд структурных (реже математических) преобразований, изменяющих программу до неузнаваемости.

РАЗНОВИДНОСТИ ЗАЩИТЫ

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

ЗАЩИТА: ИЗМЕНЕНИЕ СТРУКТУРЫ ПРОГРАММЫ

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

ЗАЩИТА: ИЗМЕНЕНИЕ ПОТОКА УПРАВЛЕНИЯ

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

Допустим, в коде есть два функциональных блока A и B, которые выполняются безусловно и последовательно.

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

1-ый СПОСОБ

Между блоками A и B внедряется условный блок IF, одна из логических веток (при ложном условии) которого идет в обход блока B. Но условие в блоке IF всегда заведомо "истина", поэтому приложение выполняется корректно. Ложное ветвление необходимо, чтобы сбить с толку декомпилятор и усложнить анализ кода после декомпиляции.

2-ой СПОСОБ

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

B'

3-ий СПОСОБ

Из блока B клонируется два блока B' и B" аналогично предыдущему способу, но в блок B" вносятся фатальные изменения, после которых блок B" работает некорректно. При этом в блоке IF всегда генерируется условие для выбора ветви с B'. Вместо блока B" может быть подставлен совершенно любой функциональный блок, не имеющий никакого отношения к данной программе. Декомпилятор этого все равно не знает.

B'

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