逆向工程分析
res
、assets
文件夹中的敏感文件(如配置文件、证书)。 数据存储安全
Log.d/i/e
)、崩溃报告(如Firebase Crashlytics)是否携带用户隐私数据。 通信安全
代码混淆与抗逆向
ptrace
检测),防止动态分析。 权限管理
AndroidManifest.xml
中声明的权限是否与功能必要性匹配,避免过度申请敏感权限(如位置、通讯录)。 代码混淆与抗逆向
-keepclassmembers class { @android.webkit.JavascriptInterface <methods>; } -obfuscationdictionary dict.txt # 自定义字典防止关键词被替换
数据加密与存储安全
SQLCipher
库对数据库加密,替代原生SQLite。 MMKV
(微信开源库)或自定义AES加密存储敏感配置。 通信安全防护
// 示例:OkHttp配置证书锁定 OkHttpClient client = new OkHttpClient.Builder() .certificatePinner(new CertificatePinner.Builder() .add("api.example.com", "sha256/ABCDEF...") .build()) .build();
防二次打包
PackageManager
获取签名摘要)。 类别 | 工具/方案 | 适用场景 | 优点 | 缺点 |
---|---|---|---|---|
代码混淆 | ProGuard/R8 | 基础代码混淆 | 轻量、集成方便 | 可被高级工具破解 |
乐固(腾讯) | 高强度加固 | 防逆向、防改动 | 可能增加包体积 | |
数据加密 | SQLCipher | SQLite数据库加密 | 开源、社区活跃 | 需修改现有数据库逻辑 |
MMKV(微信) | SharedPreferences替代方案 | 加密存储、高性能 | 仅支持Android 4.0+ | |
通信安全 | OkHttp + Certificate Pinning | HTTPS通信加固 | 灵活、支持证书锁定 | 需手动维护证书指纹 |
防逆向 | WeCover(微信) | APK加壳与反调试 | 高强度防护、抗逆向 | 可能触发应用市场审核机制 |
问题1:如何防止APK被二次打包?
解答:
PackageManager.getPackageInfo()
获取APK签名信息,与预设的签名摘要(如MD5/SHA256)比对,不一致则拒绝运行。 问题2:数据存储应该选择哪种加密算法?
解答: