Надежная подпись и обновление ссылочной сборки - PullRequest
3 голосов
/ 11 мая 2010

У меня две сторонние сборки:

Foo.dll

и

ReferencesFoo.dll

Как уже отмечалось, ReferencesFoo.dll - это сборка со ссылкой на Foo.dll

Для моего приложения мне нужно отказаться от этих сборок. Я использую ildasm / ilasm в сочетании с ключом подписи для их отставки, однако ReferencesFoo.dll все еще содержит (в своем манифесте?) Ссылку на Foo.dll старый открытый ключ и токен открытого ключа.

Итак, как мне подписать обе библиотеки DLL моим ключом и обновить ссылки в ReferencesFoo.dll без получения исходного кода и перекомпиляции?

Ответы [ 3 ]

3 голосов
/ 12 мая 2010

Вы можете легко сделать это с помощью Mono.Cecil . Откройте Foo.dll и сохраните его с новым snk и обновите ссылку в ReferenceFoo.dll на соответствующий токен открытого ключа.

2 голосов
/ 25 мая 2012

Я нашел эту статью, которая демонстрирует, как именно это сделать.

Она включает в себя использование sn, ildasm, ilasm и текстового редактора.

http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing

2 голосов
/ 11 мая 2010

Вы можете подписать сборку с помощью инструмента SN.exe (используя ключ -R для отставки уже подписанной сборки).

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

И я не знаю ни одного инструмента для автоматического изменения ссылок. Вы можете найти их в метаданных # 35, которые структурированы следующим образом:

  • MajorVersion, MinorVersion, BuildNumber, RevisionNumber (2-байтовый константы)
  • Флаги (4-байтовая битовая маска типа AssemblyFlags)
  • PublicKeyOrToken (индекс в Blob куча - открытый ключ или токен, который идентифицирует автора этого Ассамблея)
  • Имя (индекс в куче строк)
  • Культура (указатель на кучу строк)
  • HashValue (индекс в куче BLOB-объектов)
...