Android中检查getFilesDir()目录结构判断用户篡改是否可靠?
Android getFilesDir() 目录文件规律及篡改检测方案
实体设备getFilesDir()自动生成文件的核心规律
- Android系统本身不会主动在任意应用的
getFilesDir()私有目录下生成通用文件或文件夹。所有该目录下非你方业务代码主动创建的内容,全部来自你集成的第三方SDK、测试设备的厂商定制ROM配套服务,或是你方代码多环境适配逻辑下仅在真机运行时触发生成的文件。 - 你观测到的实体设备独有的文件/文件夹,绝大多数是第三方SDK的环境判断逻辑导致的:部分SDK会识别当前运行环境是模拟器还是真机,仅在真机环境下生成对应配置、缓存或统计相关的文件。
- 不同实体设备上生成的额外文件是否统一,完全取决于来源:如果是通用第三方SDK生成的内容,所有真机上的命名、目录结构完全一致,可以直接加入排除白名单;如果是特定厂商的定制ROM服务生成的内容,仅对应品牌的设备上会出现,其他品牌设备不会生成,无法通过固定白名单覆盖。
落地建议
- 第一步先提取你当前观测到的3个异常内容的命名,反向排查你集成的所有第三方SDK的文档,确认归属后如果是通用SDK生成的固定文件,直接加入排除列表即可正常使用原有校验方案。
- 如果排查后确认是特定厂商独有的生成内容,或是存在多厂商都会生成不同文件的情况,建议更换更可靠的篡改检测方案,规避白名单无法覆盖的问题:
- 放弃全局目录扫描的校验逻辑,仅对你方业务代码生成的核心文件单独做哈希校验,读取时和预存的可信哈希值对比即可判断是否被篡改,无需关注目录下其他无关文件的变化
- 核心业务文件做加密存储,读取时优先校验完整性,从根源降低文件被篡改的风险
- 敏感度极高的配置类文件,可以把哈希值存在服务端,每次启动时请求服务端做校验,规避本地哈希值也被篡改的风险
补充说明:
getFilesDir()是应用私有目录,Android 10及以上系统其他应用无权限访问,普通用户未Root的前提下无法直接修改该目录内容,仅Root设备、adb调试授权、应用安装包本身被篡改这三类场景会出现目录内容被私自修改的情况。
内容的提问来源于stack exchange,提问作者user2638180
相关产品推荐
相关产品推荐

