MIUI 锁屏密码破解
背景
MI 8, 已解 Bootloader 锁
前几天刷开发版同时更新到 Android 10, 大约刷后两天发现屏幕无法解锁, 怀疑是系统本身 / 密码验证过程中存在 Bug. 售后表示只能清除全部数据以解锁. 于是自己搞一搞 >_<
这是尝试过程和一种(很)可能的思路. 然鹅由于实在不会 Java 没有进行下去.
由于twrp不提供截图功能, 所以手机截图略......
刷 Twrp
注意各个 Android 大版本的 Twrp 不能通用, 需下载对应的 (例如我的是 Android 10).
网上有大量的 Twrp 教程, 例如这个: http://bbs.ydss.cn/thread-1481180-1-1.html
会下载一个压缩包, 点击 recovery-twrp一键刷入工具.bat
之后几乎是傻瓜式的操作, 跟随指引即可~
刷后在关机状态下 音量上 + 电源键 长按进入 Twrp.
查看文件
进入 Twrp 后会要求解锁 Data 分区, 跳过.
进入高级功能 -> 文件管理, 发现:
/data/data
目录和 /sdcard
目录已被加密, 文件名显示为字母串;
其他目录保持正常.
看起来MIUI会强制对用户数据加密... (我说怎么开机要五分钟) 这对保护用户数据是很好的设计, 但是对于蜜汁无法解锁的手机就相当不友好.
点击挂载 -> 解锁 Data 分区, 发现加密的密钥就是锁屏的九宫格密码. (回到了原点:P)
暴力破解
然鹅 MIUI 并没有加密其他的目录. 我们知道密码保存在 /data/system
目录下的 locksettings.db
和 access_control.key
中.
利用 adb pull
获取这两个文件.
之后可以看这里: https://www.cnblogs.com/tlbb/p/7197371.html
锁屏密码的算法大约是: 把九宫格转换为数组, 加 salt, sha1, 再存储起来. 应该就是 access_control.key
中的内容.
用 sqlite expert
查看 locksetting.db 可以获取 salt
; 再枚举九宫格的密码 (只有 $ \sum_{i=3}^{9} i! $ 个), 利用该算法算出sha1值, 与 access_control.key
对比即可.
但是不会写 Java
这提供了一种破解的思路, 主要原理是: 刷入recovery后, 系统相当于已经完全暴露了, 做什么都可以.
说不定哪天学会了java就来填坑了
一点补充
- 小米手机在上锁 / 解锁过程中自动清除用户数据.
- 在刷入 recovery 的过程不需清除.
- 线刷 ROM (应该) 也清除数据.