Активация продукта с помощью сертификата открытого ключа - PullRequest
9 голосов
/ 12 августа 2011

Мне нужны идеи, как создать алгоритм активации.Например, у меня есть демо-сертификат.При условии, что приложение работает в демонстрационном режиме.Когда предоставляется сертификат полной версии, приложение запускается в полном режиме.Возможно ли это вообще и как это будет хорошим способом создания этой системы?

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

РЕДАКТИРОВАТЬ: с помощью C # и Windows 7

Ответы [ 7 ]

8 голосов
/ 12 августа 2011

Вы можете сделать что-то вроде:

  1. Создание пары открытый / закрытый ключ
  2. Как владелец закрытого ключа, вы можете подписать эти "сертификаты активации" (теперь они называются AC)
  3. В вашем приложении с открытым ключом вы можете проверить правильность знака

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

Чтобы вы могли:

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

Как уже упоминалось - ничто из этого не защищает от отключения части аутентификации. Но ничего нет, и это может усложнить взломщикам.

5 голосов
/ 25 августа 2011

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

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

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

  1. Программное обеспечение для выполнения заказа сообщает серверу сгенерировать «ключ покупки» и отправить его пользователю
  2. Пользователь вводит «Ключ покупки» в программное обеспечение
  3. Программное обеспечение отправляет ключ покупки и уникальный идентификатор компьютера на сервер.
  4. Сервер объединяет ключ покупки и идентификатор машины в строку, подписывает его сертификатом и возвращает его пользователю.
  5. Программное обеспечение проверяет действительность подписи с использованием открытого ключа Сервера.
  6. Программное обеспечение может проверять множество мест: загружать сигнал во многих местах, проверять его в других.

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

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

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

Или просто купить что-нибудь.

Другой вариант заключается в том, чтобы сервер предварительно сгенерировал «Ключи покупки» и передал их службе выполнения заказов, но тогда вам не удастся связать ключ с данными клиентов (по крайней мере, до тех пор, пока они не зарегистрируются). Лучше, чтобы сервер электронной торговли попал на ваш сервер после совершения покупки, а ваш сервер отправил его.

Сложная часть - это не столько генерация ключей активации, сколько создание сервера, базы данных и интеграция с программным обеспечением для электронной коммерции, и, прежде всего, человеческие проблемы: разрешаете ли вы неограниченную установку за Купить ключ? Только 1? Если только 1, то у вас должна быть поддержка клиентов и возможность позволить пользователю установить его на новый компьютер. Это только одна проблема. Все виды веселья.

2 голосов
/ 12 августа 2011

Этот парень написал в блоге о похожей идее, объясняя, что он делал с их собственным коммерческим программным обеспечением.Также написал список рекомендаций о наиболее очевидных методах взлома.Надеюсь, это поможет.

1 голос
/ 21 августа 2011

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

Правильный способ активации продукта.Создает Cryptographic Nonce , который хранится в базе данных на вашем сервере.Вы даете этот одноразовый номер клиенту, когда он покупает продукт, и затем он активирует его через Интернет.Этот процесс активации может загрузить новый материал, что затруднит злоумышленнику модификацию имеющейся у него копии , чтобы "разблокировать" новые функции.

Но даже с системами DRM, которые требует, чтобы вы были онлайн во время использования продукта.Как и в новых играх, таких как "From Dust", все еще не работает в течение нескольких часов после их выпуска.

1 голос
/ 12 августа 2011

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

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

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

Пожалуйста, примите во внимание, что даже этого решения недостаточно. Есть и другие проблемы с этим:

  1. Все ли версии вашего инструмента будут использовать один и тот же ключ шифрования? Сломать одного из них за то, что сломал все ..
  2. Даже если вы используете разные ключи для каждого выпущенного двоичного приложения, идентичны ли зашифрованные двоичные файлы? После взлома вы можете повторно использовать незашифрованные двоичные файлы для всех распределенных приложений.

Как решить эти проблемы? Там нет простого решения. Большая часть наиболее важного коммерческого программного обеспечения с даже сложными системами защиты выходит из строя всего через несколько часов или дней после выпуска.

0 голосов
/ 08 марта 2012

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

На самом деле это довольно легко сделать с помощью .NET.Вы можете использовать сертификаты x509 или как мы используем в DeployLX Licensing RSACryptoServiceProvider .

Я очень рекомендую купить коммерческий продукт (не имеет значения, какой именнохотя DeployLX превосходен) и не делает это самостоятельно по двум причинам

  1. Даже если вы отличный разработчик, вы, вероятно, ошибетесь в первый раз.И любые сбережения, которые вы могли бы получить, свернув свои собственные, будут потеряны для восстановления после этой ошибки.
  2. Вы потратите гораздо больше времени на работу над своей собственной системой - время, которое вы должны потратить на то, чтобы сделать ваш продукт великолепным.

Второй этап защиты программного обеспечения состоит в том, чтобы убедиться, чтоон работает так, как вы его создали - и не был изменен хакером.На самом деле не имеет значения, какое шифрование вы используете, если хакеры могут проверить if( licensed ) до if( true ).

0 голосов
/ 22 августа 2011

Вы можете использовать AsProtect для решения этой проблемы. Это хорошая начальная точка.

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