Безопасность в Дельфи




Шифрование кода


Раздел "Анти крэковые мучения" Дмитрий Логинов ,
дата публикации 03.05.00

Ну вот, " у них опять первомай! ".

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

"Анти крэковые мучения"

Сия вздорная мысля родилась у меня неделю назад, когда я прятался от обезумевших толп граждан, возжелавших затащить кого-нибудь на субботник. Интересная традиция - гадить круглый год, а убираться один день. Итак, упадобляясь шизикам из журналистких очерков, я решил уйти от реальности. Но и та, другая реальность, меня не очень порадовала. Посурфился я по хакерским страничкам, посмеялся. Неожидано нашел вобщем-то туповатую страничку "Гражданская школа хакеров". И мне вспомнились старые журнальчики, весьма полезные, INFECTED VOICE, LMD, CHAOS, INFECTED MOSCOW etc.

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

Небольшое правило. Ребята, если ваш проект не тянет более,чем на 100 баков, то самой лучшей защитой для вас будет отсутствие инсталятора. И, что сконфигурировать и поставить программу можете только вы. Это будет для вас лучшей защитой, особенно если тираж не превышает пары десятков клиентов.

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

Часть первая.

Я решил начать с шифровки, хотя логичнее было бы начать с защиты от отладки. Но всему свое время! Шифровка, на самом деле сейчас очень популярна, поэтому отдадим ей дань. Популярность ее основана на простом факте. Помните я говорил "Только неявностью вы можете победить хакера". Так вот, шифровка самая удобная неявность при защите. Т.е. при вводе пароля у вас не появится условного перехода, который хакер потом может исправить. У вас будет всего лишь дешифратор. Это азбука. Вернее буква "А".

В прилагаемом проекте главный модуль создает закрытую форму вначале без закачки ресурсов: SecDlg := TSecDlg.CreateNew(Self); Далее вводится пароль из строки редактора. Сейчас, на этом этапе, пусть он вводится так. Дальше это будет менятся. В этом варианте нам важно понять и испытать возможность закрытия модулей. От простого к сложному. Короче, ввод пароля и попытка дешифровки: Stream := TCryptFile.Create('SecUnit.cfm', fmOpenRead); Stream.Password := Password.Text; try Stream.ReadComponentRes(SecDlg); except SecDlg.Free; SecDlg := TSecDlg.Create(Self); Alert; end; Тип TCryptFile реализован тут же, за что прошу прощения у поклонников модульности программирования. Все отличия этого потока от обычного файлового - в дешифровке. Три важных момента:
  • 1) Приведен простой алгоритм шифровки, но не для использования а для быстроты отладки приложения. Желающие могут легко вставить другой алгоритм. Это даже нужно делать!
  • 2) В TCryptFile нет глобального буффера, куда бы декодировался весь файл. Некоторые так делают, особенно при реализации блочных позиционно-зависимых шрифтов. НЕ ДЕЛАЙТЕ ТАК НИКОГДА! ПОЛУЧИВ УКАЗАТЕЛЬ НА ЭТУ ОБЛАСТЬ, Я ЛЕГКО СКИНУ ДАМП В ФАЙЛ И ПРОГРАММА СЧИТАЙ ВЗЛОМАНА.
  • 3) Я специально не добавил модуль дешифровки из другого проекта. Так как тот модуль имеет в себе процедуру шифровки. Это может использовать хакер.
Далее, в части except стоит "раборка" старого варинта класса и конструирование обычным методом. В этом случае, форма инициализируется из "открытой" DFM-ки прилинкованой к ехе-шнику.

!!! ВНИМАНИЕ ПРАВИЛО !!!

Когда вы будете создавать свою пару "закрытой-открытой" форм. Ресурсы должны быть идентичны количественно! Т.е. если в одной форме есть TLabel то и в другой она должна быть, если в одной есть TMemo, то и в другой ее нужно вставить! Иначе у вас ничего не выдет. Но, В ЗАКРЫТОМ ДУПЛИКАТЕ ВАШЕЙ ФОРМЫ ВЫ МОЖЕТЕ МЕНЯТЬ ЛИШЬ СВОЙСТВА КОМПОНЕНТ И ИХ СОБЫТИЯ.

В проекте я поменял некторые Caption-ы и задисейблил все, что видно. Также удалил из ObjectInspector-а (т.е. из DFM) все ссылки на обработчики событий. Вуаля!

Замечания:
  • Проект писался вечером из-за отсутсвия чтива, посему не казните за стилистику или невыравненные кнопки. То что я писал, я писал с заделом на будущее.
  • Пароль может читаться не только с клавиатуры, но и с внешнего устройства (КЛЮЧА) или контрольной суммы самой программы. Тогда ваша программа становится более или менее устойчива к изменениям со стороны хакера.
  • ПАРОЛЬ ДЛЯ ЗАКРЫТОЙ ФОРМЫ "gfhjkm" (естественно без кавычек).

Скачать проект Akm.zip (14.1 K)

До следующих добавок, Дмитрий Логинов










Начало  Назад  Вперед


Книжный магазин