C # Strong Naming of dll, не обнаружив модификаций - PullRequest
0 голосов
/ 15 июля 2010

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

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

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

Может кто-нибудь объяснить мне, какие данные из сборки используются для создания строгого имени, и почему строгое именование не всегда обнаруживает изменение библиотеки DLL?Есть ли способ заставить его включить дополнительную информацию в строгие имена?

Есть ли альтернативный способ обнаружить повреждение двоичного файла?

Cheers

Райан

Ответы [ 3 ]

0 голосов
/ 15 июля 2010

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

Есть ли вероятность, что ваша сборка будет добавлена ​​в список пропущенных проверок?

0 голосов
/ 22 ноября 2011

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

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

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

0 голосов
/ 15 июля 2010

Вы должны взглянуть здесь: Подписи Authenticode и подписи строгих имен и Как подписать сборки .Net подписью Authenticode?

Эти две подписи полностью независимы друг от друга. Строгое имя помогает обеспечить уникальную идентичность для сборки. Authenticode позволяет проверить, кто является автором сборки.

И

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

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