StrongName сборка.NET без доступа к исходному ключевому файлу
Я сделал некоторые изменения в коде в существующей.NET сборки DLL. У меня нет ключевого файла, используемого для подписи кода. Как заставить исполняемый файл.NET загрузить его, не регистрируя его для пропуска проверки (не переносимого), не удаляя StrongNames (приложение Damages)?
2 ответа
Вы можете редактировать.NET DLL в Reflexil (дополнение.NET Reflector) и сохранить оригинальную подпись в измененном коде. Спасибо за ответ.
Для тех из вас, кто хочет отредактировать сборку и не оставлять ее в покое, используйте Reflexil. Тот факт, что идиоты, проголосовавшие за этот ответ, не до конца понимают область, на которой они говорят, не делает его неправильным.
Вы не можете, и в этом весь смысл сильных имен.
Строгие имена подтверждают, что исполняемый файл не был подделан кем-то, кто не является автором. (Предполагается, что автором является любой файл с исходным файлом ключей.) Поскольку у вас нет файла ключей, вы не должны быть его автором, и из-за такого строгого именования вы не сможете внести необходимые изменения.
Если вы хотите загрузить свою DLL, вам придется использовать любое решение, которое вы предложили.
РЕДАКТИРОВАТЬ Начиная с.NET 3.5 с пакетом обновления 1 (SP1), проверка строгого имени обходится, если выполняется хотя бы одно из следующих условий:
- сборка полностью подписана с помощью Authenticode;
- собрание полностью доверено (безотносительно к доказательствам его строгого имени);
- сборка загружается в полностью доверенный домен приложений (что и происходит с настольными приложениями в большинстве сценариев);
- сборка загружается из местоположения под доменом приложения
ApplicationBase
(т.е. сборка распространяется вместе с приложением и существует в том же каталоге).
В основном, проверка строгого имени была отключена для каждого варианта использования, кроме Silverlight. Однако системный администратор может повторно включить проверку имени по умолчанию с помощью ключа реестра:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"AllowStrongNameBypass"=dword:00000000
Microsoft говорит, что причиной этого изменения является то, что строгие имена были не механизмом проверки целостности, а механизмом идентификации сборки. Для проверки подлинности целостности, Authenticode - это путь.
Это означает, что для практических целей строгие имена бесполезны, чтобы предотвратить вмешательство, и любой может вмешаться в любую сборку и по-прежнему загружать ее правильно, если только системный администратор не запрещает это.
Чтобы правильно ответить на этот вопрос, следует отметить, что изменение сборки приведет к аннулированию ее строгого имени, и, как таковой, нет способа отредактировать DLL без аннулирования строгого имени, если snk недоступен. Однако это не помешает его загрузке в большинстве случаев.