Программа должна содержать некоторый механизм, позволяющий проверить, является ли введенный пользователем серийный номер (или регистра-] ционный/активационный код) правильным, а возможность вычислять правильные коды должна всегда оставаться только в руках разработчика. Для того чтобы противник, исправив несколько байт, не смог заставить программу работать так, как будто она была корректно зарегистрирована активирована, необходимо те фрагменты кода или данных, доступ к которым разрешен только легальным пользователям, зашифровать стойким алгоритмом, а ключ шифрования вычислять, используя регистрационный код. Тогда без знания регистрационного кода получить полноценную версию программы не удастся. Подобную функциональность обеспечивают, например, программы ASProtect (ASPack Software) и EXECryptor (Soft-Complete Development).
Определим несколько критериев, по которым можно сравнивать свойства разных методов генерации и проверки кодов: • возможность связать код с именем пользователя или характеристиками компьютера; • невозможность вычислить какой-нибудь правильный код, имея в распоряжении только алгоритм проверки; • невозможность вычислить код для определенного пользователя, зная алгоритм проверки и правильный код другого пользователя; • невозможность расшифровки программы (получения ключа шифрования) при наличии заблокированного (занесенного в черный список) регистрационного кода; • длина ключевой строки (удобство пользователя).