Метод и средства защиты исполняемого программного кода от динамического и статического анализа


Результаты защиты при помощи сети Петри и анализ производительности


Download 482 Kb.
bet18/20
Sana18.06.2023
Hajmi482 Kb.
#1555637
TuriРеферат
1   ...   12   13   14   15   16   17   18   19   20
Bog'liq
Аранов, Владислав Юрьевич

Результаты защиты при помощи сети Петри и анализ производительности


защищенного кода


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

  • размер исполняемого файла;

  • время выполнения программы;

  • количество кода, получаемого при обфускации исходного объектного файла.

В качестве защищаемого объекта была выбрана программа, реализующая итеративное вычисление факториала. Ставилась задача защитить функцию, содержащую основной алгоритм. Характеристики соответствующего исполняемого файла приведены в Таблице 4.2.
Таблица 4.2


Характеристики исходного файла

Характеристики

Исходный файл

Размер исполняемого файла (Кб)

27

Время выполнения (мс)

0.00437


109





Количество кода (строки)


5


При построении сети Петри следующие параметры сети могут варьироваться:

Постоянной величиной является количество целевых значений сети: оно равняется количеству констант, которые находится в максимальном BasicBlock. Обозначим эту величину через N. Остальные параметры сети будем выражать через N. При изменении одного из параметров два другие будем фиксировать.
Зафиксируем количество раундов сети и метки со случайными значениями. Пусть эти величины равны соответственно N+2 и N. Таблица 4.3 иллюстрирует, как меняются основные характеристики защищенного исполняемого файла при изменении количества узлов сети.


Таблица 4.3
Характеристики защищенного исходного файла при изменении количества узлов сети




N/2

N

N + 2

N * 2

Размер исполняемого файла (Кб)

34

35

32

42

Время выполнения (мс)

0.00981

0.0104

0.00948

0.0263

Количество кода (строки)

86

98

64

347


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


Характеристики защищенного исходного файла при изменении количества раундов сети




N/2

N

N + 2

N*2

Размер исполняемого файла (Кб)

28

29

47

39

Время выполнения (мс)

0.00487

0.00593

0.0318

0.0221

Количество кода (строки)

32

58

402

328


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


но





Проследим, как меняются основные характеристики защищенного исполняемого файла при изменении количества меток сети, содержащих случайные значения. Количество раундов сети положим N + 2, а количество узлов сети N * 2 (таблица 4.5).


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




N/2

N

N + 2

N * 2

Размер исполняемого файла (Кб)

31

45

38

-

Время выполнения (мс)

0.00891

0.0301

0.0205

-

Количество кода (строки)

58

386

311

-


Если случайными значениями заполнить N * 2 и более узлов сети, то сеть не будет выполнена. То есть целевые значения не будут получены. Наилучшие результаты получаются, если количество меток, заполненных случайными значениями, равно количеству целевых значений сети.
Отсюда получаем оптимальные настройки сети Петри для защиты исходного кода, который содержит N целевых значений. При таких настройках максимально увеличивается количество кода в исполняемом файле, что затрудняет анализ при реинжиниринге. В тоже время не происходит существенного увеличения размера исходного файла и времени его выполнения (таблица 4.6).
Таблица 4.6


Оптимальные значения параметров сети Петри

Характеристика

Значение

Количество узлов сети

N*2

Количество раундов

N + 2

Метки сети со случайными значениями

N


Так как изначально ставилась цель защиты исходного файла от дисассемблирования, то важно проследить, как изменяется блок-схема программы, которую можно получить с помощью распространенных отладочных инструментов.
В качестве такого инструмента был выбран IDA Pro Disassembler (англ. Interactive DisAssembler) — интерактивный дизассемблер, который широко используется для обратного проектирования. На рисунке 4.4 приведена блок-схема исходного исполняемого файла, полученная с помощью IDA Pro. На ней легко можно различить цикл и проверки, соответствующие вычислению факториала.


111




sub 411380:

push

ebp

mov

ebp, esp

sub

esp, 0D8h

push

ebx

push

esi

push

edi

lea

edi, [ebp+var_D8]

mov

ecx, 36h

mov

eax, OCCCCCCCCh

rep stosd

mov

[ebp+var_8], 1

mov

[ebp-bvar_14], 1

jmp

short loc_4113B7








lac 4113CB:

mov

eax, [ebp+var_8]

pop

edi

pop

esi

pop

ebx

mov

esp, ebp

pop retn

ebp


Рисунок 4.6 - Блок-схема исходной процедуры
На рРисунок 4.6 приведена блок-схема защищенного исполняемого файла, который всё также вычисляет факториал. На ней циклы и условия, которые, несомненно, присутствуют в коде, совсем неочевидны.


112







Рисунок 4.7 - Блок-схема защищенной процедуры
Рисунок 4.6 и рРисунок 4.7 иллюстрируют, как меняется граф (блок-схема) исходного файла в процессе обфускации, и как сильно эти изменения затрудняют анализ кода.


113




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

    1. Структура инструментального средства защиты программного кода

Прототип модуля инструментального средства защиты исполняемого кода от обратного проектирования имеет модульную структуру, представленную на рРисунок 4.4.6.
В данную структуру сходят следующие модули:

  1. Модуль захвата машинного кода представленного в форматах COFF и ELF

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

  3. Модуль создания виртуальной машины

  4. Модуль сборки выходных данных состоящий из:

  • модуля компиляции байткода защищаемого алгоритма

  • создания интерпретатора виртуальной машины

  • защиты кода интерпретатора виртуальной машины

  1. Модуль генерации и защиты кода

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

  3. Интерфейс программного прототипа

На рРисунок 4. 4.8 показана общая схема защиты исполняемых файлов прототипом протектора и проиллюстрирована многоплатформенность данного решения.
Сначала исполняемый файл дизассемблируется и транслируется в специальное промежуточное представление, зависимое от архитектуры процессора. Полученный код транслируется в машинно-независимое промежуточное представление (Intermediate Representation), затем, на основе входных пользовательских параметров и входных данных строится виртуальная машина, включающая интерпретатор для ее исполнения. И, наконец, новый код вместе с виртуальной машиной преобразуется в машинный код и записывается в новый машинно-зависимый исполняемый файл.
В том случае, если требуется защита иполняемого или динамически компонуемого объекта, то полученный защищенный файл необходимо обработать компановщиком с соотвествующими настройками длоя получения исполняенмого , динамически подключаемого (dll) или разделяемого (so) модуля.


114


Процесс защиты




! ' о d






Download 482 Kb.

Do'stlaringiz bilan baham:
1   ...   12   13   14   15   16   17   18   19   20




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling