воскресенье, 16 марта 2008 г.

Как подписать стороннюю сборку

Допустим у нас есть приложение, сборки которого обязательно должны быть подписаны. Проблема в том, что наше приложение ссылается на неподписанную сборку от стороннего производителя, причем исходных кодов нет. Понятно, что пока мы не подпишем эту сборку - наше приложение не скомпилируется. Однако подписать чужую сборку если она не рассчитана на отложенную подпись стандартными методами нельзя. Но если очень хочется - то можно :)

Итак:

1. Декомпилируем неподписанную dll в MSIL код.

ildasm providedAssembly.dll /out:providedAssembly.il


2. Убираем куда-нибудь исходную dll (она нам больше не понадобится)

3. Компилируем полученный на этапе №1 код, подписывая его:

ilasm providedAssembly.il /dll /key=keypair001.snk



Самое интересное в этом методе - таким сособом можно подписать даже обфусцированные сборки.

4 комментария:

  1. обфуцированные может и можно.. а вот mixed (с native code) - врядли) Если все же можно - сообщите.

    ОтветитьУдалить
  2. Совершенно не факт, что получится п.1. Есть множество возможностей не давать ildasm'у декомпилировать свой продукт. Встретившись с подобной проблемой, решил её при помощи программы {SmartAssembly} от компании RedGate, не сочтите за рекламу. Программка бесплатная и помимо своего прямого назначения(обфускатор) позовляет подписывать уже откомпилированные сборки.

    ОтветитьУдалить
  3. Логично - "на всякую хитрую ж... всегда найдется свой ..." :)

    Было бы интересно узнать как можно не дать декомпилировать свою сборку...

    ОтветитьУдалить