ildasm, затем ilasm с теми же метаданными

Нам нужно исправить сборку, и мы не можем пересобрать ее из исходного кода в данный момент. Я могу сбросить IL, используя ildasm mydll.dll /all /out=mydll.il, а затем я могу перестроить его с помощью ilasm /dll mydll.il, и все хорошо, за исключением того, что такие вещи, как версия файла, открытый ключ и т. д., отсутствуют в новый бинарник. Как я могу сказать ilasm добавить их? Я пробовал переключатель /mdv без везения.


person ILovePaperTowels    schedule 06.01.2012    source источник
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