强命名的有趣实验

现在有一个强命名的程序集ConsummedLibrary.dll,同时有一个使用该程序集的程序Program.exe。

实验一:

使用ILDASM.exe反汇编Program.exe,把其中引用ConsummedLibrary.dll的信息修改一下,把.publickeytoken注释掉,如下:

.assemblyextern ConsummedLibrary

{

  //.publickeytoken = (E4 6D C9 A7 C3 A5 D6 D7)                         // .m......

  .ver 0:0:0:0

}

然后使用ILASM编译。运行,会出现错误,说找不到指定的ConsummedLibrary.dll。

实验二:

(在实验一的基础上)

反汇编ConsummedLibrary.dll,把其中的签名去掉,如下

//.publickey= (00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00   // .$..............

  //              00 24 00 00 52 53 41 31 00 04 0000 01 00 01 00   // .$..RSA1........

  //              35 15 D1 DB FA CF E2 0C 56 CB DA58 4A 4D C7 12   // 5.......V..XJM..

  //              C9 A6 6E D4 94 F2 BC C0 5A 58 6366 61 16 0D 5D   // ..n.....ZXcfa..]

  //              64 8C 62 8C 50 58 E2 BF A5 9A 0C0A BA 05 45 7C   // d.b.PX........E|

  //              57 EC 54 07 31 FA 22 33 94 CE 6AEB A6 75 16 AB   // W.T.1."3..j..u..

  //              3B 44 3E F5 A8 BD 14 E2 E1 C8 1EED 35 CA E9 ED   // ;D>.........5...

  //              9F DE 26 0D 34 02 96 97 84 D9 A747 92 DD B5 AA   // ..&.4......G....

  //              BC A1 5D FD 1E AE 27 05 E1 5B F5B0 40 4F 40 9D   // ..]...'..[..@O@.

  //              FB 8A 61 02 98 64 BC 54 08 49 9F16 0E 60 3A DC ) // ..a..d.T.I...`:.

再编译,运行,正常。

通过这个例子我知道了:

要修改一个引用强命名程序集的程序,你必须修改至少两个地方。

a.程序本身对于强命名的引用,即把publickeytoken去掉

b.程序集本身的签名

发布了55 篇原创文章 · 获赞 39 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/Chinese521/article/details/38372635