Подписание сборок .NET: действительно ли это защищает мою сборку от вмешательства? - PullRequest
14 голосов
/ 18 декабря 2008

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

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

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

Ответы [ 4 ]

12 голосов
/ 18 декабря 2008

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

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

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

6 голосов
/ 18 декабря 2008

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

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

5 голосов
/ 18 декабря 2008

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

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

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

2 голосов
/ 04 ноября 2009

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

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

...