保护软件代码的方法
保护软件代码的方法
- 什么是 Java 或 .NET Obfuscator
- 为什么使用 Java 或 .NET Obfuscator?
- Java 或 .NET Obfuscator 会影响性能吗?
- 哪些 Java 和 .NET 程序需要被模糊化?
- 什么是软件水印?
- 选择 Java 和 .NET Obfuscator 时,要考虑哪些问题呢?
什么是 Java 或 .NET Obfuscator ?
TOP精明的政治家知道如何去回避难以回答的问题:混淆。 Obfuscator 隐藏信息,通过含糊不清或者是掩盖了的事实把分析者搞糊涂。
软件 Obfuscator 和政治上的 Obfuscator 相似,但是存在一些很大的差别。 Java 和 .NET Obfuscator 只是迷惑了表面的分析者,而保持了机器编码层的一致性。软件 Obfuscator 使用混淆代码来挫败分析者的同时不破坏程序的执行。
为了阐明 Obfuscator 的工作原理,我们可以以厨师为参考。厨师可以在烹调一道由 7 道菜肴组成大餐的时候允许顾客一道一道地来品尝。然而,厨师作为一个 Obfuscator 完全可以把所有的菜肴混合到一块。合成的混合物会掩盖每一道菜的味道,使得顾客无法分辩,尽管如此却提供了相同的营养价值。
Java 和 .NET Obfuscator 混乱代码以使客户机( JVM 和 CLR )并不明白内部的细节而能够正常使用。 Obfuscator 从编译后的代码中删除一些人或者反向工程软件可以读懂潜在的文字信息。它的目标就是从应用程序中去除上下文联系的同时保持程序的完整性。
Java 和 .NET Obfuscator 并不能提供绝对地保护。通过大量的技巧和坚持不懈的努力,黑客仍然可以反编译出代码的真正含义。 Obfuscator 的目标是提高黑客破解的难度,使得反向工程非常困难,以至于黑客不值得为破解做出那么大的努力。 .
代码 Obfuscator 不会把代码加密。加密技术采用数据密钥。但是因为黑客们能破解密钥或者查找到程序内部的密钥,加密技术也是不可靠的。
为什么使用 Java 或 .NET Obfuscator?
TOP使用 .NET 或者 Java 语言编写的程序易于对其进行反向工程。这并不是设计上的缺陷,只是现代中间语言的一种副产物。 .NET 和 Java 都使用表达能力丰富的语法来编写可执行代码,这在 .NET 中被称为 MSIL (微软中间语言);对 Java 来说就是 bytecode 。现代高级语言的一个优势在于他们能够在比二进制机器代码更高级的层次上工作;中间文件包含实现程序功能所使用的标识符和算法。很明显,很难在隐藏这些基本构成元素的同时保持程序的灵活性和扩展性。
黑客可能会使用一些诸如 Reflector for .NET 反编译器 ( http://www.aisto.com/roeder/dotnet/ ) 或者 JAD Java 反编译器 ( http://kpdus.tripod.com/jad.html ) 来反编译中间语言。对 .NET 或 Java 实施反汇编会揭示出源代码中关键的组件,使黑客们可以查找到软件授权代码、版权保护机制或者私有的商务逻辑和其他的知识产权信息。这些信息任何人都可以加以利用。
开发者使用健壮的混淆技术来保护他的软件。 Obfuscators 能重命名程序集和类中的标志符并使用各种陷阱挫败反编译者。
Java 或 .NET Obfuscator 会影响性能吗?
TOP软件 Obfuscators 并不会降低执行性能。实际上,成熟的 Java 或 .NET Obfuscator 可以通过压缩应用程序来提高性能。 Obfuscators 使用 overload induction (重载感知)的技术重用标志符的名称,它的另一个特点就是可以删除没有使用到的类、方法、局部变量和设计时产生的元数据。这使得应用程序的缩小率可以达到 20-40% 甚至更多。
精简后的程序通常会加载地更快并使用更少的内存。此外,因为程序小了,网络分布式组件程序将会更有效率。
哪些 Java 和 .NET 程序需要被模糊化?
TOP以下几种情况下, .NET 或 Java 程序应该使用 Obfuscator :
- 源代码不是公开的;
- 代码中存在个人敏感信息,比如 SQL 语句,用户名和密码;
- 系统性能,带宽或者程序大小成为限制因素;
也就是说如果程序大小不是问题,源代码是公开的或者是开源软件,就不需要使用 Obfuscator 了。
对企业开发者来说,如果设定一个规范,明确使用 Obfuscator 作为标准的构建工具,而不是把精力放在针对单个具体的程序上,他们将获益良多。因为这做避免了对每个开发项目都花费时间去做重复的工作。
什么是软件水印?
TOP软件的水印使用数字内容供应商保护歌曲、电影和画像相同的手段,来隐藏软件中顾客信息和著作版权信息。水印可以识别软件的所有者,隐蔽地识别出盗版拷贝的来源。
选择 Java 和 .NET Obfuscator 时,要考虑哪些问题呢?
性能,可靠性和技术支持都是重要的需要考虑的因素。
- 能够防止反编译技术得到有用的信息吗?
- 是否使用了基于 XML 的构架?
- 对 Java 和.NET 提供统一的部署环境,使之更易于学习吗?
- 是否提供了详细的配置选项以便用户可以根据自己软件来订制 Obfuscator 吗?
- 可以生成 map 文件以帮助进行堆栈跟踪吗?
- 是否提供了帮助发现问题和调试程序的工具吗?
- 是否使用重载感知技术重命名方法和字段吗?
- 是否具备增量混淆化能力使得发布补丁更容易吗?
- 使用控制流混淆技术破坏反编译者用来重新构建源码级控制结构的模式?
- 能通过修剪和重命名来缩小应用软件尺寸吗?
- 使用有效的字符串加密技术隐藏敏感信息吗?
- 很容易集成到自动化构建系统中吗?
- 能继续提供升级以增加产品功能吗?
除此以外,对于 .NET Obfuscators 来说,以下的事项也是要考虑的。
Obfuscator 通过了微软内部的安全检察和测试吗?
- Obfuscator 可以和 Visual Studio 无缝整合吗?
- Obfuscator 可以及时地升级以支持新版的 Visual Studio 和 .NET Framework 吗?
- Obfuscator 能让 .NET 的验证功能正常使用?
可靠性可以通过经销商过去的销售记录和业界的经验来判断。可以考虑以下的事项来评价。
- 经销商能提供现场支持吗?
- 经销商是否具备丰富的行业经验?
- 经销商可以持续经营多少年?
另外一个评估 .NET 和Java Obfuscator 的方法是考虑专家的意见,比如.NET Framework 的创造者。
- 对于 .NET Obfuscator ,它是否被微软采用并得到认可的?
- 对于 Java Obfuscator ,它是否被 Sun 公司采用并作为 JDK 库的一部分?
PreEmptive Solutions 提供的 Java Obfuscator : DashO 和 .NET Obfuscator : Dotfuscator 在大中国区由总代理 万里鹏翼公司 和台湾/香港/澳门地区代理 创毅科技有限公司 ,负责销售与技术支持。 DashO 和 Dotfuscator 在性能、可靠性、支持和业界的知名度方面具有非常好的可比性。而&# 19988;,该系列产品占据市场领导地位并包含多项专利技术。