You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防护安卓App中含敏感信息的ArrayList免遭反编译?

针对存储敏感信息ArrayList的反编译防护方案
  • 自定义加密容器替代原生ArrayList
    放弃直接使用原生ArrayList,自行实现具备List核心功能的自定义容器类。对容器内的每个敏感元素采用AES等对称加密算法存储,存取过程自动完成加解密。密钥避免硬编码,可结合设备指纹(如IMEI、Android ID的哈希值)动态生成,降低静态反编译获取密钥的概率。同时为自定义容器类的方法、字段设置强混淆,比如将get()改为无意义的a(),配合minifyEnabled强化混淆效果。

  • 敏感数据碎片化拆分存储
    不要将完整的敏感数据集存入单个ArrayList,拆分后分散存储至多个独立容器或SharedPreferences的不同Key下,读取时再按规则拼接还原。例如把一条敏感数据拆分为3段,分别存入三个小ArrayList的对应索引位置,大幅提升竞品拼接完整数据的难度。

  • 运行时动态加载与即时清理
    避免App启动时一次性加载所有敏感数据到ArrayList,仅在需要使用时从加密本地文件或服务器加密接口拉取并解密。使用完毕后立即调用clear()清空容器,再将容器引用置为null触发GC,减少敏感数据在内存中的留存时间。

  • 强化ProGuard混淆规则
    尽管开启了minifyEnabled true,默认混淆规则对敏感类的保护力度不足。在proguard-rules.pro中添加针对敏感容器类的专属规则:

    # 强混淆敏感容器类的方法与字段
    -keep class com.yourpackage.SensitiveDataContainer {
        <methods>;
        <fields>;
    }
    # 使用自定义混淆字典,提升反编译可读性成本
    -obfuscationdictionary obf_words.txt
    -classobfuscationdictionary obf_words.txt
    # 禁止保留调试与注解信息
    -dontnote
    -dontwarn
    -dontobfuscateannotationclasses
    

    自行生成包含随机无意义单词的obf_words.txt替换默认混淆命名,进一步增加逆向难度。

  • 迁移至Native层处理存储
    将敏感数据的存储、读取逻辑转移至C/C++编写的SO库中,在Native层实现自定义列表结构,Java层仅通过JNI调用接口完成数据操作。Native层代码的反编译、逆向分析成本远高于Java层,同时可在Native层加入设备指纹校验逻辑,非法调用直接返回空数据。

  • 内存层面的防护
    利用Android内存保护API,对存储敏感数据的内存区域设置只读权限,防止内存dump工具获取数据。避免调用toString()等可能暴露数据的方法,自定义数据输出逻辑,仅在必要场景返回部分数据。

内容的提问来源于stack exchange,提问作者Kajal Mondal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:55:12