Когда программа получила от пользователя регистрационную информацию, не обязательно сразу же определять ее правильность и информировать об этом пользователя. Если все проверки сосредоточены в одном месте, противнику гораздо легче определить, откуда начинать анализ. Предпочтительнее выглядит следующий подход. При вводе регистрационной информации выполняется первичная проверка, предназначенная скорее для исключения ошибок набора с клавиатуры, чем для защиты. Если введенная информация кажется правильной, она сохраняется на диске (в файле или реестре) и пользователю выдается сообщение с благодарностью за регистрацию и предложением перезапустить программу, т. к. только после перезапуска будут активированы все функции, недоступные в бесплатной оценочной версии. После перезапуска программа читает с диска регистрационную информацию и тиражирует ее в памяти в нескольких экземплярах. Это делается для того, чтобы противнику сложнее было найти место, где программа интерпретирует регистрационные данные.
В разных местах программы необходимо вставить разные функции, которые будут проверять разные кусочки регистрационной информации или целостность программы. Лучше иметь несколько функций, проверяющих одно и то же, чем одну функцию, проверяющую сразу все. Противнику придется разбираться со всеми функциями проверки, и чем их больше, тем ему будет сложнее. Если в результате одной из проверок выяснилось, что регистрационные данные неверны, не стоит сразу сообщать об этом пользователю. Лучше установить специальный флаг, указывающий на то, что программа не была корректно зарегистрирована. А в другой функции, относящейся к совершенно иному фрагменту программы, анализировать один или несколько флагов и предпринимать соответствующие действия. Действия могут быть самые разнообразные. Так, например, один из DOS-овских симуляторов Formula-1 при запуске проверял наличие документации: у пользователя просили ввести слово, написанное на определенной странице. Исправлением одного байта можно было заставить программу запускаться при вводе любого слова, но тогда автомобиль становился неуправляемым через несколько минут после начала гонки. Другой пример нестандартной реакции. Программа ReGet Deluxe, предназначенная для управления выкачиванием файлов по протоколам HTTP и FTP, иногда подменяла загруженные файлы, если обнаруживала, что код программы был модифицирован. Так у пользователя взломанной версии ReGet Deluxe были шансы в архиве обнаружить файл readme.txt, содержащий текстовую строку "This file downloaded with cracked version of ReGet Deluxe", или получить сообщение с тем же текстом при запуске закачанного исполняемого файла.
Также существует красивая легенда, касающаяся программы 1С:Бухгалтерия. 1 С:Бухгалтерия и ключи HASP Бухгалтерская программа от компании 1С исторически была защищена от копирования при помощи аппаратных ключей HASP. Для всех ключей HASP того времени существовали эмуляторы, и 1С нормально работала при отсутствии ключа, если на машине был установлен эмулятор, и очень многие это знали. Но, видимо, о существовании эмуляторов были неплохо осведомлены и программисты 1С. Во всяком случае, однажды программа перестала работать под эмулятором, в то время как при наличии настоящего ключа никаких проблем не возникало. В обычное время нелегальные пользователи постарались бы найти другой эмулятор или взломанную версию программы, но так случилось, что программа перестала работать за несколько дней до срока сдачи очередного баланса. В результате, очень многие не колебались и предпочли приобрести легальную версию программы вместо того, чтобы платить штраф за просроченный баланс. Расчет был сделан очень точно, и, по слухам, компания 1С за 2 недели продала столько копий своей Бухгалтерии, сколько обычно продавалось за полгода. Вот так небольшая задержка в реакции на нарушение защиты, совмещенная со знанием особенностей рынка, помогла быстро легализовать большое количество пользователей.