android 漏洞 开机密码文件存储位置

时间:2026-10-17 05:05:18 来源:力不从心网

拿到一台已root的洞开Android手机,adb shell进去,机密件存ls /data/system/,码文你会看到几个文件名很直白的储位玩意儿:gatekeeper.pattern.key、gatekeeper.password.key、洞开locksettings.db。机密件存这就是码文开机密码、PIN码、储位图案锁在系统里的洞开落脚点。没root?机密件存那这个目录你连读的权限都没有,Google从Android 6.0开始就把这块锁死了。码文

先聊gatekeeper。储位Android 5.0引入GateKeeper做密码验证的洞开硬件抽象层,到6.0基本定型。机密件存它的码文逻辑是:你设的密码不会以明文或简单哈希存在磁盘上,而是经过scrypt算法加盐处理,再跟硬件密钥(比如TEE里的Keymaster)绑定。存到gatekeeper.password.key里的,本质是一个签名后的blob。换台设备把这个文件拷过去,验证必然失败——硬件密钥对不上。

但这里有个现实中的坑。很多MTK和高通的中低端机型,TEE实现是残的,或者厂商压根没启用硬件绑定。结果就是gatekeeper.password.key只做了软件层的scrypt哈希。安全研究人员拿到这种机器,直接暴力跑字典就能还原出原始PIN。4位PIN的密钥空间才10000,GPU跑scrypt虽然慢,但针对单个salt也就几小时的事。

locksettings.db是个SQLite数据库,路径在/data/system/locksettings.db。它不存密码本身,存的是锁屏策略:密码类型(PIN/图案/密码)、失败尝试次数、自动锁定时间、是否启用了StrongAuth。有个字段叫lockscreen.password_type,数值对应不同锁类型。还有lockscreen.disabled,改成1重启后锁屏就没了——前提是你有写权限。

图案锁比较特殊。早期Android版本(4.x及以前)把图案的SHA1哈希存在/data/system/gesture.key里,文件权限是rw-rw----,owner是system。那个哈希没加盐,网上有现成的彩虹表,几秒钟就能反查出图案。Android 5.0之后这个文件没了,图案也走GateKeeper流程,跟PIN一样处理。但老设备刷了第三方ROM,有些ROM作者图省事,又把gesture.key加回来了。我手上这台2013年的Nexus 7刷了LineageOS 14.1,/data/system/下依然能找到gesture.key的残留。

再说个细节。/data/system/users/0/下面还有settings_secure.xml,里面存了lock_screen_lock_after_timeout和lock_pattern_autolock这些配置。这个文件是XML格式,用文本编辑器直接能看。有次帮朋友恢复一台忘了图案锁的旧三星,adb pull出来这个文件,发现lock_pattern_visible_pattern设成了0,说明图案是隐藏的。但没用,因为验证逻辑不在XML里。

想绕过锁屏,常见路子是删gatekeeper.*.key和locksettings.db,然后重启。系统发现这些文件没了,会走首次启动流程,锁屏就清了。但前提是/data分区没加密。Android 7.0之后默认全盘加密(FDE)或文件级加密(FBE),你连/data都挂载不了,删文件无从谈起。FBE下每个用户的密钥由锁屏密码派生,密码不对,/data/system/users/0/整个目录都是加密的,看到的是乱码。

所以现在能玩的花样越来越少。厂商把锁屏验证下沉到TEE,密钥跟硬件熔丝绑定,文件系统加密又把数据层封死。剩下能做的,要么是找TEE实现漏洞提权,要么是硬件层拆eMMC读裸数据再暴力。前者靠CVE,后者靠钱包。普通用户忘了密码,老老实实恢复出厂设置吧,数据保不住的。

推荐内容