今天,大多数商用模糊处理程序都采用重命名技术,这种技术使用最普通的标识符。通常,这些标识符可短至单个字符。在模糊处理程序处理代码时,它不断将一个普通标识符替换为其下一个普通标识符。这种看似简单的重命名方案与哈希方法或字符集偏移相比有一个非常大的优点,即它不可逆。虽然保留了程序逻辑,但名称变得无法解读。此时,我们已在很大程度上阻止了人们对代码的理解。面对诸如 a
、t.bb()
、ct
和 2s(e4)
之类的标识符,将其所表示的语义转换为像 invoiceID
、address.print()
、userName
和 deposit(amount)
这样的概念确实匪夷所思。但是,程序逻辑还是可以进行反向工程处理。
更深层的模糊处理形式是使用重载归纳,这是一种由 PreEmptive Solutions 创造的专利算法。它仍然使用普通标识符重命名,但是增加了一种巧妙的变化。在对方法标识符进行彻底的范围分析之后,对这些标识符进行了最大程度的重载。重载归纳不是将每个旧名称替换为一个新名称,而是将尽可能多的方法重命名为同一名称。在经过这种深度的模糊处理后,尽管逻辑没有被破坏,但已经无法再理解它了。下面这个简单的示例演示了重载归纳技术的强大之处:
模糊处理之前的原始源代码 |
---|
private void CalcPayroll(SpecialList employeeGroup) { while (employeeGroup.HasMore()) { employee = employeeGroup.GetNext(true); employee.UpdateSalary(); DistributeCheck(employee); } } |
在“重载归纳”模糊处理之后, 经反向工程处理得到的源代码 |
---|
private void a(a b) { while (b.a()) { a = b.a(true); a.a(); a(a); } } |
该示例显示经模糊处理的代码更加精简。重命名的一个积极的副作用是代码体积的减小。例如,如果有一个 20 个字符长的名称,将其重命名为 a()
将节省许多空间(确切地说是节省 19 个字符)。重命名还可通过节约使用字符串堆项来节省空间。将每一项都重命名为“a
”意味着“a
”只存储一次,而每个重命名为“a
”的方法或字段都可指向它。重载归纳可以增强此效果,因为它连续重用了最短的标识符。通常,一个重载归纳过的项目将有多达 70% 的方法被重命名为 a()
。
在 Dotfuscator 处理 MSIL 文件时,将从文件中移除调试信息和不必要的元数据。除了加强保护和安全性之外,这种方法还有助于减小 MSIL 文件的大小。
模糊处理这一过程应用于已编译的 MSIL 代码而不是应用于源代码,理解这一点十分重要。开发环境和工具无需更改就可以适应重命名技术。源代码不会以任何方式被更改,甚至不会被读取。经模糊处理的 MSIL 代码在功能上等效于传统的 MSIL 代码,它在公共语言运行库 (CLR) 上执行并产生与原始 MSIL 代码相同的结果。(但是,不能进行逆向操作。即使可能将经高度模糊处理的 MSIL 进行反编译,与原始的源代码相比,它在语义上也将有重大不同。)下图说明了模糊处理的流程。
自 1996 年推出其针对 Java 的 DashO 工具起,PreEmptive Solutions始终致力于保护和改善中间编译软件的工作。其产品因强大、通用和获得专利的独特功能占据了市场的主导地位。
Dotfuscator 作为一个工具系列提供,这些工具使您可以放心使用功能强大的 .NET 平台,而不必担心知识产权保护问题。Dotfuscator 有三个版本:
Dotfuscator Community Edition 是提供基本模糊处理功能的免费版本。其主要用途是重命名标识符,为反向工程处理设置障碍。Dotfuscator Community Edition 合并了多种进行这种保护的高级技术。此外,它还会实现一些减小程序大小的效果(这是重命名为普通标识符的结果)。
Dotfuscator Community Edition 的局限:
- 不能脱离 Visual Studio 单独运行,这意味着它不能用于商用生成环境中。
- 不能重命名 .NET 2.0 泛型类型和方法。
- 不能使用 Dotfuscator 对针对 Microsoft Office 集成编写的托管代码进行模糊处理。
- 不能对旨在运行于 Microsoft SQL Server 2005 内部的托管代码进行模糊处理。
- 仅支持以全局选项的方式使用库模式(对所有的输入程序集启用或禁用库模式)。
- 仅支持以全局选项的方式应用声明性模糊处理设置(对所有的输入程序集启用或禁用声明性模糊处理设置)。
- 不支持以 CLR 为目标的 C++ 应用程序。
如果您的需求超出了这些限制,请联系 PreEmptive Solutions 以了解有关 Dotfuscator Professional Edition 的更多信息。
Dotfuscator Community Edition 许可用户可以使用的功能以 图标标记。
Dotfuscator Community Edition 的注册用户可以免费下载 Dotfuscator Enhanced Community Edition。此版本包括 Dotfuscator Community Edition 的功能,并增加了以下功能:
- 深度 Visual Studio 集成。
- 支持使用 SO 信号增强应用程序的运行时智能。
- 支持使用 SO 信号提供应用程序篡改检测和通知功能。
在 Community Edition 中不包含但在 Dotfuscator Enhanced Community Edition 中包含的功能使用 图标标记。
Dotfuscator Professional Edition 包含了 Dotfuscator Community Edition 的功能以及更多功能。它是业界领先的模糊处理程序,针对生成商用应用程序和企业应用程序的组织而设计。Dotfuscator Professional Edition 提供的功能包括:防止反编译的超强保护,节省内存并减少加载时间的高级减小大小功能,用于进行无缝配置的深度 Visual Studio 集成,用于发布修补程序的增量模糊处理,用于唯一标记程序集的水印处理功能以及电话和电子邮件技术支持。Dotfuscator Professional Edition 许可用户可以使用的功能以
图标标记。
以下是 Dotfuscator 产品功能的横向比较:
功能 | Professional Edition | Dotfuscator Enhanced Community Edition | Community Edition |
---|---|---|---|
压缩/精简 | ![]() |
||
对 .NET Compact Framework 的全面支持 | ![]() |
||
控制流模糊处理 | ![]() |
||
增强的重载归纳 | ![]() |
||
增量模糊处理 | ![]() |
||
附属 DLL 的无缝模糊处理 | ![]() |
||
字符串加密 | ![]() |
||
程序集链接 | ![]() |
||
支持预生成和后生成事件 | ![]() |
||
强名称程序集自动重新签名 | ![]() |
||
与 MSBuild 集成 | ![]() |
||
水印软件 | ![]() |
||
可以独立于 Visual Studio 运行 | ![]() |
||
多种重命名方案 | ![]() |
||
PDB 调试支持 | ![]() |
||
重命名前缀 | ![]() |
||
支持 C++ .NET 程序集 | ![]() |
||
自动堆栈跟踪转换 | ![]() |
||
XML/HTML 报告文件 | ![]() |
||
支持泛型类型和方法 | ![]() |
||
与生成脚本集成 | ![]() |
||
深度 Visual Studio 集成 | ![]() |
![]() |
|
使用 SO 信号启用运行时智能 | ![]() |
![]() |
|
使用 SO 信号启用应用程序篡改检测和通知 | ![]() |
![]() |
|
跨程序集模糊处理 | ![]() |
![]() |
![]() |
移除未使用的元数据 | ![]() |
![]() |
![]() |
重命名 | ![]() |
![]() |
![]() |
支持声明性模糊处理 | ![]() |
![]() |
![]() |
© 2002-2007 PreEmptive Solutions. 保留所有权利。