在当今这个信息爆炸的时代,知识产权的保护变得尤为重要。最近,华盛顿特区学区被指控在其提交给议会的提案中,大量抄袭了北卡罗来纳州夏洛特-梅克伦堡学区的文件。尽管华盛顿特区市长对此丑闻表示了深切的关注,但这反映出一个现实:在现代网络环境中,抄袭他人的成果比亲自努力工作要容易得多。抛开道德层面的讨论,当快速获利的机会被现代网络掠夺者轻易利用时,疲惫的开发者们该如何应对呢?
随着时间的推移,人们窃取源代码的方法变得更加复杂。尽管核心.NET代码被编译后的.NET程序集所隐藏,但黑客仍然可以利用其中的漏洞。在程序集中搜索字符串可以指示黑客可能的攻击点,然后他们可以使用反编译器将对象从.NET程序集中分离出来。
接下来,反编译器发挥作用,从反编译的对象中逆向工程出高级语言核心代码。使用反编译器,人们可以阅读团队辛苦编写和编译的代码。反编译器和反编译器的联合使用可以使知识产权完全暴露于恶意使用之下。
在现代商业环境中,混淆器对于保护专有代码至关重要。有效的混淆可以极大地阻碍逆向工程。这意味着竞争对手无法从辛勤工作中获益。混淆器作用于编译后的.NET程序集,而不是核心代码。它们通过用无意义的字符改变程序集中的标签标识符,使逆向工程变得更加困难。混淆器提供的程序集将与用纯语言编写的程序集执行相同的功能,但在代码形式上对窥探的眼睛来说是不可理解的。
好处是显而易见的。如果竞争对手能够逆向工程知识产权,他们不仅可以为自己的用途使用代码,而且不需要为许可证付费,并且可以轻松地修改代码以满足自己的需求并重新编译。这是一个严重的问题,可能会对企业和它们的底线产生真正的影响。
如果将混淆后的代码推送给客户,并且客户发现了错误,那么解决问题可能会很困难,因为通过混淆器应用的补丁将与发送给客户的原始代码分配了不同的标识符。增量混淆将映射补丁中的标识符到原始代码的标识符。
控制流混淆将作用于代码中的控制结构。反编译器的工作原理之一是寻找代码中的常见命令字符串,如for/while/if。控制流混淆使得原本容易被重构的命令,如for/while/if,变得无法识别,反编译器因此被迫即兴发挥。接下来发生的事情是,反编译器开始创建goto调用,试图复制原始功能,这样做的过程中,反编译器本身容易引入错误的循环和无法理解的代码。控制流混淆利用黑客的工具对抗他们自己的主人。
有许多商业产品可以帮助应对这一对知识产权的严重威胁,包括:
9Rays.Net的Spices.Obfuscator是一个获奖工具,配备了一些独特的功能,使其在保护关键专有代码方面非常有价值。Spices.Obfuscator允许开发者在同一台机器上支持多个版本的Microsoft Visual Studio(2003和2005)。专利代码匿名化技术使代码对窥探的眼睛毫无意义。
Spices.Obfuscator能够自动化,为用户提供更大的灵活性,因为他们现在可以通过脚本和构建环境(如MSBuild和NAnt)管理和维护混淆。可以维护混合的托管和非托管程序集。
高质量的混淆器允许开发者积极参与代码格式化,以确保软件开发生命周期中所需的下游处理和支持可以与正在部署以抵御黑客的保护混淆工具一起工作。例如,Spices.Obfuscator允许开发者排除某些程序集成员的混淆,如果它们被设计为由未混淆的代码使用,保持某些重要成员的命名约定标准化是很重要的,否则混淆过程会使代码变得毫无意义。
混淆器还将帮助代码,因为混淆器的命名约定取代了编写的标识符,从而减少了元数据的大小。元数据大小的减少将转化为更高效的程序,因此代码执行更加流畅。
混淆和反编译本身是保护代码的整体的一部分。它们并不代表魔法子弹,可以使代码对试图保护它的人无懈可击。相反,与其他可用的产品一起,并通过智能编码实践,开发者可以保护财产免受窥探的眼睛。
9Rays提供了上述的Spices.Obfuscator和Spices.Decompiler以及其他一些工具——Spices.VSIP(具有MSBuild集成的Visual Studio集成包)、Spices.Modeler、Spices.Investigator、Spices.Informer和Spices.Documenter——它们一起被提供为一个强大的整体解决方案,称为Spices.Net Suite。
Spices.VSIP支持完整的生命周期过程,以自动化的形式,协助初始开发、构建和编译、混淆程序集、验证应用程序和代码的完整性、协助需要的调试,并协助部署到客户的现场。Spices.Modeler自动创建项目的图形层次视图,程序集、类,并指示成员之间的无数相互关系。
逆向工程对竞争对手和许多希望为自己赢得名声的业余黑客来说是一个巨大的诱惑。除非采取措施减少其可见性,否则知识产权是不安全的。混淆、反编译和其他方法一起使用并不能保证代码的完整性免受窥探的眼睛,但它们所做的是使代码对坏人不那么诱人。受保护的代码与另一家公司的未受保护的代码相比,使另一家公司的知识产权成为一个更具吸引力的目标。