Android APK混淆加固完整指南

APK加固没有一套适用于所有项目的万能配置。本文以安卓APK资源混淆加密重签名工具为例,按照“基础参数→代码与资源→运行时→包结构→发布验证”的顺序整理各项设置。

安卓APK资源混淆加密重签名工具主界面

1. 处理模式和总原则

全量处理执行解包、混淆、重编译,支持全部功能;轻量处理不解包,速度快、风险低,适合加固后闪退、解包失败或急需交付,但只支持部分选项,属于专业版。切换到轻量模式时,软件自动关闭仅全量支持的选项。

六个分组的边界是:通用设置负责名称、包名、版本、签名和种子;DEX代码混淆负责代码;资源混淆负责图片、文本、XML、JS、Assets;APK防篡改负责运行时校验;APK文件处理负责包结构;APK优化处理负责无用代码、调试信息和日志。DEX、资源、防篡改、优化仅支持全量,通用和文件处理支持全量、轻量。默认勾选组合兼容性最高。

2. 通用设置

应用名称不能包含 <、>、'、"、&。包名只能包含英文字母、数字、点号和下划线,至少两段且每段以字母开头,例如 com.example.app。版本名不能为空,版本码需要是1~2100000000之间的整数。批量处理模式不支持修改应用名称、包名和版本号。

修改包名后,处理APK与原包不是同一个应用,不能覆盖安装;推送、支付、地图、统计等第三方配置也需要同步修改。“生成随机包名”可生成随机包名,“自动随机”会在每次处理时更换包名,“批量不改文件名”让输出沿用原APK文件名。

“增加包体积”填写0~1024之间的整数,单位为MB,软件通过加入随机数据使体积接近目标值,0表示不增加。随机种子留空时每次处理结果不同;填写整数后,在相同APK、相同配置、相同种子下,随机名称、随机资源和处理结果一致,可用于问题复现与历史版本追溯。随机种子不能和“自动重置证书”同时勾选;软件升级后算法可能调整,同一种子跨版本不保证一致。

处理后的APK必须重新签名。软件可使用内建证书,也可通过“添加证书”导入自己的证书。“重置证书”删除当前默认证书并生成新证书,新包无法覆盖安装旧包;“自动重置”每次处理更换证书,与随机种子互斥。

3. 重命名和DEX代码

重命名模式包括字母数字、不可见字符、特殊符号、英文单词、Unicode和混合模式。字母数字由小写字母和数字组成,兼容性最好;不可见字符、特殊符号和Unicode会降低可读性,英文单词更像业务代码,混合模式随机选择上述风格且属于专业版。组件类名、应用包名、资源名、XML命名空间等关键位置会自动使用普通字母数字,发布前必须真机验证。

类重命名、方法重命名、域重命名分别替换类名、方法名、成员变量名并同步引用,建议一起开启。若项目使用反射、JNI、插件化、热修复或硬编码名称,应把相关包加入DEX忽略列表。

注入垃圾代码会生成看似正常的垃圾类和方法,混入真实代码,增加包体积和处理耗时,但软件会控制数量,不超过DEX容量。注入垃圾指令、垃圾分支、垃圾跳转、指令乱序会在不改变执行结果的前提下拉长和打乱代码,通常可保持开启。

调用隐藏包装代码调用,使反编译结果不易看到直接调用链。字符串加密在运行时解密明文,保护接口URL、请求参数、密钥和提示文案,通常建议开启。

DEX加壳为DEX增加保护层,静态分析工具不能直接看到壳内代码;DEX文件加壳增强在此基础上进一步提高脱壳和分析难度,属于专业版,勾选后自动启用DEX加壳。DEX拆分把DEX随机拆成若干份。So文件加密保护APK中的C/C++核心代码。加壳和增强侵入性较高,要完整安装并回归;少数国外小众杀毒软件提示有壳或误报属于可能现象。

4. 资源混淆

资源名称混淆会替换 res 下资源名称;增强版进一步提高随机程度,属于专业版并自动启用基础项。图片资源混淆处理 res 和 assets 的图片,肉眼几乎察觉不到差异但文件特征值改变,点九图不处理。

文本资源混淆处理 assets 下的html、js、css、json等文本,不影响正常使用但会改变文件内容。XML混淆处理Manifest及 res 下XML,调整结构和元素排列。内部包名混淆修改代码内部包结构和包名,隐藏目录组织。

Assets加密处理 assets 中符合条件的文件,使其不能直接打开。JS加密混淆保护H5和混合开发脚本,增强版属于专业版并自动启用JS加密混淆。注入随机资源会增加资源总数和结构复杂度。

5. APK防篡改

包名防修改、APK防重签、反调试、VPN检测、ROOT检测都会在运行时检测异常,发现异常即退出。它们属于强策略:测试版建议全部关闭;如果用户使用代理、VPN、ROOT设备,或需要抓包联调,必须关闭对应选项,正式发布时再按需启用。

6. APK文件处理

防止反编译会处理APK包结构,使常见工具无法直接解析;APK文件魔改修改整体结构,避免被第三方工具反编译和重新打包。targetSdkVersion大于等于30的包开启APK文件魔改后,无法在Android 11及更高版本安装。

APK伪加密处理压缩包,使部分工具无法识别内容;“伪加密兼容安卓8”在此基础上兼容Android 8,强度略低,属于专业版并自动启用APK伪加密。ARSC魔改处理资源索引表,可能使工具报错;DEX魔改处理DEX结构,使工具不能正确解析代码,轻量处理同样支持。DEX魔改不要重复处理已经处理过的包。

APK高级保护进一步保护资源索引与Manifest,属于专业版实验性保护,正式发布前必须安装和回归。APK垃圾注解注入干扰信息,文件时间混淆修改内部文件时间,勾选随机种子时会自动处理文件时间。

资源防解压处理 res,处理后不能用普通解压工具正常解压,也不能被反编译工具直接提取。该选项强制v2签名,仅支持Android 7.0及以上。

7. 优化处理

移除无用代码会清理注释、调试信息等内容,在减小体积的同时减少泄露信息;移除日志信息会移除Java日志输出,避免接口、参数和业务流程出现在调试日志中。这两项通常对兼容性影响较小。

8. 配置组合

兼容性优先

保持默认选项。适合首次尝试、出现过兼容问题或目标机型复杂的APP。

平衡推荐

在默认组合上增加字符串加密、调用隐藏、指令乱序;类、方法、域重命名并选择合适模式;注入垃圾代码、资源名称混淆、图片资源混淆、文本资源混淆;Assets加密、JS加密混淆;移除无用代码和移除日志信息。适合多数国内渠道商业APP。

防护优先

在平衡方案上增加DEX加壳与DEX文件加壳增强、DEX魔改、ARSC魔改、防止反编译;有native代码时增加So文件加密;再增加APK伪加密、APK垃圾注解、文件时间混淆。适合内部系统、授权校验严格且对新机型覆盖要求不高的场景,必须先真机回归。

故障收敛

处理后闪退或功能异常时,依次切换轻量模式;关闭类重命名、DEX加壳、DEX魔改;将崩溃日志涉及的第三方SDK包名加入DEX忽略列表;关闭ROOT检测、VPN检测、反调试;最后查看每轮处理生成的诊断日志。

9. 常见判断

全部勾选不等于最安全。部分选项会叠加提高闪退、功能异常和应用市场拒审概率,应采用“默认→验证→逐步加强”。安装闪退先关闭类重命名、DEX加壳、DEX魔改;报壳或误报时可关闭DEX加壳、APK文件魔改、APK伪加密。配置可通过“保存配置”或“文件→导出配置”迁移。填写随机种子后,相同APK、配置和种子可复现结果。

总结

DEX代码混淆决定反编译后的可读性;资源混淆隐藏资源名、H5和配置线索;APK防篡改使被修改的包退出;APK文件处理限制反编译工具打开;随机种子和重命名模式分别影响可复现性与名称可读性。加固的目标是提高逆向成本,而非绝对安全。发布前务必把处理包安装到真机,完成核心业务回归。

下载页面
官方文档
完整设置说明文档