Android APK 加固方案

APK 加固不是把 APK 变成“不可破解”。它的目标只有一个:提高反编译、篡改、重打包、Hook、接口滥用的成本

一句话:客户端负责增加攻击成本,服务端负责最终可信判断。

Android APK 加固整体思路

1. 加固要防什么

风险 常见手段 加固目标
反编译 jadx、apktool 查看 Dex 和资源 降低代码可读性
二次打包 改代码、插广告、换签名 发现篡改,阻断关键逻辑
动态调试 Android Studio、IDA、Frida、Xposed 增加调试和 Hook 成本
接口滥用 模拟请求、刷接口、绕过客户端校验 服务端识别风险请求
本地数据泄露 读取数据库、SP、文件 减少敏感数据落地

加固不能替代服务端安全。核心密钥、金额、权益、风控结论放在 APK 里,再强的加固也只是延迟被拿到。

2. 总体分层方案

APK 加固分层策略

2.1 构建层:Release 包先做好

所有正式包都应该做这部分,不依赖第三方工具。

措施 建议
R8 混淆 开启代码压缩、优化、混淆
资源压缩 删除无用资源,减少可分析信息
关闭调试 Release 禁止 debuggable=true
去日志 删除 Token、接口返回、用户信息等敏感日志
正式签名 使用正式 keystore,启用 v2/v3 签名
网络安全 禁用明文 HTTP,必要时做证书锁定

R8 是 Android 官方构建链路里的代码压缩、优化和混淆工具。它是 APK 加固前的基础动作,不应该被第三方加固替代。

2.2 包体层:第三方加固重点处理这里

能力 作用 注意点
Dex 加密 避免 classes.dex 被直接静态阅读 可能影响启动速度
字符串加密 隐藏 URL、类名、配置字段 不要把真正密钥放客户端
so 加固 保护 native 层逻辑 注意 ABI 和机型兼容
资源混淆 降低资源可读性 小心影响资源反射读取
完整性校验 检测 APK 是否被改包 校验逻辑也可能被逆向
签名校验 检查当前 APK 是否官方签名 不能只靠客户端判断
反调试/反 Hook 增加 Frida、Xposed 调试成本 容易误伤,必须灰度

适合重点加固的模块:

  1. 支付、会员、优惠券、积分、提现逻辑。
  2. License 校验、设备绑定、反作弊逻辑。
  3. 自研算法、协议封装、核心 SDK。
  4. 不适合完全放服务端、但又不希望裸露的代码。

不建议重度加固的模块:

  1. 普通 UI 页面。
  2. 冷启动关键链路里的非敏感代码。
  3. 强依赖反射、热修复、插件化的模块。
  4. 对兼容性要求极高的基础模块。

3. 第三方加固方案

第三方加固适合大多数商业 App。优点是接入快,能力全;缺点是黑盒多,兼容性和合规要自己验。

第三方 APK 加固选型流程

3.1 常见厂商

厂商/方案 适合场景 常见能力 注意点
360 加固保 个人、中小团队、企业项目 在线加固、本地部署、代码保护、漏洞扫描等 免费能力适合入门,高级能力看收费和兼容性
梆梆安全 金融、电商、政企、强安全业务 防反编译、防调试、防篡改、防二次打包 策略较重时要重点测启动耗时和 ROM 兼容
爱加密 常规商业 App,快速接入 防反编译、防二次打包、防代码注入 配置项多,先小流量验证
阿里云 mPaaS MSA 已使用阿里云/mPaaS 的企业项目 支持 APK/AAB 上传,可选择类、so、assets 防护 注意计费、包名绑定、平台依赖
腾讯云移动应用安全/乐固 应用宝、腾讯云生态项目 在线加固、本地工具、命令行工具等 需要确认当前控制台入口、服务状态和重签名流程

常见第三方 APK 加固方案对比

3.2 推荐选型

项目类型 推荐方案
普通工具类、内容类 App R8 + 基础在线加固 + 签名校验
有登录、会员、优惠券、支付 R8 + 商业加固 + 完整性校验 + 服务端风控
金融、游戏、反作弊 企业版/私有化加固 + so 加固 + 反 Hook + 服务端风险决策
公司代码不能上传外部平台 本地工具或私有化部署,不走云端 SaaS
Google Play / AAB 发布 先确认厂商是否支持 AAB;不支持时不要强行套 APK 加固流程

3.3 第三方加固接入流程

推荐顺序:

  1. Gradle 构建 Release 原始包。
  2. 开启 R8 混淆和资源压缩。
  3. 上传加固平台,或在 CI 中调用本地/命令行加固工具。
  4. 下载或产出加固后的 APK。
  5. 执行 zipalign
  6. 使用正式 keystore 执行 apksigner 签名。
  7. 执行 apksigner verify 验签。
  8. 真机安装测试。
  9. 核心链路回归。
  10. 小流量灰度发布。

关键规则:最终签名之后,不要再改 APK。

如果加固、渠道写入、二次压缩、资源替换发生在签名之后,很容易导致签名失效。

4. 运行时安全

运行时检测主要用于发现异常环境,不要直接当作封号依据。

检测项 目的
反调试 识别调试器附加
反 Hook 识别 Frida、Xposed、LSPosed 等注入环境
Root 检测 判断设备是否存在高风险改动
模拟器检测 识别批量运行、自动化脚本环境
多开/虚拟 App 检测 识别沙箱、分身、重打包运行环境
so 完整性检测 检查 native 库是否被替换

处理策略:

风险等级 建议处理
低风险 记录埋点,降低信任分
中风险 限制提现、领券、改密等敏感功能
高风险 要求二次验证,必要时阻断交易
明确攻击 阻断请求,服务端拉黑设备或账号

不要一检测到 Root 就闪退。Root、模拟器、Hook 检测都可能误伤正常用户。

5. 服务端安全

客户端能被逆向,也能被修改。真正的安全边界必须在服务端。

能力 说明
Play Integrity API 判断请求是否来自真实设备、正版应用和可信安装来源
请求签名 参数加时间戳、nonce,防止重放
设备风险分 结合 Root、Hook、模拟器、IP、账号行为判断风险
权益服务端计算 金额、优惠券、积分、会员状态不要由客户端决定
灰度风控 高风险设备先限权、观察、降级,不要一刀切

Play Integrity API 不是本地防破解工具。它更适合让服务端判断请求来源是否可信。

6. 发布流水线

APK 加固发布流水线

推荐流程:

  1. Release 构建。
  2. R8 混淆、优化、压缩。
  3. 第三方加固或自研加固。
  4. zipalign 对齐 APK。
  5. apksigner 正式签名。
  6. apksigner verify 验签。
  7. 真机安装测试。
  8. 核心链路回归。
  9. 小流量灰度。
  10. 上传应用市场。

7. 分级落地方案

7.1 普通应用

适合:工具类、资讯类、内容类 App。

建议:

  1. R8 混淆和资源压缩。
  2. Release 关闭调试和敏感日志。
  3. 禁止明文 HTTP。
  4. 关键接口加请求签名。
  5. 可接入基础在线加固。

不建议:

  1. 上来就做重型 Dex 加壳。
  2. 大量反调试导致兼容性问题。
  3. 把所有异常环境都直接闪退。

7.2 电商 / 会员 / 支付应用

建议:

  1. R8 混淆。
  2. 关键模块 Dex 加固。
  3. 签名校验和完整性校验。
  4. Hook、Root、模拟器检测。
  5. 服务端请求签名、nonce、防重放。
  6. 优惠、金额、权益全部由服务端计算。
  7. 风险设备限制领券、提现、改密等敏感操作。

核心原则:客户端只展示结果,不决定结果。

7.3 金融 / 游戏 / 反作弊应用

建议:

  1. Java/Kotlin 层强混淆。
  2. 核心逻辑迁移到 native 层。
  3. native 符号剥离和 so 加固。
  4. 运行时反调试、反注入、反 Hook。
  5. Play Integrity API 或同类设备完整性校验。
  6. 服务端设备指纹、行为风控、异常请求限流。
  7. 高风险动作强制二次验证。

不要把反作弊完全放客户端。客户端检测适合做信号采集,最终处罚必须由服务端综合判断。

8. 验收标准

检查项 验收方式
签名有效 apksigner verify 通过
可安装 Android 主要版本真机安装成功
可启动 冷启动、热启动无明显异常
核心流程 登录、支付、分享、推送、WebView、扫码正常
兼容性 主流 ROM、Root/非 Root、32/64 位设备测试
崩溃率 加固前后 crash-free 指标无明显劣化
性能 启动耗时、包体积、内存占用可接受
逆向难度 jadx、apktool、Frida 基础验证
灰度监控 分渠道、分版本监控异常

9. 常见坑

9.1 加固后签名顺序错了

错误流程:先签名,再加固,然后直接上传。

正确流程:构建 Release 包,再加固,再 zipalign,再正式签名,最后验签和安装测试。

9.2 混淆规则写得太粗

大量 -keep class ** { *; } 会让 R8 基本失效。

建议只 keep 反射、序列化、JNI、路由框架必须保留的类。第三方 SDK 使用官方 keep 规则。

9.3 把密钥藏在 APK 里

字符串加密只能增加提取成本,不能保证密钥安全。

不建议放客户端:

  1. 服务端私钥。
  2. 支付密钥。
  3. 全局 AES 密钥。
  4. 长期有效后台 Token。
  5. 可直接调用核心服务的固定凭证。

9.4 加固影响反射和热修复

重点回归这些模块:

  1. Gson、Moshi、kotlinx.serialization。
  2. ARouter、DRouter、TheRouter。
  3. WebView JSBridge。
  4. 热修复、插件化、动态加载。
  5. JNI 方法映射。

9.5 云端加固的合规问题

如果公司代码、算法、业务包不能上传外部平台,就不要使用云端 SaaS 加固。

可选方案:

  1. 本地加固工具。
  2. 企业版离线加固。
  3. 私有化部署。
  4. 自研轻量加固能力。

10. 最终建议

推荐组合:

场景 建议组合
所有正式包 R8 + 资源压缩 + 正式签名 + 关闭调试 + 禁止敏感日志
有登录和交易 请求签名 + Token 短有效期 + 服务端风控
有权益和支付 第三方加固 + 签名校验 + 完整性校验 + Hook 检测
强安全业务 native 化核心逻辑 + so 加固 + Play Integrity + 服务端风险决策

最终结论:

APK 加固不是安全体系的终点,而是发布阶段的一层防护。

可靠方案应该是:

  1. 构建期混淆。
  2. 第三方或自研包体加固。
  3. 运行时检测。
  4. 服务端校验。
  5. 风控灰度处理。
  6. 持续监控和版本迭代。

只做加固,不做服务端安全,本质上还是裸奔。

参考资料

  1. Android Developers:Improve your app’s security
    https://developer.android.com/privacy-and-security/security-best-practices
  2. Android Developers:Enable app optimization with R8
    https://developer.android.com/topic/performance/app-optimization/enable-app-optimization
  3. Android Developers:Play Integrity API
    https://developer.android.com/google/play/integrity
  4. Android Developers:Network Security Configuration
    https://developer.android.com/privacy-and-security/security-config
  5. Android Developers:Android Keystore system
    https://developer.android.com/privacy-and-security/keystore
  6. Android Developers:zipalign
    https://developer.android.com/tools/zipalign
  7. Android Developers:apksigner
    https://developer.android.com/tools/apksigner
  8. OWASP MASTG:Reverse Engineering Android Apps
    https://mas.owasp.org/MASTG/techniques/android/MASTG-TECH-0013/
  9. OWASP MASTG:Obfuscation
    https://mas.owasp.org/MASTG-KNOW-0033/
  10. 360 加固保:移动应用加固平台
    https://360.net/product-center/360-mobile-security/android
  11. 梆梆安全:应用加固介绍
    https://dev.bangcle.com/home/help?id=1
  12. 爱加密:Android 移动应用安全加固
    https://ijiami.cn/android
  13. 阿里云 mPaaS:移动应用安全加固
    https://www.aliyun.com/product/mobilepaas/mpaas_ppm_public_cn
  14. 阿里云帮助文档:Android 安全加固快速加固
    https://help.aliyun.com/zh/document_detail/2365791.html
  15. 腾讯云:移动应用安全 FAQ
    https://cloud.tencent.com/product/ms/faqs