2012-01-06 3 views
4

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

+0

Хе-хе, вам когда-нибудь удавалось поразить вас, что вы пытаетесь подорвать одну из основных причин существования сильных имен? Я не уверен, почему вы думаете, что это будет так же просто, как переключение командной строки :) Ах, туман войны! – x0n

ответ

7

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

Чтобы подписать сборку в вашей ситуации, вам понадобится ключ. После того, как вы декомпилированы сборку, исправил это - его проще, если вы идете вперед и добавьте следующую строку в области, где другие атрибуты 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 для этого.