Dotfuscator 功能
应用加固包括混淆和应用自我保护功能。只有分层的方法才能提供所需的保护。回顾下面的每一节以了解更多信息。
重命名
• 控制流
• 字符串加密
• 水印
• 剪枝
• 链接
• 篡改检测与防御
• 调试检测与防御
• 适用期
• Xamarin.Android根检查

重命名
重命名混淆会改变方法、变量等的名称,使源代码更难以理解。Dotfuscator使用了一种更深层的混淆形式,该形式为Dotfuscator开发,并由PreEmptive Solutions申请了专利,称为过载诱导(Overload Induction™)。过载诱导不是用一个新名称替换每个旧名称,而是将尽可能多的方法重命名为相同的名称。经过这种深度混淆之后,逻辑虽然没有被破坏,但已经超出了理解范围。下面的简单示例说明了过载诱导技术的威力:
控制流
传统的控制流混淆引入了错误的条件语句和其他误导性构造,以混淆和破坏反编译器。该过程综合分支、条件和迭代构造,生成有效的正向(可执行)逻辑,但在尝试反编译时产生不确定的语义结果。控制流混淆产生的混乱逻辑对破解者来说是非常难分析的。
Dotfuscator采用高级控制流混淆。除了添加代码结构外,Dotfuscator还通过破坏反编译器用于重新创建源代码的代码模式来工作。最终的结果是与原始代码在语义上等价的代码,但不包含关于代码最初是如何编写的痕迹。即使开发了非常先进的反编译器,它们的输出也只能靠猜测。
混淆之前的原始C#代码 | 控制流混淆之后的经逆向工程的C#代码 |
---|---|
public int CompareTo(Object o) { int n = occurrences – ((WordOccurrence)o).occurrences; if (n == 0) { n = String.Compare(word,((WordOccurrence)o).word); } return (n); } |
public virtual int _a(Object A_0) { int local0; int local1; local 10 = this .a – (c) A_0.a; if (local0 != 0) goto i0; while (true ) { return local1; } i1: local10 = System.String.Compare(this .b, (c) A_0.b); goto i0; } |
字符串加密
Dotfuscator允许隐藏程序集中出现的用户字符串。一种常见的攻击技术是通过查找二进制文件中的字符串引用来定位关键代码段。例如,如果您的应用程序是时间锁定的,它可能会在超时到期时显示一条消息。攻击者在反汇编或反编译的输出中搜索此消息,当他们找到它时,很可能会非常接近您的敏感时间锁定算法。
Dotfuscator解决了这个问题,它允许您在应用程序的这些敏感部分加密字符串,提供了针对这种攻击的有效屏障。
由于字符串加密会导致轻微的运行时损失,除了在您指定的应用程序部分上,不会执行字符串加密。
水印
水印通过在.net应用程序中嵌入诸如版权信息或唯一标识号等数据,而不影响其运行时行为,帮助跟踪软件的未授权副本到软件的源头。Dotfuscator的水印算法不会增加应用程序的大小,也不会引入可能破坏应用程序的额外元数据。
剪枝——删除未使用的方法
小型应用程序下载、安装、加载、运行更快。Dotfuscator的剪枝功能静态分析您的代码,找到未使用的类型、方法和字段,并删除它们。Dotfuscator还在处理MSIL文件时从该文件中删除调试信息和非必要的元数据,使应用程序更小,并减少攻击者可用的数据。
链接——程序集合并
Dotfuscator可以将多个输入程序集组合为一个或多个输出程序集。程序集链接可以使您的应用程序更小,特别是在与重命名和剪枝一起使用时,还可以简化部署场景。
例如,如果您有输入程序集A、B、C、D和E,您可以链接程序集A、B和C并将结果命名为F。同时,您也可以链接D和E并将结果命名为G。唯一的规则是您不能将同一个输入程序集链接到多个输出程序集。

篡改检测及防御
Dotfuscator注入代码,在运行时验证应用程序的完整性。如果它检测到篡改,它可以关闭应用程序,调用随机崩溃(以伪装崩溃是篡改检查的结果),或执行任何其他自定义操作。
有关篡改防御的更多信息,请参阅我们的篡改防御事实说明。
使用检查调试检测和防御
检查是预先构建的验证,Dotfuscator可以将其注入到.net应用程序中。你的应用程序将能够检测未经授权的使用,如调试或篡改。尽管名为“检查”,但“检查”不仅仅是检测这些状态;它们也可以以预先指定的方式做出反应,例如退出应用程序。检查也可以调用应用程序代码,允许基于检查的结果自定义行为。这些报告和响应功能是可配置的每个检查,所以你所有的应用程序可以检测未经授权的使用以相同的方式,但每个应用程序可以对检测的响应不同。

XAMARIN.ANDROID根检测
根设备是Android应用程序的一个重要安全问题。Dotfuscator可以检测应用程序何时在根设备(脱机或网络上)上运行,用户可以中止会话、隔离应用程序和/或报告事件。