Нам нужно исправить сборку, и мы не можем пересобрать ее из исходного кода в данный момент. Я могу сбросить IL, используя ildasm mydll.dll /all /out=mydll.il, а затем я могу перестроить его с помощью ilasm /dll mydll.il, и все хорошо, за исключением того, что такие вещи, как версия файла, открытый ключ и т. д., отсутствуют в новый бинарник. Как я могу сказать ilasm добавить их? Я пробовал переключатель /mdv без везения.
ildasm, затем ilasm с теми же метаданными
comment
хе-хе, вам никогда не приходило в голову, что вы пытаетесь ниспровергнуть одну из основных причин существования сильных имен? Я не уверен, почему вы думаете, что это будет так же просто, как переключатель командной строки :) Ах, туман войны!
- person x0n   schedule 17.04.2013
Ответы (1)
Ключ никуда не денется - иначе можно было бы взломать чью-нибудь сборку и выдать за оригинал.
Для того, чтобы подписать сборку в вашей ситуации вам понадобится ключ. После того, как вы декомпилировали свою сборку, исправили ее — проще всего будет, если вы добавите следующую строку в область, где находятся другие атрибуты сборки:
.custom instance void [mscorlib]System.Reflection.AssemblyDelaySignAttribute::.ctor(bool) = ( 01 00 00 00 00 )
Этот атрибут указывает ilasm оставить место для ключа. После того, как вы добавили этот атрибут и пересобрали свой код с помощью ilasm, вам нужно использовать утилиту sn для его отложенной подписи. Синтаксис должен быть примерно таким:
sn /R myreassembled.dll originalassemblykey.snk
Это должно уйти в отставку.
Какую версию файла вы имеете в виду? Это должен быть атрибут сборки в IL, но в противном случае вам может понадобиться утилита al.exe для этого.
person
Jason Haley
schedule
06.01.2012