但其實這個 LockScreen 的圖形密碼(底下簡稱 pattern),是以簡單的方做儲存的。
因此,如果萬一不小心忘記密碼或者被朋友「銃康」,也是有機會可以找回來。
但是,這個還是需要兩個前提 :
- 手機的 USB 除錯模式必須是開啟的,因為要使用 adb 指令
- 手機必須有 root 權限,並允許 ADB Shell 取得最高權限
部分「玩家」有 root 手機的其實大部分都會把 USB 除錯模式打開,這要些人要特別注意萬一手機掉了,別人也是可以輕鬆的破解你的圖形鎖。
首先先來介紹 Android 是如何記錄這個圖形所的:
我們先將九個解鎖圖形點給予 0~8 的編號:
而在依照解鎖路線所經過的點依序將數字排好,比如劃一個 Z 字型:
0 -> 1 -> 2 -> 4 -> 6 -> 7 -> 8
Android 會將這組數字進行加密,並儲存在 /data/system/gesture.key 檔案中。
加密的方式也很簡單,先將這組數字做成一個 byte 陣列:
Java
byte[] ptn = new byte[7]; ptn[0] = (byte)0; ptn[1] = (byte)1; ptn[2] = (byte)2; ptn[3] = (byte)4; ptn[4] = (byte)6; ptn[5] = (byte)7; ptn[6] = (byte)8;
C / C++ ( char is 1 byte )
unsigned char ptn[7]; ptn[0] = 0; ptn[1] = 1; ptn[2] = 2; ptn[3] = 4; ptn[4] = 6; ptn[5] = 7; ptn[6] = 8;
接著按照順序,將這些 bytes 進行 SHA-1 的演算法計算後,直接將結果儲存到 gesture.key 中。如上例,得到的 SHA-1 Code 是
0b 35 b3 c2 9f 2f c6 eb 17 a8 29 eb 75 d7 2d b4 5e 38 59 7b
則 gesture.key 的檔案內容就是這樣:
參考 Code (可以自己改寫執行)
Ideone (可線上執行) : http://ideone.com/YvyLYT
Pastie (純原始碼) : http://pastie.org/9761704
根據 Android 要求解鎖圖形至少要有 4 個點,去算排列組合,大概不到 100000 種組合,如果再扣掉一些 不可跳過的點(如:0 → 2 一定會經過 1 ; 2→8 一定會經過 5),總共的筆數可以在下縮。
因此我們可以將所有狀況都排出來,並計算各自的 SHA-1 Code 製作成字典,並撰寫程式,透過 adb shell 取出 gesture.key ( 一般來說這個是 owner read only,所以需要 root 權限 ),並將檔案內容取出後去字典搜尋找出相對應的 pattern 即可。
做好的 sqlite3 字典檔案壓縮後大約有 50M,有點大,因此這邊先不上傳,有興趣可以用程式自己做。或者等找到適合的空間在上傳。
DEMO 影片: http://youtu.be/kdfsznRAnJA
程式載點:http://www.mediafire.com/download/0n131o27nw5l265/LockHack.rar
因為包含 16xMB 的字典檔案,所以很大,壓縮後有 50MB 左右
adb shell rm /data/system/gesture.key不就好了?
回覆刪除那個是移除圖形鎖設定,這篇是在講找出 Pattren
刪除我安裝了 但是都沒有跑
刪除