AES-256-GCM 资源加密:保护 APK 里的离线内容
什么是资源加密
WebToApp 支持用 AES-256-GCM 算法加密打包进 APK 的本地资源文件。加密后:
- APK 内部的 HTML、CSS、JS、图片文件变成二进制密文
- WebView 运行时实时解密后加载,对用户透明
- 解包 APK(apktool、jadx)只能看到密文,读不到原始内容
哪些类型支持
仅在以下类型下可用:
- 离线包:抓取的整站内容加密
- HTML:本地 HTML/ZIP 打包加密
- 前端:静态构建产物加密
纯网页型(远程加载 URL)、媒体型、服务端运行时型不支持资源加密。
启用方式
在应用的通用配置 → 隐私卡片 → 资源加密打开开关。保存配置后,重新构建 APK(加密在构建时执行)。
加密算法细节
- 算法:AES-256-GCM
- 密钥:由 WebToApp 内部生成或从配置指定
- GCM 模式:提供加密 + 完整性校验——密文被篡改会被检测到
- 运行时解密:由系统 WebView 的内核在加载前完成,不解密到磁盘(内存中解密)
性能影响
加密和解密会带来少量性能开销:
- 构建时:加密会让构建时间增加几秒到几十秒(取决于资源大小)
- 运行时:解密在内存中完成,现代手机上几乎无感知
- APK 体积:密文和明文体积基本相同(AES-GCM 是流密码)
GeckoView 的限制
资源加密只在系统 WebView 内核下生效。如果构建对话框选了 GeckoView,加密配置会被保存但运行时不生效。
常见用途
- 保护源代码:不想让别人解包 APK 看到你写的 HTML/JS/CSS
- 保护内容:比如付费内容、独家资源不想被直接复制
- 商业敏感信息:内部文档或工具的离线包不想被逆向
不能防什么
资源加密是防君子不防小人。有技术能力的人仍然可以:
- hook WebView 的解密过程
- 在内存里 dump 解密后的内容
- 用 Frida / Xposed 等工具绕过
对于大多数个人分发场景足够用,但对于对抗专业逆向工具链的需求还不够。