荷花加固 / APP 加固工具、源码与防护技术整理
一、工具与源码获取
1. 荷花加固(易固)成品工具
荷花加固(圈内亦称“易固”)的成品防护工具可在论坛帖子中获取,帖子描述了其核心加固能力:采用 Dex2C 共享 Bridge 方案,Dex2C 无固定方法数量上限;D2M2 按方法独立加密,每个包随机生成方法 token/opcode,调用时即时解密并擦除;广泛覆盖标准 DEX / DEX039,兼容构造器、异常、数组、字段及动态调用等场景。
该工具的控制台提供多种安全策略预设(兼容模式 / 均衡模式 / 严格模式)、自定义 KeyStore 签名与自签模式,并集成运行时防护能力,包括调试附加检测(TracerPid / ptrace)、注入框架检测(Frida / Xposed / Magisk)、环境变量注入检测(LD_PRELOAD / LD_AUDIT)、Hook 框架符号检测、调试进程检测(frida-server / gdb / lldb)及后台持续巡检。
2. 易固(荷花)源码级加固框架
易固是一款面向 Android 平台的源码级应用保护工具,通过深度定制 DEX 文件结构与 APK 构建流程实现保护,核心架构特点包括:基于 Java/Kotlin 源码与 Android 官方 Gradle 构建流程,兼容 Android 高版本系统,无黑盒依赖。加固时,安全防脱代码的 classes.dex 需放入加固前的安装包内,其他 dex 按顺序排在后面,加固后需添加入口 android:name="com.stub.StubApp"。
二、DEX2C 共享 Bridge 技术
Dex2C 的核心原理是将 Dalvik 字节码转换为 C/C++ 原生代码,使被保护方法的 Java 实现被替换为 Native 函数。转换过程中,从待保护 APK 中获取 DEX 文件并逐层解析,得到每条汇编指令能够恢复到 C 语言代码的全部必要信息,针对不同汇编指令建立不同转换逻辑,同时恢复汇编指令前驱、后继之间的连接关系,保证指令类型正确恢复与数据传递一致性。
Dex2C / Java2C 属于第三代加壳技术(VMP / Dex2C 动态库加壳),保护效果在各类加固方案中为最强级别。其 JNI Bridge 生成机制为:每个被保护方法获得一个对应的 JNI(Java Native Interface)函数,当 Android 调用原始 Java 方法时,通过 JNI 透明重定向到 Native C++ 实现。
与 D2M2 的对比
| 维度 | Dex2C 共享 Bridge | D2M2 按方法独立加密 |
|---|---|---|
| 方法数量限制 | 无固定上限 | 按方法独立处理 |
| 加密粒度 | 方法级转换为 Native | 方法级独立加密 |
| 密钥/指令 | Bridge 共享 | 每包随机方法 token / opcode |
| 解密时机 | 转换后直接以 Native 执行 | 调用时即时解密并擦除 |
| 运行时特征 | Native 函数常驻 | 解密后执行即擦除,无残留 |
相关开源项目
-
rufusin/Dex2C:基于 APKEditor 的 AOT 编译器,将 Dalvik 字节码转换为 C++ 代码,通过 JNI 封装为 Native 实现。
-
codehasan/dex2c:基于方法的 AOT 编译器,可将 Dalvik 字节码包装为 JNI Native 代码。
三、D2M2 按方法独立加密技术
D2M2 的核心机制是:对每个方法独立加密,每个包随机生成方法 token 与 opcode,方法被调用时才即时解密并擦除解密后的数据。这一设计使得静态分析无法从 APK 中直接提取到有效的方法体,动态分析也因解密后即时擦除而难以捕获明文指令。
D2M2 加密与 Dex2C 的关键区别在于:Dex2C 是将方法体转换为 Native 代码长期驻留,而 D2M2 是将方法体加密存储,仅在调用瞬间解密执行,执行完毕立即擦除,大幅缩小了内存中明文代码的存在窗口。
四、DEX 039 兼容性与覆盖范围
DEX 039 是 Android 9(API 26)引入的 DEX 格式版本,新增了动态调用相关的两个 Dalvik opcode。荷花加固工具声称广泛覆盖标准 DEX / DEX039,兼容构造器(invoke-direct)、异常处理、数组操作、字段访问及动态调用等场景。
值得注意的是,DEX 039 的 opcode 表与旧版本(如 DEX 035)不同,使用旧版 opcode 表解析 DEX 039 文件会出现兼容性问题。因此加固工具需要在转换和加密过程中正确识别并处理不同版本的 DEX 格式。
五、开源加固方案参考
除荷花/易固之外,以下开源项目提供了可参考的加固实现:
XopProtector — 采用“打包引擎 + 设备端原生壳”架构,核心能力覆盖 DEX 加密、双重 VMP、SO 库加密、反调试及 RASP 运行时防护。项目由 :native(C++ 运行时与 Java 壳 ProxyApplication)、:packer(JVM 打包器 CLI)、:demo(示例应用)和 desktop/(Windows WPF UI)四个模块组成,采用 Apache-2.0 协议,免费商用友好。
nmmp — 基于 dex-vm 运行 Dalvik 字节码实现 DEX 保护,项目分为 nmm-protect(纯 Java,对 DEX 转换、将数据转为 C 结构体、opcode 随机化并生成 NDK 项目)和 nmmvm(Android 项目,包含 dex-vm 实现及 Dalvik 指令测试)两部分。使用时通过 java -jar vm-protect-xxx.jar apk input.apk convertRules.txt mapping.txt 命令生成加固后的 APK。
dpt-shell — 通过 hollow out DEX 方法实现并在运行时重构的方式进行保护,支持 APK 和 AAB 格式,提供反调试、Frida 检测、CRC 检测、签名校验等运行时防护选项。


