DashO 功能

保护您的Java、 Kotlin和Android应用
混淆不只有重命名。只有分层的方法才能提供所需的保护。回顾下面的每一节以了解更多信息。
重命名
• 控制流
• 字符串加密
• 水印
• 资源加密
• 删除
• 篡改检测与防御
• 调试检测与防御
• 安卓根检查
• 安卓模拟器检查
• 安卓挂钩检查
• 适用期
重命名
重命名混淆会改变方法、变量等的名称,使源代码更难以理解。Dotfuscator使用了一种更深层的混淆形式,该形式为Dotfuscator开发,并由PreEmptive Solutions申请了专利,称为过载诱导(Overload Induction™)。过载诱导不是用一个新名称替换每个旧名称,而是将尽可能多的方法重命名为相同的名称。经过这种深度混淆之后,逻辑虽然没有被破坏,但已经超出了理解范围。下面的简单示例说明了过载诱导技术的威力:
控制流
传统的控制流混淆引入了错误的条件语句和其他误导性构造,以混淆和破坏反编译器。该过程综合分支、条件和迭代构造,生成有效的正向(可执行)逻辑,但在尝试反编译时产生不确定的语义结果。控制流混淆产生的混乱逻辑对破解者来说是非常难分析的。
DashO采用高级控制流混淆。除了添加代码结构外,DashO还通过破坏反编译器用于重新创建源代码的代码模式来工作。最终的结果是与原始代码在语义上等价的代码,但不包含关于代码最初是如何编写的痕迹。即使开发了非常先进的反编译器,它们的输出也只能靠猜测。
混淆之前的源代码 | 过载引诱混淆之后的经逆向工程的源代码 |
---|---|
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; i0: local1 = local10; } i1: local10 = System.String.Compare(this .b, (c) A_0.b); goto i0; } |
字符串加密
DashO允许隐藏二进制文件中出现的用户字符串。一种常见的攻击技术是通过查找二进制文件中的字符串引用来定位关键代码段。例如,如果您的应用程序是时间锁定的,它可能会在超时到期时显示一条消息。攻击者在反汇编或反编译的输出中搜索此消息,当他们找到它时,很可能会非常接近您的敏感时间锁定算法。
DashO解决了这个问题,它允许您在应用程序的这些敏感部分加密字符串,提供了针对这种攻击的有效屏障。
水印
水印通过在应用中嵌入诸如版权信息或唯一标识号等数据,而不影响其运行时行为,帮助跟踪软件的未授权副本到软件的源头。DashO的水印算法不会增加应用程序的大小,也不会引入可能破坏应用程序的额外元数据。
删除
小型应用程序下载、安装、加载、运行更快。DashO的删除功能静态分析您的代码,找到未使用的类型、方法和字段,并删除它们,使应用程序更小,并减少攻击者可用的数据。DashO还可以删除已发布的应用程序中不需要的调试和日志调用等已使用的方法。

使用检查调试检测和防御
检查是预先构建的验证,DashO 可以将其注入到Java和安卓应用程序中。你的应用程序将能够检测未经授权的使用,如调试或篡改。尽管名为“检查”,但“检查”不仅仅是检测这些状态;它们也可以以预先指定的方式做出反应,例如退出应用程序。检查也可以调用应用程序代码,允许基于检查的结果自定义行为。这些报告和响应功能是可配置的每个检查,所以你所有的应用程序可以检测未经授权的使用以相同的方式,但每个应用程序可以对检测的响应不同。

适用期
“适用期”是一个应用程序库存管理功能,它允许您将过期、注销和通知逻辑嵌入到应用程序中。DashO注入通过退出应用程序或发送消息来响应应用程序过期的代码。该特性对beta或评估应用程序特别有帮助。用户可以将应用程序的过期和去激活安排在特定的日期,并可选地向用户发出应用程序将在特定天数内过期和去激活的警告。