加固时具体做了哪些事?
| 步骤 | 做法 | 作用 |
|---|---|---|
| 加密代码 | 全部 classes*.dex 用 AES-256-GCM 加密,放进 assets/encrypted/,原 dex 从包里移除 | 静态反编译只能看到壳,看不到业务代码 |
| 换入口 | 包里只留一个很小的壳 dex,清单的 appComponentFactory 指向它 | 壳在任何业务代码之前运行 |
| 内存解密 | 启动时解密,用系统的 InMemoryDexClassLoader 直接从内存加载,不写磁盘 | 手机存储里找不到解密后的 dex 文件 |
| 绑定证书 | 解密密钥用「签名证书 SHA-256 + 每次随机的盐」通过 HKDF 算出 | 被别人重新签名后算出的密钥不对,App 起不来 |
| 运行时自检 | 启动时检查调试器(TracerPid)、Frida / Xposed / LSPosed 痕迹、签名证书 | 发现后主动退出 |
| 关闭备份 | android:allowBackup 改成 false | 防止用 adb 备份导出应用数据 |
| 重新签名 | 用你上传的 keystore 重签 v1 + v2 + v3,并核对证书指纹 | 证书不变,已上架的应用可以正常更新 |
除了换入口和关备份,清单里的其他内容、你的组件和资源都不会改动。
能防住什么?
- 用 jadx、apktool 等工具直接反编译安装包读代码
- 解包修改后重新签名,再二次分发(密钥绑定证书,改签名就起不来)
- 直接挂调试器,或用常见的 Frida、Xposed 工具注入(默认配置下能发现)
- 通过 adb 备份导出应用数据
防不住什么?
- 有经验的逆向人员。代码运行时总要解密到内存,专业人员可以从内存导出 dex,或者改掉检测逻辑。解密用的证书是公开的,盐也在包里,所以这套设计靠的是「增加分析成本」,不是「密钥保密」。
- 原生库和资源。.so 文件、图片、布局、assets 里的其他文件都没有加密。
- 写在代码里的密钥。API Secret 这类东西放进客户端就要当成已经泄露,应该放到服务端。
- 接口滥用。抓包、伪造请求要靠服务端校验和限流解决。
目前没有做虚拟机保护(VMP)、so 加固和字符串加密。这是基础的 dex 加密壳,如果你的产品涉及金融支付等高风险场景,建议使用专业的商业加固。
加固后对 App 有什么影响?
- 冷启动变慢。每次启动都要解密,dex 越大越慢,上线前请实测。
- 运行可能变慢。从内存加载的 dex 系统不做安装时的预编译(AOT),业务代码更依赖运行时编译,复杂页面可能比原来慢。
- 内存占用增加。解密后的 dex 会常驻内存,占用大约等于 dex 的大小。
- 不能再调试。挂上调试器 App 会主动退出,排查线上问题请依靠日志和崩溃上报。
- 部分 SDK 可能不兼容。依赖 dex 路径或安装包校验的 SDK(热修复、插件化、部分安全组件、设备证明)可能出错,可能出现闪退或功能失效。
- 混淆映射仍然有效。崩溃堆栈的还原方式和原来一样。
一定要先测试再提审。下载成品包,把登录、支付、推送、第三方 SDK 这些核心流程都走一遍,最好覆盖 Android 10 和最新系统各一台手机。我们无法替你验证每个 App 的所有功能。
什么样的包能加固?
| 要求 | 原因 |
|---|---|
| minSdk ≥ 29(Android 10) | 壳依赖的系统能力从 Android 10 开始才完整,更低的系统上 App 打不开 |
| release 包 | debug 包会触发调试检测,自己退出 |
| 没有被其他工具加固过 | 两层壳基本起不来;上传前系统会自动检查常见加固 |
| 没有自定义 appComponentFactory | 壳要占用这个入口;androidx 自带的那个没有问题 |
| APK 文件,不超过 500 MB | AAB 需要先转成 APK |
Google Play 的包不要加固,容易违反 Play 政策,也和 Play 应用签名冲突。不符合要求的包仍然可以只做分发。
商店审核会受影响吗?
可能会。加固不改变应用功能,但部分商店的安全扫描可能对不认识的加固方式给出提示或要求说明,这种情况需要你按商店的要求处理。我们不保证审核通过,也不提供任何绕过审核或安全检测的能力。
我的 APK 和证书安全吗?
- 为什么要上传 keystore:加固改动了包,必须重新签名;证书要和线上版本一致才能更新。
- 证书和密钥:AES-256-GCM 加密入库,绑定你的账号,页面不回显,可随时删除。只在你的任务运行时解密到临时目录,任务结束立即删除。
- 风险提示:托管 keystore 意味着你信任本服务。证书一旦丢失或泄露后果严重,请自己另外妥善备份,不要只存在这里。
- 原始包:加固成功后立即删除。成品包:保留 7 天供下载和重发,到期自动删除。
- 留存记录:为了防止滥用,我们会保留任务记录(账号、包名、版本和原始包的 SHA-256)。注销账号时一并删除。
使用规则
只能处理你有权发布的应用。禁止用本服务隐藏恶意代码、处理他人的应用或规避安全检测,发现后会停用账号并保留记录。