Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 340

/ вопрос открыт /

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

HotMan Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: HotMan (статус: Посетитель)
Вопрос отправлен: 23 февраля 2007, 12:34
Состояние вопроса: открыт, ответов: 3.

Ответ #1. Отвечает эксперт: Вадим К

В общем виде эта задача нерешабельна. тоесть нет точного способа решить. Запомните, всё что написано одним человеком, гарантировано может быть сломано другим. Проблема только во времени. Новсё же пару идей могу дать. Можно скачать StarForce - но он достаточно дорог, и если у вас это еденичная программа, то она врядли окупиться.
Вариант два - привязаться к номеру диска. Только не делайте в коде проверок типа
if MySecurityCod<>CD_Cod then begin
ShowMessage('Не на том диске работаем!');
Application.Terminate;
end;
Лучше зашифровать этим кодом данные программы (они у вас наверняка есть). Код лучше выбрать несеметричный и проверку делать так.
Расшифровываем небольшой участок(килобайт-другой) и проверяем его crc. если он несовпадает - кричим, но не сразу, а просто не отображаем данные. Но всёравно такая защита может быть обойдена.
Если вы хотите написать что то серёзное, то рекомендую почитать Криса Касперски (С Евгением Касперским непутать!) - этот человек написал многохороших книг, в часности по поводу защиты и слома для компактов. (Только не говорите, что вам не нужно ломать! Если вы не представляете, как можно сломать вашу защиту, вы никогда не можете быть уверены, что она более-менее надёжна.) Скачать книги в электронной версии можно на http://kpnc.opennet.ru/ (сам автор разрешил их выложить, но он будет абсолютно не против, елси вы их купите :) ) И хотя там много кода на С/С++, но автор имеет особенность очень доходчиво писать.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 23 февраля 2007, 12:57
Оценка за ответ: 3

Ответ #2. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, Kardonsky Roman Viktorovich!

Добавлю еще свои соображения к обстоятельному рассказу Вадима.

Итак, вариант с номером диска в чистом виде отметаем сразу, поскольку это ломается моментально. Вариант с шифрованием гаммой, построенной на этом же коде диска также отметаем: сломать тяжелее, но программа так и так должна определять этот код, для чего придется воспользоваться SystemVolumeInformation - найдя этот вызов есть возможность его здесь же поменять, ведь у взломщика есть доступ к оригинальному диску (конечно можно попробовать скрыть вызов API, но это не совсем "красиво", да и надо проверять для разных OC).

Что еще можно придумать? StarForce - это хорошо, очень сильная система, но дорога, однако можно воспользоваться частью ее методов.

Как работает StarForce - принцип системы основан на том, что болванки из одной партии имеют одинаковые физические параметры, в то время как болванки из разных партий со значительной долей вероятности имеют разные физ. параметры.

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

Еще замечания:
1. Можно использовать не только "карту скоростей чтения", но и скорость перемещения по диску, т.е. скорость «перепрыгивания» с одной позиции на другую.
2. Можно к гамме можно все-таки подмешать и серийный номер диска.

В результате Вам нужно две болванки из одной партии (например связки по 100 шт) - на первую записываете диск в том виде, в котором он будет распространяться (тело Вашей программы нешифрованно), затем производится анализ диска, вычисляется гамма, ей шифруется файл программы, этот файл (или файлы) заменяется и записывается на новую болванку.

В этом деле, конечно, потребуется немало физических экспериментов - нужно подобрать подстроечные коэффициенты.

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 23 февраля 2007, 15:28
Оценка за ответ: 4

Ответ #3. Отвечает эксперт: Новаковский Юрий Аврамович

Здравствуйте, Kardonsky Roman Viktorovich!
Попробуйте так:

Инсталяшка после установки Вашей программы считывает номер диска, материнки, проца и т.д.
Затем сцепляет эти номера в массив байт и хеширует этот массив. Хешированное значение записывается в реестр в виде бинарного ключа.
При каждом запуске Ваша программа делает то же самое, считывает с реестра этот ключ и сравнивает по байтам два хешированных значения.
Если инсталяху и саму программу сжать EXE-упаковщиком, то получится почти 100% надежность.
Алгоритмов хеширования и получения с железа серийных номеров в инете полно. Дальше, думаю, понятно.
Удачи!

Ответ отправил: Новаковский Юрий Аврамович (статус: 4-ый класс)
Время отправки: 26 февраля 2007, 15:54
Оценка за ответ: 3


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.03 сек.