Метод и средства защиты исполняемого программного кода от динамического и статического анализа
Download 482 Kb.
|
Аранов, Владислав Юрьевич
- Bu sahifa navigatsiya:
- Создание виртуальной машины и общая схема защиты исполняемого файла
- Классы используемых виртуальных машин
- Стековые и регистровые виртуальные машины
- RISC — CISC виртуальные машины
Защищенный исполняемый файл Рисунок 2.2 - Исполняемый файл и соответствующий защищенный файл
При создании конкретной виртуальной машины необходимо выполнить следующие этапы:
25
Для виртуальной машины должен быть определён способ её использования, то есть:
Рассмотрим еще раз, что представляет собой виртуальная машина. Она состоит из интерпретатора, исполняющего последовательность известных ему команд и имеющего доступ к области памяти для хранения данных. Одним из наиболее эффективных, с точки зрения защиты, полезных способов усложнения виртуальных машин является вызов одной виртуальной машины из другой. При его реализации вызываемые и вызывающие виртуальные машины могут как совпадать, так и существенно различаться по своей структуре. В наборе команд той виртуальной машины, из которой происходит вызов, выделяется команда или команды для порождения и вызова другой виртуальной машины. Порождённая машина получает ссылки на своё поле данных и последовательность команд, после чего запускается. Поведение вызывающей машины при этом может варьироваться: либо ожидание завершения вызванной машины, либо продолжение своего выполнения без ожидания завершения вызванной. Следует отметить, что вызовы могут быть многократно вложенными. При этом вызвавшая машина после осуществления вызова блокируется до окончания работы вызванной, после чего продолжает своё выполнение. Таким образом, можно задавать глубину виртуализации кода путем задания многократного запуска протектора.
Все многообразие виртуальных машин, которое строится генератором виртуальных машин, можно разделить на следующие классы:
г ‘
26
Эти классы виртуальных машин полны по Тьюрингу т.е. на них можно реализовать любую вычислительную функцию. Рассмотрим их подробнее.
Стековые виртуальные машины Этот класс виртуальных машин определяется организацией регистрового файла в виде стека, и косвенной адресацией регистров через указатель стека, который определяет положение вершины стека [12]. Операции производятся над значениями на вершине стека, и результат кладётся также на вершину. Все команды используются без операндов, поэтому арифметические операции кодируются в нуль-операндные инструкции. Например, команда sub (вычесть) берет с вершины стека два числа, вычитает первое из второго и результат вталкивает в стек. Разумеется, до этого необходимые значения вставляются в стек. Отдельной команды, которая кладет в стек значение переменной, или константу нет. Переменная или константа сама является командой вставки этой константы в стек. Вот пример кода для выражения а*(Ь-10) (действие команды MUL аналогично SUB, только вместо вычитания она перемножает значения в стеке): а b 10 SUB MUL Таким образом, стековая система команд для выражения - это система команд в виде обратной польской записи. Достоинства:
Недостатки:
К стековым виртуальным машинам относятся: 27
Регистровые виртуальные машины Регистровая архитектура характеризуется свободным доступом к регистрам для выборки всех аргументов и записи результата [14]. Это значит, что для регистровой виртуальной машины, в отличие от стековой, в качестве хранилища промежуточных результатов вычислений используется не стек, а регистры общего назначения. Эти регистры, в каком-то смысле, можно рассматривать как явно управляемый кэш для хранения недавно использовавшихся данных. Размер регистров может быть как фиксирован, так и нет. К любому регистру можно обратиться, указав его имя. Общий вид операций наших регистровых виртуальных машин имеет вид: ОР получатель, источник!, источник2, ... , источники и ОР получатель ОР - это код операции. В качестве источника может быть либо регистр, либо переменная, либо число. Из источника берутся данные для выполнения операции. Получателем для наших виртуальных машин может быть как регистр, так и переменная. Результат операции помещается в получателя. Код операции вместе с кодами операндов для создаваемых виртуальных машин занимают максимум 64 бита. При этом если у инструкции есть операнды, то их коды должны идти следом за кодом инструкции и их число не должно превышать семи. Пример команды MOV(загрузить) с различными источниками: MOV Rl, S (загрузить значение переменной S в регистр R1) MOV R2, 24 (загрузить число 24 в регистр R2) MOV Rl, R5 (загрузить значение из регистра R5 в регистр R1) Регистровые виртуальные машины допускают расположение операндов в одной из двух запоминающих сред: основной памяти или регистрах. Мы будем рассматривать три подвида команд обработки: регистр-регистр; регистр-память; память-память.
28
Вариант «регистр-регистр» является основным в вычислительных машинах типа RISC. Команды типа «регистр-память» характерны для CISC-машин. В наших же виртуальных машинах оба эти варианта будут равноправны для RISC и CISC виртуальных машин. Достоинства:
Недостатки:
Примерами регистровых виртуальных машин являются:
Download 482 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2025
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling