PostHeaderIcon Наши статьи

PostHeaderIcon Алгоритм защиты компьютерных программ с использованием уникальных маркеров

к.т.н., Криницын Вадим Валерьевич,

Квашин Андрей Александрович,

Херсонский экономико-правовой институт

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

Описанные в литературных источниках большинство взломов и атак, которые заслуживают внимание, сводятся к использованию дизассемблирования и отладки. Обычно используются инструменты IDA (Interactive Disassembler) - дизассемблирование программ, и SOFTICE (Kernel Level Debugger) - для отладки приложений. Существует множество других средств, среди которых следует отметить инструменты для работы с участками памяти. Используя последние, можно составить, из снятых участков памяти, рабочий exe-файл.  Понимая, как работают выше перечисленные инструменты, и при наличии некоторого опыта работы с ними, можно взломать программу.

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

Когда не помогает такой очень удобный инструмент как дизассемблер, есть возможность взломать программу с помощью отладчика. Но этот метод требует достаточно высокой квалификации хакера. Обычно отладчик используется для поиска адресов процедур, которые потом задаются в дизассемблере, или в программе по снятию участков памяти. Анализ кода в дизассемблере очень неудобен, и требует большого опыта как в программировании, так и в взломе. Существуют методы противодействия последним двум инструментам. Это шифрование отдельных участков памяти, их замещение друг другом, работа с сегментами как с «колодой карт фокусника». Любые хитрости по перемещению исходного кода в памяти, сразу «нокаутируют» Proc Dump (программу для снятия дампов). Приходится выискивать и ждать момента расшифровки с помощью отладчика, а полученные адреса передавать в Proc Dump, то есть клеить программу фактически по  кусочкам. При этом следует учитывать таблицы импортов и пр. Это требует больших затрат времени на взлом, чем на написание самой программы. Но и использование этих методов не является эффективным. Их следует использовать вместе или в дополнении с другими способам защиты. Необходимо также помнить о контрольной сумме критических участков, что намного эффективнее, чем проверка целостности всего файла. Но как определить эти критические участки, понимая, что адреса постоянно смещаются. На двух разных компьютерах, адреса функций разные, и надо строго знать, где они и не ошибиться не на байт. Для этого необходим некоторый идентификатор  для каждого сегмента.

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

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

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

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

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

Литература:

1. Материалы сайта www.delphikingdom.com

2. Материалы сайта www.delphi-net.com