Установка подлинности кода (tamper-proofing).
В данном случае, в программу помещается процедура проверки целостности самой программы, что позволяет определить была ли программа изменена (были ли внесены какие-то либо изменения в ее код). Если эта процедура обнаруживает, что в программу внесены изменения, она делает программу не функциональной (Рисунок 2).
Рисунок 2. Установка подлинности кода.
Это позволяет защитить программный продукт, от изменений со стороны злоумышленника (применения им «крэков»). Работа этой процедуры должна быть неприметной для тех, кто будет работать с программой, это позволит сбить с толку неопытных взломщиков. Также ее программная реализация не должна, иметь вид "if (programm_code_original()) { i = 1} else { i = 0}", так как такую процедуру проверки будет легко обойти, например для этого достаточно будет определить место, где она вызывается, и изменить само условие проверки. Процедура проверки должна быть разбита на как можно большее количество этапов, которые будут выполняться в разное время работы самой программы. Если все этапы проверки будут успешно пройдены, тогда можно будет предположить, что программа оригинальна, и не содержит дефектов (изменений). Существуют такие пути проверки целостности программы:
- проверка идентичности оригинальной и запускаемой программы. Обычно для этого определяется контрольная сумма запущенной программы, которая потом сверяется с записанной в процедуру проверки, контрольной суммой оригинальной программы. Для осуществления быстрой проверки, используют такие алгоритмы: CRC или MD4/5 (алгоритмы резюмирования сообщений).
- проверка результатов работы программы. То есть осуществляется проверка выходных значений функций, которые очень чувствительны, к каким либо возможным изменениям в программном коде.
- создание запускаемой программы на лету, в соответствии с ее оригинальным образом. Это позволяет избежать возможности выполнения изменений внесенных в программу, так как они не будут учитываться при ее создании.
Шифрование программного кода.
Используется, для того чтобы предотвратить вмешательство в программу, а также усложнить изучение взломщиком того, как устроена программа, как она работает, как в ней реализован метод защиты и т.д.
Данный метод защиты предусматривает зашифровывание кода программы, после чего она в зашифрованном виде поставляется конечным пользователям (иногда эффективно зашифровывать только наиболее важные, критические, участки кода, а не весь код программы). Когда пользователь запускает такую программу, вначале будет запущена процедура расшифровки программы, которой потребуется ключ, с помощью которого будет расшифрована запускаемая программа. (Рисунок 3).
Рисунок 3. Шифрование программного кода.
Сам ключ обычно представляет собой последовательность байт (символов), который генерируется в результате определенных (математических) операций.
Он может быть привязан к уникальным характеристикам компьютера пользователя, который приобрел программу и работает с ее лицензионной копией (принцип "одна машина - одна копия"), но такой способ генерации ключа, создает определенные неудобства для конечных пользователей, так как могут возникнуть определенные трудности при использовании такой программы, на другом компьютере.
В последнее время становиться актуально для расшифровки программы использовать электронные ключи, они являются наиболее надежным и эффективным методом защиты дорогостоящих ПП. Он предоставляет высокую стойкость ко взлому и не ограничивает использование легальной копии программы на разных компьютерах.
Электронный ключ представляет собой небольшое устройство, которое подсоединяется к одному из портов компьютера (COM,LPT,USB).
Но все же существует возможности обхода защиты программ зашифрованных с использованием электронных ключей, некоторые из них перечислены ниже:
- Изготовление аппаратной копии ключа. Этот метод основывается на считывании содержимого микросхемы памяти ключа, после чего полученные данные переносятся в микросхему другого ключа. Способ этот достаточно трудоемкий и может применяться, если память ключа не защищена от считывания.
- Изготовление эмулятора ключа. Заключается в создании программы (драйвера), которая эмулирует работу электронного ключа, в результате защищенная программа сможет работать без электронного ключа, для этого перед ее запуском нужно будет запустить программу эмулятор.
Способ шифрования программ имеет недостатки, одним из которых является то, что у взломщика есть возможность, после приобретения лицензионной копии программы, произвести извлечение расшифрованных частей программы в процессе ее работы из памяти. Поэтому сразу после исполнения расшифрованного кода его необходимо выгружать из памяти.