背景
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 (應該) 也清除數據.