Нам нужно исправить сборку, и мы не можем перестроить исходный код на данный момент. Я могу сбросить IL с помощью ildasm mydll.dll/all /out=mydll.il, а затем я могу перестроить его с помощью ilasm/dll mydll.il, и все это хорошо, за исключением того, что все вещи, такие как версия файла, открытый ключ и т. Д., Отсутствуют новый двоичный файл. Как я могу сказать ilasm, чтобы добавить их? Я пробовал переключатель/mdv без везения.ildasm, затем ilasm с теми же метаданными
4
A
ответ
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 для этого.
Хе-хе, вам когда-нибудь удавалось поразить вас, что вы пытаетесь подорвать одну из основных причин существования сильных имен? Я не уверен, почему вы думаете, что это будет так же просто, как переключение командной строки :) Ах, туман войны! – x0n