Подписание .СЕТЕВЫЕ сборки:Действительно ли это защищает мою сборку от несанкционированного доступа?

StackOverflow https://stackoverflow.com/questions/377619

  •  22-08-2019
  •  | 
  •  

Вопрос

Я внедряю в свое приложение систему "блокировки", которая защищает мое приложение от незаконного копирования и использования.Система проверяет подпись аппаратного кода и ожидает, что он будет подписан закрытым ключом, которым владеет только моя компания.(Приложение получило открытый ключ для проверки подписи.)

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

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

Решение

Подпись сборки предназначена для того, чтобы позволить приложениям / сборкам ссылаться на сборку и быть уверенными, что они получат сборку, на которую они первоначально ссылались.Если бы кто-то захотел, он теоретически мог бы декомпилировать все ваше приложение и перекомпилировать без подписи.(то есть:они могли бы перекомпилировать ссылочная сборка таким образом, чтобы он ссылался на неподписанную версию ссылочная сборка).

Затем они смогли бы изменять код по своему усмотрению, потому что клиент (exe) теперь будет ссылаться на неподписанную (или "повторно подписанную") dll.

Чтобы усложнить процесс декомпиляции и перекомпиляции, вы могли бы попробовать создать сборку C ++ / CLI в смешанном режиме, содержащую как управляемый, так и машинный код.Но да...в конечном счете, у людей есть под рукой все ваши двоичные файлы, и при достаточном усилии они, вероятно, смогут обойти любую систему лицензирования, которую вы придумаете.

Другие советы

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

http://www.codeproject.com/KB/security/StrongNameExplained.aspx

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top