1. 程式人生 > >手機開鎖密碼忘了只能刷機?Python破解Android密碼只需20行!

手機開鎖密碼忘了只能刷機?Python破解Android密碼只需20行!

 

這幾天在作比賽,挺有意思的,聽說是給大一的孩子玩的,我們這幫老人就無恥地去參加了。。
                學習Python中有不明白推薦加入交流群
                號:516107834
                群裡有志同道合的小夥伴,互幫互助,
                群裡有不錯的學習教程!

有道題,給出了一個Gesture.key,要我們破解。

手機開鎖密碼忘了只能刷機?Python破解Android密碼只需20行!

 

這個就是SHA1的加密嘛。

題目:Android螢幕解鎖圖案破解

Android手機上有一個螢幕解鎖的應用相信大家都不陌生,在 Android 裝置上,使用者可以通過設定鎖定圖案作為密碼對裝置使用者介面進行鎖定,鎖定介面如下圖所示。

手機開鎖密碼忘了只能刷機?Python破解Android密碼只需20行!

 

一般的Android手機的鎖定介面由九個點構成,設定圖案需滿足三個要求:

至少四個點;

最多九個點;

無重複點。

這種看似複雜的解鎖方式在 Android 儲存時使用的是明文轉換後採用雜湊方式儲存。Android 裝置圖案鎖定的加密儲存過程:

手機開鎖密碼忘了只能刷機?Python破解Android密碼只需20行!

 

下面設定一個圖形加密鎖測試一下:

第一步:圖形輸入。

手機開鎖密碼忘了只能刷機?Python破解Android密碼只需20行!

 

輸入上圖一樣的圖案(看上去是個“2”,使用了九個點。)

第二步:明文加密。

這一步是系統自動完成的,首先是九個點的資料含義,含義是這樣的:從左上角起編號為 00,至右下角止編號為 08。那麼上圖中“2”的編碼應該是000102050403060708。使用SHA1演算法對上述十六進位制編碼進行計算後得到密文“333d9f31c209ce1217bc165c5baa7307b06bbf87”。這一步系統會自動將圖案轉換成編碼,在將編碼算出密文的。因此我們是看不到的。

第三步:密文儲存。

計算好密文後,系統會將密文儲存在/DATA/SYSTEM/GESTURE.KEY檔案中,我們可以使用“adb pull /data/system/gesture.key gesture.key”將這個密碼檔案系在到本地,得到密碼檔案後,用記事本開啟是亂碼的,要用十六進位制編輯器開啟才可以看到密文。

手機開鎖密碼忘了只能刷機?Python破解Android密碼只需20行!

 

可以看到密文和上一步我們計算出來的是一樣的。

對上面演算法總結一下規律。從密碼明文的編碼來看,各單數位數字為零,雙數位數字不重複地排列,並將這個排列進行單次SHA1運算。那麼也就是說,通過數學計算可知,由於單數位確定,雙數位不重複,則根據 Android 圖案鎖定規則可以設定的鎖定圖案總數是固定的,4個數的密碼個數為9*8*7*6=3024。5個數的密碼個數為15120個。6個數的密碼個數為60480個。7個數的密碼個數為181440個。8個數和9個數的密碼個數都是36288個。也就是說一共密碼的可能個數為985824個。由於密碼複雜程度不高,破解相對容易。只要做一個字典進行暴力猜解就可以將正確密碼解出來且速度很快。生成的字典50多m,暴力破解速度基本是秒破的。

手機開鎖密碼忘了只能刷機?Python破解Android密碼只需20行!

 

當然如果只是為了搞定這個密碼,還有更簡單的方法,就是直接adb shell到裝置上,然後執行“rm /data/system/gesture.key”命令將密碼檔案刪掉就可以了,刪除後相當於沒有裝置圖案鎖。

破解android螢幕解鎖圖案就是這麼簡單,希望大家喜歡。

其實真不難寫:

1.python的窮舉怎麼搞?

手機開鎖密碼忘了只能刷機?Python破解Android密碼只需20行!

 

用到了:itertools.product()那麼在本次解決方案中就應該:

手機開鎖密碼忘了只能刷機?Python破解Android密碼只需20行!

 

2.16進位制怎麼整

這個其實真不算難題,只是我個人傻逼而已,很簡單,\x00 就表示16進位制的0

程式碼:

手機開鎖密碼忘了只能刷機?Python破解Android密碼只需20行!

 

上述程式碼,其實是預設解碼的手勢為9個點,也算是運氣好吧,9個就出來key了。。嚴謹點應該repeat = 9,8,7,6,5,4 都有可能!