鎖屏Pin碼破解
1.實驗原理
Android系統會把pin設定的密碼加密儲存到password.key中,所以破解這個密碼只要把該檔案刪除即可
2.開啟模擬器設定pin密碼,設定之後介面
3.開啟cmd
檢視檔案:adb pull /date/system/password.key
刪除檔案:adb shell rm /date/system/password.key
再次開啟螢幕測試pin密碼可任意輸入或者就直接沒有就破解了。
密碼演算法分析:
在設定鎖屏密碼介面,用工具分析獲取當前的View類,然後一步一步跟入,最終回到了一個鎖屏密碼工具類:LockPatternUtils.
輸入密碼(Pin或者更復雜的密碼):
salt值:當用戶首次提供密碼時,由系統自動往這個密碼里加一些“Salt值”,這個值是由系統隨機生成的,並且只有系統知道。然後再雜湊。而當使用者登入時,系統為使用者提供的程式碼撒上同樣的“Salt值”,然後雜湊,再比較雜湊值,已確定密碼是否正確。 (綜合上述即得就算兩個手機的密碼相同也因為salt值不同而解不開密碼)
userId為使用者當前id,一般裝置不會有多個使用者,所以這裡一般userId預設值就是0。
這裡現在最重要的是如何獲取裝置對應的salt值了,這個可以一步一步跟蹤程式碼:
檢視getSalt方法,他首先會根據欄位key為:lockscreen.password_salt,進行從一個地方獲取salt值,如果發現這個值為0,就隨機生成一個,然後將其儲存到那個地方去,最後會將salt轉化成hex值即可。現在需要找到這個地方,繼續跟蹤程式碼:
這裡猜想應該是儲存到一個資料庫中了,繼續跟蹤程式碼:
這裡是通過SM中獲取一個服務來進行操作了,像這種獲取服務,最終實現邏輯都是在XXXService類中,所以這裡應該是LockSettingsService.java類中,找到這個類,檢視他的getLong方法:
其實到這裡就非常肯定是資料庫儲存的了,繼續跟蹤程式碼:
這裡果然是儲存到一個數據庫中,我們繼續檢視LockSettingStorage.java類:
這裡看到了,資料庫名字叫做:locksettings.db,繼續看這個類:
由此我們就可以找到儲存密碼的檔案
詳細參考網址: