Создание лицензионного ключа в пронумерованном формате - PullRequest
2 голосов
/ 03 апреля 2011

Я сделал приложение mac mac, которое должно проверить правильность серийного номера / лицензионного ключа, я не уверен, какой тип алгоритмов будет лучшим для этого.

Допустим, у меня есть этот серийный номер: 4829-1234-4321-1234-4326-5232 или любой набор из 4 чисел. Я думал об использовании алгоритма, например, если первый набор лицензионного ключа делится на 5, второй на 10, третий на 24 .... но я не уверен, что это лучший способ сделать это.

Мне также нужно было бы генерировать ключи в PHP.

Любая помощь приветствуется

Ответы [ 3 ]

5 голосов
/ 04 апреля 2011

Не пытайтесь создать систему серийных номеров с нуля без использования криптографии с открытым ключом. Взломать его и создать кейген будет детской игрой, независимо от того, насколько сложным вы считаете свой алгоритм.

Я рекомендую библиотеку Aquatic Prime , которая использует шифрование с открытым ключом. Вы должны использовать версию библиотеки Core Foundation C, а не библиотеку Objective-C, поскольку Obj-C смехотворно легко обойти. Вы также должны статически ссылаться на код, а не использовать отдельную структуру. Обратите внимание, что Aquatic Prime не является законченным решением и не занимается запутыванием проверок лицензии в вашем коде.

Очень важно, чтобы вы не создавали ни одного метода Objective C с именем что-то вроде ‑isRegistered и возвращали бы BOOL. Это тривиально, чтобы взломать.

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

Существует множество других методов, которые можно использовать для повышения надежности кода проверки регистрации. Я рекомендую поискать в архивах MacSB Yahoo group , которые полны информации по этой теме.

4 голосов
/ 03 апреля 2011

На этой арене доступно несколько опций.Один из вариантов, который я хотел бы рассмотреть, - это частичная проверка серийного номера (http://www.brandonstaggs.com/2007/07/26/implementing-a-partial-serial-number-verification-system-in-delphi/). Ссылка написана для разработчиков на Delphi, но концепция хорошая и может быть реализована на любом языке.

1 голос
/ 03 апреля 2011

Общая идея, которую я слышал, это использование криптографии с открытым ключом .

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

Приложение запрашивает у лицензиата ту же информацию, которую вы собрали, вместе с кодом.Теперь ваше приложение просто использует встроенный в него ключ («открытый» ключ) для расшифровки кода, который извлекает хеш;выполняет хэш на имя и адрес электронной почты;и сравнивает два результата.Если они совпадают, код действителен (или человеку очень повезло).

Аллан Одгаард сделал отличную запись, которая проведет вас через все, что вам нужно сделать: SIGPIPE 13: OpenSSL для лицензионных ключей

(Надеюсь, я не неправильно понял вопрос.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...