Допустим у нас есть приложение, сборки которого обязательно должны быть подписаны. Проблема в том, что наше приложение ссылается на неподписанную сборку от стороннего производителя, причем исходных кодов нет. Понятно, что пока мы не подпишем эту сборку - наше приложение не скомпилируется. Однако подписать чужую сборку если она не рассчитана на отложенную подпись стандартными методами нельзя. Но если очень хочется - то можно :)
Итак:
1. Декомпилируем неподписанную dll в MSIL код.
ildasm providedAssembly.dll /out:providedAssembly.il
2. Убираем куда-нибудь исходную dll (она нам больше не понадобится)
3. Компилируем полученный на этапе №1 код, подписывая его:
ilasm providedAssembly.il /dll /key=keypair001.snk
Самое интересное в этом методе - таким сособом можно подписать даже обфусцированные сборки.
обфуцированные может и можно.. а вот mixed (с native code) - врядли) Если все же можно - сообщите.
ОтветитьУдалитьСовершенно не факт, что получится п.1. Есть множество возможностей не давать ildasm'у декомпилировать свой продукт. Встретившись с подобной проблемой, решил её при помощи программы {SmartAssembly} от компании RedGate, не сочтите за рекламу. Программка бесплатная и помимо своего прямого назначения(обфускатор) позовляет подписывать уже откомпилированные сборки.
ОтветитьУдалитьНу да бесплатная))
УдалитьЛогично - "на всякую хитрую ж... всегда найдется свой ..." :)
ОтветитьУдалитьБыло бы интересно узнать как можно не дать декомпилировать свою сборку...