1. 程式人生 > >鎖屏Pin碼破解

鎖屏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.

Java

輸入密碼(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,繼續看這個類:

由此我們就可以找到儲存密碼的檔案

詳細參考網址:

https://blog.csdn.net/qq_36946260/article/details/75232263