Алгоритм активации ключа - Безопасность - PullRequest
6 голосов
/ 02 августа 2010

Я пишу программное приложение, для которого пользователю необходимо купить лицензию и активировать ее. Мне нужны предложения о том, как начать писать мощный алгоритм для генерации кода и, конечно, проверки кода. Я знаю, что люди могут перепроектировать код и создать кейген, однако мой вопрос состоит из двух частей:

  1. В общем, независимо от того, каким образом приложение было взломано, как я могу начать писать алгоритм для приема определенного последовательного или строкового кода или комбинации. (например, это правильно? например: первое число от 3 до 9, второе должно быть первым - 3, а третье число должно быть вторым * + .... что угодно ... ??)

  2. Каков наилучший подход для защиты настольных приложений от пиратства без использования Интернета. Это алгоритм (усложнить обратный инжиниринг), защитить исходный код от просмотра после установки приложения где-то ?? ... ??

PS: Может быть, стоит упомянуть, что я использую Java в качестве языка разработки. Спасибо

Ответы [ 6 ]

2 голосов
/ 02 августа 2010
  1. Похоже, что вы могли бы извлечь выгоду из подхода с открытым ключом .

  2. Это можно разбить на две подпункты:

    • A.Вы читали эту ветку здесь на SO? Это может дать вам некоторую широту вопроса.
    • B.Как сказал @Jaka, это не большая проблема (из того, что я читал), чтобы сделать читабельный для человека код из Java-байтового кода.Вы можете запустить свой код через обфускатор , чтобы затруднить кому-либо создание из него читаемого человеком кода, но если кто-то действительно захочет прочитать ваш код, он почти всегда найдет способ.Лучший способ борьбы с этим заключается в том, чтобы воспользоваться советом в той ветке SO, с которой я связан: сделать так, чтобы кому-то было проще купить ваше приложение, чем кому-то его украсть.

(отредактировано после того, как заявлено, что он использует Java)

1 голос
/ 02 августа 2010

Для лицензионных ключей вы можете использовать шифрование с открытыми и закрытыми ключами.Таким образом, вы можете либо встроить закрытый ключ в программное обеспечение и зашифровать строку, которая будет что-то значить для вашего программного обеспечения (например, какие функции вашего программного обеспечения лицензированы).Или вы можете встроить общедоступный код и дать программному обеспечению строку со специальным значением и подписать ее своим закрытым ключом.Программное обеспечение может затем проверить, действительна ли подпись.

edit: labratmatt был быстрее с ответом открытый-закрытый ключ:)

Очевидно, вторая часть вашей защиты будетнеобходимо разобраться с тем, как трудно разобрать и отладить ваше программное обеспечение (именно так взломщики проверяют ваше программное обеспечение и пытаются обойти защиту с помощью патча или пытаются выяснить, как они могут создать кейген).Эта часть на самом деле намного сложнее и включает в себя такие методы, как шифрование всего исполняемого файла и его обертывание внутри загрузчика, который расшифровывает его во время выполнения.Загрузчик также может использовать различные методы для обнаружения присутствия отладчиков.

edit: Поскольку вы упомянули, что приложение написано на JAVA, этот этап шифрования и упаковки еще более важен, так какJAVA может быть легко декомпилирован в очень удобочитаемую форму.Существуют программы «обфускатора», которые возятся с классами, так что декомпиляторы не могут генерировать читаемый код, но взломать это все же гораздо проще, чем взломать что-то скомпилированное в машинный код.чтобы потратить время на разработку собственной защиты, вы также можете использовать одно из коммерческих программ защиты.Их достаточно много, и они предлагают многочисленные схемы защиты (ключи, временные лицензии, ...)

Многие коммерческие программы используют пакеты, такие как FlexNet, HASP, Wibu-key

0 голосов
/ 03 августа 2010

https://superuser.com/questions/14224/how-to-explain-drm-cannot-work/14254#14254

Даже если бы вы установили очень мощную блокировку своего программного обеспечения, пираты все равно нашли бы способ взломать его и разместить на торрент-сайте.(наглядный пример: Spore)

Вы говорите о DRM, и нет простого способа (если таковой имеется), чтобы лишить пиратов возможности пиратского программного обеспечения.Кроме того, вы конкурируете с бесплатными продуктами, которые могут выполнять то же, что и ваше программное обеспечение (всегда так), поэтому вам следует больше сосредоточиться на том, чтобы сделать программное обеспечение простым в установке и использовании, а не сложным в установке и использовании больше, чем вы предполагали.

0 голосов
/ 03 августа 2010

Ты тоже написал свой JRE?Создание безопасной, способной системы активации, которая плавно работает с рядом пользовательских сценариев, с которыми вы столкнетесь (люди без сетевого подключения, брандмауэр, прокси-сервер и т. Д.) И была тщательно протестирована в этой области, требует значительных знаний в области и времени.

Как поставщик таких систем мы должны заявить о своей заинтересованности, но у нас также есть данные - мы видим, что многие компании доверяют разработчику, который говорит, что они могут создать систему лицензирования, а затемпозже они возвращаются к нам, поскольку он никогда не делал то, что им было нужно.Эта статья (моя) раскрывает вопросы: http://knol.google.com/k/dominic-haigh/issues-to-consider-before-building-your/2zijsseqiutxo/6#

0 голосов
/ 02 августа 2010

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

0 голосов
/ 02 августа 2010

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

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

...