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




ЧАСТЬ ВТОРАЯ


"Было бы большой ошибкой думать..."
В.И.Ленин

Это будет короткая и теоретическая часть. Обобщив присылаемые мне вопросы, я постараюсь дать несколько обобщенных ответов, чтобы сэкономить ваше и мое время.

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

Есть сервер(оператор), есть клиент(телефон). Безусловно трафик надо шифровать. Но надо предусмотреть также возможность нелегального использования клиентской части(взлом программы, телефона). Перед каждой сессией сервер и клиент обмениваются одноразовыми ключами для будущей сессии. В случае если на сервер заходит НЕКТО через сворованную копию клиента, то получается, что легальный клиент уже не знает ключа связи и при попытки соединиться получает отказ. Но легальный клиент может позвонить по обычным каналам и сообщить, что его "отключили". Так вылавливаются двойники. Недостаток этого метода - нарушитель все же может сделать один звонок.

Я уже писал подобную систему для электронного заказа на ОРАКЛЕ. Ничего сложного.

Следующая вопрос. Как защитить программу? Странный вопрос после прочтения всех выпусков АКМ, не правда ли? Немного повторюсь: Организационная часть: НИКОГДА не делайте это по своей воле. ЗАЩИТА - это отдельная СЕРЬЕЗНАЯ ЗАДАЧА, которая требует вмешательства специалиста, либо требует отдельной проработки и тестирования. Написать программу и написать защищенную программу - это две разные задачи. Если же от вас требуют решения всего в одном флаконе - то предупредите упрямого заказчика, что в этом случае вы будете пользоваться стандартными решениями (HASP или что-то еще). И потому не несете ответственность за взлом.

Бойтесь универсальности, но не бросайтесь в крайности. Универсальность - это поставить пароль в начале. Такая установка не требует знания тонкостей задачи, поэтому она универсальна. Т.е. может быть установлена на любой системе. Однако вас не должно останавливать и то, что такая защита может быть взломана. Посмотрите на 1С. HASP давно взломан. И тем не менее 1С не бедствует. Это я к тому, что не бросайтесь в крайности.

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

Такую систему писать весьма трудоемко. Поэтому я говорил, что это ОТДЕЛЬНАЯ ЗАДАЧА.

Ключевые дискеты. Люди хватаются за них из-за дешевизны. Не делайте этого НИКОГДА. Уж лучше e-key.

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

Инструменты. Если у вас есть возможность. Обязательно поставьте SOFTICE и IDA. Под первым попробуйте ломать свои простые программки, которые требуют ввода пароля или вычисляют серийный код. Вы получите хорошую массу тому, что такое ХАКЕР. Поставив IDA потренируйтесь следующим образом. Возьмите простую программу на VCL защищенную таймером. Т.е. перед любыми действиями вызывается задержка. Возьмите исходники VCL и вашу прогу и найдите реализацию как можно большего количества компонент, в том числе ТАЙМЕРА. И вы увидите как легко читаются программы даже на асме. Для чего это нужно? Чтобы у вас было больше стабильных данных и меньше ложных. Это выясняется только применением.

Далее по инструментам. Многие из вас ненавидят С++. Не имею ничего против. Но тогда возникает трудность реализации следующей защиты. Ваши формы распределены по DLL-кам, оные зашифрованы и расшифровываются главным модулем на лету. Сделать это можно только если написать VXD, который проецируется в память при запуске главного модуля. Как же вам, делфинистам, обойти это. Очень просто. Возьмите исходники свободно распространяемой программы FILE-monitor. Там есть VXD, который реализует все HOOK-и файловой системы и он предоставляет API для обычных программ по установке таких хуков. Исходники этого VXD и нужны, чтобы разобраться с этим несложным API.

Ну вот кажется и все. Обязательно пишите мне если есть вопросы, не смотря на то, что это так "трудно" делать. Если у меня есть время и возможность я обязательно отвечу. Если у меня появиться какая-нибудь интересная задачка, которая вам будет также интересна, то обязательно напишу об этом. Мне нравиться делиться опытом. Конечно, мне жаль, что в некоторых вещах, о которых мне хотелось бы рассказать мы не совпадаем во мнении.

На этом считаю последний номер АКМ законченным.

13 февраля 2001г.
Дмитрий Логинов









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


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