Обзор технологий защит и мысли по этому поводу


Автор: Hex <hex@xtin.org>


Итак, что на текущий момент имеем среди soft защит.
Фишки протекторов:
1) Отлов дебагеров
2) Извратный алгоритм распаковки чтоб было сложно найти OEP
3) Антидамповые приемы
4) Порча импорта и других секций
5) Съедание начальных байтов (около OEP до первого Call)
6) Динамическая распаковка
7) Поиск протектора в самое программе + API протектора
8) Привязка к железу, Проверка CRC

Отлов дебагеров - да помогает, останавливает в большинстве случаев, тех у кого нет Frogsice/icedump и т.д. :) Ну разве что tELock и StarForce показывают тут кузькину мать :)

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

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

Порча импорта и других секций - единственное к чему это привело - это к тому, что крэкеры выучили структуры секций :)

Съедание начальных байтов - видел пока тока в аспре, pelock и еще одном неизвестном протекторе. Аспр тут глупо делает, а вот в pelock повеселей эта идея реализована. Неплохая идея. Если так дальше будет развиваться, то проги будут частью защиты , а не наоборот :)

Динамическая распаковка - видели такое в армадилле, и в аспре который в SmartWhois и т.д. Не сильно перспективная защита... Делает ограничение на скорость выполнения кода.

Поиск протектора в самой программе + API протектора - полезная штука, но не эффективная. Быстро находится и обрубается.

Привязка к железу, Проверка CRC - проверка crc часто делается по файлу на диске, а толку от этого мало, все равно все темные дела творятся в памяти :). Про железо сказать много не могу, где-то хорошо реализовано, где-то плохо. Если данные по железу являются кодом для распаковки - вот это реальная вещь (прям как электронный ключ). Вот тока юзер проапгрейдится и все...

Защитные фишки в прогах:
1) скрипты/псевдокод
2) скремблинг (перемешивание кода)
3) криптование
4) Exception Handling
5) серийный номер = часть программы.

скрипты/псевдокод - прикольная вещь, но большей частью рассчитана на то, что крэкер забьет с этим разбираться.
скремблинг - вот это пока, что самая реальная вещь т.к. сделать ее довольно просто, а вот потом читать... Пример скремблинга на QBasic :)

Исходная программа
10 a=10
20 b=a+1
30 c=a*b
40 print(c)
50 ...

После скрэмблинга
5 goto 10
40 print(c): goto 50
10 a=10: goto 20
30 c=a*b: goto 40
20 b=a+1: goto 30
50 ...
Таким образом при перемешивании хотя бы 40 кусков уже читать дизассемблированный текст не интересно...

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

Exception Handling - Искусственное создание ошибок для того чтоб сбить с толку дебагер. Путает только начинающих.

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

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


Hosted by uCoz