提起IL,有人会有认为没有完全保护算法的知识产权。换言之,一旦做成了受托管模块,不管是谁用了IL反汇编工具的话,都可以轻而易举地了解应用程序是做什么的及具体是怎么做的(reverse engineering)。
IL比其他的汇编语言高级是个事实。并且一般说来,IL代码容易被反汇编(reverse engineering)。但在实现XML Web服务或Web Form应用程序的时候,受管模块要配置于服务器上。因为是自己公司的模块,除了自己之外谁也不能访问的到,更别说用工具看IL了。知识产权被完全保护。
考虑到有无论如何也要发布的模块的时候可以由第三方加入混乱的方式(obfuscator utility),这种混乱会把受管模块的原数据(meta data)中所有符号的名称变成无意义的名字,加入紊乱(scramble)。通过这个操作,他人想要解除这个紊乱去理解代码中的方法的意义就变得困难得多了。仍然要提醒一下的是通过加入混乱的操作并不能完全保护IL,因为终归要CLR来处理,所以在某个时刻IL总是必需的。
如果认为在加入紊乱的方法中不能达到所希望的知识产权的保护的话,可以考虑把最想保护的算法,不包含在IL和原数据中,在非托管模块中只包含CPU本身的指令。 应用程序的受托管部分和非托管部分之间可以使用CLR的相互调用的功能来实现。显然这个方法,非托管的代码的CPU本身的指令可以轻易被他人发汇编而得到。
原文出于Applied Microsoft .NET Framework Programming 第一部 1.4节
nocomment.