Шароварная криптография или пишем систему лицензий на коленке, часть первая
December 10th, 2008 Begemot Posted in Шаровароварение
Я уже писал про существующие навесные защиты для шароварных программ. Как правило все они предлагают, как собствено защиту от взлома, так и встроенное управление лицензиями – создание\проверку регистрационных ключей. Штука это конечно мега-удобная, избавляет от кучи хлопот, необходимости думать\делать, ну и в целом делает жизнь гораздо проще, особенно если программу вы уже написали, выпустить ее не в терпежь, а слово криптография вгоняет в ступор 🙂
Но есть и минусы: навесные зашиты не идеальны, и возможно со временем вы захотите перейти на другую, а много ключей уже распозлось по счастливым клиентам. Или вы решите занятся экспансией и ворваться на рынки карманных устройств или альтернативных ОС. Ну или у вас просто нет денег на навесную защиту, а то, что вас будут ломать вы еще пока просто не верите. Я сам много лет назад использовал подобную схему и теперь, к сожалению, жестко привязан к выбранной тогда защите. Ее смена означает приличную нагрузку на саппорт по раздаче новых ключей все клиентам, удовольствие еще то…:(
В новом проекте я делаю свою систему лицензий, что дает гораздо большую свободу действий. Я могу использовать навесную защиты или нет, могу менять ее от версии к версии, а так же не боюсь того что я портирую программу под винмобайл 🙂
Ничего сложного или сверхестественного в собственной системе лицензий нет, самостоятельно написать ее под силу даже среднему программисту (даже я уже почти смог). Сразу оговорюсь, что речь идет только о регистрационных ключах и совсем не идет о защите от взлома. Наша цель сейчас не защита от кряка, но теоретическая невозможность создания кейгена. Все таки кейген намного хуже взломанной версии.
Первое, что надо сделать – придумать формат лицензии. Тут все просто – думаете какие данные вы хотите хранить в ключе, потом выбираете удобнуй формат записи. Дальше пишете код который собирает все это вместе и сериализует – для кейгена. И код который разбирает данные по косточками – для программы. На придумывания формата у меня ушло 10 минут, на написание кода и уточнения формата еще 2 дня:)
Дальше нас ждет мир крифтографии. Для наших целей совсем не нужно быть экспертом, все уже давно расчитанно, придумано, доказано и проверенно. Но об этом уже в следующей серии.
December 10th, 2008 at 3:39
Ждем-с второй серии. 🙂
Лично мне это очень интересно, так как столкнулся с той же проблемой.
December 10th, 2008 at 7:56
Как ты знаешь, я сам уже 2й день занимаюсь тем же самым 🙂
Меняю систему лицензирования с использованием файлов на более удобный вариант – с текстовым ключем, хранящимся в реестре.
Кстати, по поводу защиты и системы лицензирования. Я считаю, что первое и второе должны быть взаимосвязаны между собой. Например, для корректной работы защищенных кусков может требоваться инфа из ключа. или другая информация, которая нужна для генерации ключей.
December 10th, 2008 at 11:42
У нас тоже самописная защита:).
Кстати, с купленной защитой иногда бывают “глюки”, наш конкурент, например, покупает защиту, и у него, когда заканчивается триальный период, в окошечке появляются три кнопки: “Купить”, “Ввести ключ” (надпись почти не влазит на кнопку) и (барабанная дробь:)) снова “Купить”. Кнопка “Выход” или “Отмена” отсутствует как класс;).
December 11th, 2008 at 3:35
Norfolc, ну сравнил изменения места хранения ключа у купленной защиты и написание своей 🙂
Конечно должны быть связанны в какой-то степени, как же иначе. Но это совсем не значит что они должны быть из одного флакона. Например я планирую что у меня будет своя лицензия, но она будет содержать пароль для расшифровки кода аспротектом, пока правда не реализовал – но никаких проблем не вижу.
January 10th, 2009 at 6:33
——–
“Купить”, “Ввести ключ” (надпись почти не влазит на кнопку) и (барабанная дробь:)) снова “Купить”.
—-
Это не глюк, это фича.
;))
September 16th, 2009 at 3:56
Судя по дальнейшим постам было бы интересно как ты шифруешь ключ используя DSA 🙂
September 17th, 2009 at 9:50
А из чего вы сделали вывод, что кто-то пытается что-то шифровать с помощью DSA?
September 21st, 2009 at 7:52
Промахнулся с окмментом, он к другому посту. И, кстати, уже понял, что подписывает, а не шифрует.