копаемся в броне КРИС КАСПЕРСКИ АКА МЫЩЪХ Спецвыпуск: Хакер, номер #066, стр. 066-062-2 Вот еще один трюк. Создаешь файл, делаешь seek на весь размер свободного пространства, как бы «втягивая» его внутрь себя, затем сканируешь полученный файл на предмет наличия «своего» содержимого. Есть такой хинт: при удалении файлов с диска они продолжают «догнивать» в свободных секторах довольно длительное время, поэтому защита может легко и прозрачно обнаружить, была ли она установлена на данный диск. Для этого совершенно не обязательно прибегать к сканированию на уровне секторов, достаточно просто сделать seek — при выделении кластеров операционная система не очищает их, что становится огромной дырой в безопасности. Конечно, крэкер без труда обнаружит и обойдет такую проверку, но простого пользователя она поставит в тупик. Разве что он не воспользуется специальными утилитами для физического удаления файлов, затирающих их содержимое. Но утилит для физического удаления веток реестра нет... Самое надежное — «зашить» дату ограничения trial’ного срока в саму программу еще на стадии компиляции. Поскольку программы не выкладываются на сервер каждый день, чем позднее пользователь скачает программу, тем короче длительность демонстрационного периода. Так что лучше удлинить испытательный срок до 60-ти дней и обновлять программу на сервере не реже раза в месяц. Как бороться с повторными скачиваниями? Во-первых, если программа тяжелая, громоздкая и большая, далеко не каждому пользователю будет в радость каждый месяц перекачивать мегабайты данных по своему каналу. Во-вторых, можно отдавать программу только после предварительной регистрации, и тогда бедному пользователю придется каждый раз выдумывать себе разные адреса, менять ящики и т.д. Все это сильно напрягает и склоняет пользователя к регистрации. Как вариант, можно сделать так, чтобы при первом запуске инсталлятор (не содержащий в себе основного тела программы) собирал информацию о конфигурации и отправлял ее серверу. Сервер сверял бы ее со своей базой и в зависимости от этого либо отдавал бы программу, либо не отдавал. Совершенно не обязательно писать «сетевой инсталлятор» — лучше просто дать ссылку на временный линк, автоматически удаляющийся через несколько дней, что реализуется очень просто и решает проблемы «докачки». Взломать такую защиту пользователю (даже очень и очень продвинутому) будет уже не под силу, да и крэкеров она напряжет изрядно. хронометраж обратного отсчета времени Никогда не полагайся на системное время — перевести его назад очень легко. К тому же существует множество утилит типа TrialFreezer, которые перехватывают вызов API-функции семейства GetLocalTime и подсовывают отдельно взятой программе подложную информацию, что намного удобнее, чем работать с переведенным временем и смотреть при этом на страдания всех приложений. Что может сделать защита? Сбегать в интернет за атомным временем? А если пользователь поставит брандмауэр? Наверняка поставит. Вести счетчик запусков — прекрасная идея, только он очень легко обнаруживается сравнением двух «соседних» дампов. |