ildasm, затем ilasm с теми же метаданными - PullRequest
4 голосов
/ 06 января 2012

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

1 Ответ

7 голосов
/ 07 января 2012

Ключ не туда-обратно - иначе вы сможете взломать чью-либо сборку и выдать ее за оригинал.

Чтобы подписать сборку в вашей ситуации, вам понадобится ключ.После того, как вы декомпилировали свою сборку, исправьте ее - это проще всего, если вы продолжите и добавите следующую строку в область, где находятся другие атрибуты Assmbly:

.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 для этого.

...