Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 12(32)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5

Библиографическое описание:
Ероховец Н.Ю. АЛГОРИТМ ЗАЩИТЫ ИСПОЛНЯЕМОГО КОДА ПРИ ПОМОЩИ ВИРТУАЛЬНЫХ МАШИН // Студенческий: электрон. научн. журн. 2018. № 12(32). URL: https://sibac.info/journal/student/32/113341 (дата обращения: 21.12.2024).

АЛГОРИТМ ЗАЩИТЫ ИСПОЛНЯЕМОГО КОДА ПРИ ПОМОЩИ ВИРТУАЛЬНЫХ МАШИН

Ероховец Наталия Юрьевна

магистрант, кафедра проектирования информационно-компьютерных систем, Белорусский государственный университет информатики и радиоэлектроники,

Беларусь, г. Минск

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

Согласно данным Business Software Alliance (BSA), представляющей интересы крупнейших мировых разработчиков ПО, 85 % софта, установленного на компьютеры в Беларуси, является нелицензионным. В России этот уровень составляет 64 %, в Латвии – 49 %.

Аналитики International Data Corporation (IDC) видят прямую взаимосвязь между использованием нелицензионного программного обеспечения и увеличением частоты случаев заражения ИТ-систем предприятий вредоносным кодом, а также числа хакерских атак. В четырех из пяти компаний в российском сегменте малого и среднего бизнеса (82 %) хотя бы раз происходили сбои рабочих приложений, почты и других отдельных компонентов, либо всей системы в целом. 27 % респондентов признались, что это происходит чаще, чем раз в месяц [1]. Исходя из этих данных видно, что задача защиты программного обеспечения от анализа и незаконного распространения на сегодняшний день является актуальной.

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

Виртуальная машина (англ. virtual machine) – это программная или аппаратная среда, исполняющая некоторый код (например, байт-код, шитый код, p-код или машинный код реального процессора), или спецификация такой системы [2].

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

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

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

Для трансляции исходного кода программ используют два подхода: компиляцию и интерпретацию.

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

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

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

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

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

Важным этапом создания виртуальной машины является определение способа ее использования, а именно:

  • способ передачи входной информации и формирования точки входа в виртуальную машину;
  • способ активизации (запуска) системы;
  • способ останова системы;
  • способ извлечения переработанной информации [3].

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

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

 

Список литературы:

  1. Пиратское ПО в России и мире. Нелицензионное ПО// Tadviser. Государство. Бизнес. ИТ, 2017. URL: http://tadviser.ru/a/118175 (Дата обращения: 14.07.2018).
  2. Петров А.С., Петров А.А. Методы защиты программного кода. Системи обробки інформації, 2010, № 3 С. 68 – 71.
  3. Буздин, К.В. Исполнение моделей при помощи виртуальной машины. / К.В. Буздин // Труды Института Системного Программирования РАН – 2004 –. [Электронный ресурс] Режим доступа: http://citforum.ru/SE/project/models/ (Дата обращения 14.07.2018).

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.