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.dbaccess_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就来填坑了

一点补充

  1. 小米手机在上锁 / 解锁过程中自动清除用户数据.
  2. 在刷入 recovery 的过程不需清除.
  3. 线刷 ROM (应该) 也清除数据.
posted @ 2020-08-03 12:03  Ubospica  阅读(3545)  评论(0编辑  收藏  举报