1. 程式人生 > >android黑科技系列——修改鎖屏密碼和惡意鎖機樣本原理分析

android黑科技系列——修改鎖屏密碼和惡意鎖機樣本原理分析

無需 功能 log 輔助 數據庫文件 手勢密碼 安全網 樣式 進制

一、Android中加密算法

上一篇文章已經介紹了Android中系統鎖屏密碼算法原理,這裏在來總結說一下:

第一種:輸入密碼算法

將輸入的明文密碼+設備的salt值,然後操作MD5和SHA1之後在轉化成hex值進行拼接即可,最終加密信息保存到本地目錄:/data/system/password.key中

第二種:手勢密碼算法

將九宮格手勢密碼中的點數據轉化成對應的字節數組,然後直接SHA1加密即可。最終加密信息保存到本地目錄中:/data/system/gesture.key中

二、鎖機樣本原理解析

在上一篇文章中也說到了,為什麽要看鎖機密碼加密算法,因為最近玩王者榮耀,下了一個外掛,結果被鎖機了,太坑了,所以就來分析現在市場中通過鎖機來勒索錢財的樣本制作原理:

技術分享

大部分都是采用了系統的設備管理器來獲取權限進而修改密碼,然後提示你需要重啟設備才能有效,這樣的樣本通過特殊的應用名稱和圖標來誘導用戶下載安裝授權,一般小白用戶為了玩農藥,什麽都不管了,直接從網上搜一個安裝就開始操作了,結果被自己坑了,所以下載軟件一定要去正規的應用市場去。別亂下載應用,而這樣的鎖機樣本一般都是會選擇加固,不過可惜他們為了節約成本都是用了非企業版的免費版加固,脫殼就比較簡單了,然後逆向分析代碼就可以找到他設置的鎖機密碼,然後解密即可。

而上面如果是一個小白用戶被鎖機了,幾乎很難解決,因為這時候設備被鎖屏了,連接電腦也是需要授權的,但是得先解鎖,那麽就會發現自己的手機和撿到的一樣,沒法操作了,不過可以選擇拷貝rom到sd下,然後進行刷機或者恢復,這樣的成本就很大了。所以一定要小心。

三、root權限修改鎖機密碼

分析完了上面的鎖機樣本之後,我們知道現階段都是這種需要授權操作,而這種授權一看就有修改鎖屏密碼,一個人上當之後後面可能就沒人在上當了,所以我們得想到其他的辦法進行更加狠的招制作樣本。而上面提到的設備管理器有很多用途的,以前應用為了防止被用戶卸載,也申請了這個權限。因為一旦一個應用具備了設備管理器就不會被卸載了,因為他的權限已經非常高了。不能被卸載。不過可以在設置頁面查看有多少應用具備這個權限:

技術分享

為了安全起見,像這種權限一般都是要選擇拒絕的,安全性非常危險。一旦授權了,不堪設想。

既然前一篇我們已經知道了,設備的鎖機加密算法,而且也知道他存在哪裏,何不利用root權限來進行簡單操作無需申請權限即可修改鎖機密碼,而對於這些想玩遊戲利用輔助工具,對於root權限他們是可以接受的,因為他們並不知道root之後是幹嘛呢?以為是更好的體驗遊戲效果。有了root權限之後,我們就簡單了。直接弄一個新的密碼,不管是手勢密碼還是復雜字符密碼,然後通過加密算法加密,然後在寫入到指定的key文件。重啟設備生效即可。代碼這裏就不多說了,原理很簡單:

技術分享

這樣我們可以構造一個九宮格手勢密碼,或者是數字密碼,然後加密得到內容,在寫到key文件中:

技術分享

然後我們就可以寫一個簡單的鎖機樣本應用了,直接將修改的密碼加密內容寫入到應用沙盒文件中,然後在將文件覆蓋系統的密碼key文件,最後還得重啟設備生效。當然這裏是修改了字符密碼,我們為了更大化操作,可以把手勢密碼也操作一下,這樣就不管用戶設備采用的是哪種類型密碼都可以修改成功了。

四、解決指紋鎖問題

上面就利用root權限修改了用戶的鎖機密碼,但是這裏有一個問題,就是現在很多設備已經支持指紋鎖了,而且指紋鎖未來也是趨勢,那麽如果一個設備用了指紋鎖,該怎麽辦?對於上面利用設備管理器權限就沒法操作了。但是對於root權限我們仍然可以操作,我們在分析了鎖機密碼加密過程中發現,系統會把當前鎖機類型值保存到數據庫中:

技術分享

這個值存在 /data/system/locksettings.db 數據庫中,我們可以查看:

技術分享

這個是十進制數據,我們可以轉化成十六進制就是0x60000了,然後我們查看代碼他對應的是哪種類型:

技術分享

就是復雜的字符密碼類型,當然還有其他類型,這個定義在DevicePolicyManager.java類中。那麽到這裏我們就有思路了,如果設備的類型是指紋鎖,那麽我們可以修改這個表格數據中的這個字段將其變成手勢密碼或者是字符密碼類型,然後在將修改後的這兩種類型密碼寫入到key文件,重啟設備就就可以過濾了指紋鎖密碼了。因為我們有了root權限,讀寫這個數據庫文件不難了,而具體實現代碼這裏就給了,感興趣的同學可以嘗試操作一下。

對於現在各種惡意鎖機軟件,Google官方在不同版本已經給出了防護方案(以下內容摘自安全網絡):

Android L(Android 5.0-5.1)

在早期Android版本中,通過getRunningTasks方法可獲取當前運行棧頂程序,但自Android 5.0起該方法被棄用,同時getRunningAppProcesses與getAppTasks方法的使用也受到了限制,由此抑制了劫持Activity類勒索軟件的出現。

Android M(Android 6.0)

大部分手機勒索軟件的慣用伎倆是通過SYSTEM_ALERT_WINDOW權限來打開特定系統類型窗口並將其顯示在所有其他應用程序和窗口之上,以此達到鎖定用戶設備的目的。Android M的出現使得勒索軟件制馬人在實施手機勒索時遇到了一大瓶頸——動態權限申請,由於自Android M起,SYSTEM_ALERT_WINDOW開始被列為一種危險程度較高的權限而被特殊處理——即需要用戶動態授權。這一改變意味著只要勒索軟件的目標系統為Android M,其就不能如往常一樣在用戶毫無防備的情況下鎖定用戶設備,而是必然有一個用戶授權階段,這對勒索軟件的發展起到了一定程度的阻礙作用。

Android N(Android 7.0-7.1)

與之前版本可任意設置或重置鎖屏密碼不同的是,Android N中明確規定,第三方應用開發者只能使用DevicePolicyManager.resetPassword為無密碼設備設置初始密碼,而不能重置或清除已有的設備密碼。Android N中對於resetPassword API所添加的限制能阻止木馬對已有鎖屏密碼的重置,從而使得部分勒索軟件失效。

而對於窗口樣式鎖機最為常見,就是利用WindowManager設置最高權限,導致設備點擊任何地方沒有反應,而在Android O中已經對這個窗口權限做了嚴重限制:Android O預覽版一經發布就給了勒索軟件致命打擊,新系統禁用了5種窗口。如下圖所示,其中包括3種勒索軟件常用的系統窗口類型,窗口置頂類勒索木馬“賴以生存”的系統窗口類型被限制使用了。

在Android O之前版本中,勒索軟件通過調用特定系統窗口類型將自身窗口完全覆蓋在第三方應用程序與其他系統窗口之上,用戶無法響應其他窗口,由此設備被鎖定;但在Android O中,這幾種具有置頂權限的系統窗口類型被棄用,勒索軟件制作者找不到其他能完全覆蓋第三方應用程序與其他系統窗口的窗口類型,窗口置頂類鎖屏將無法實施。

在Android 6.0之前,使用系統類窗口進行手機勒索十分簡單,只需要在AndroidManifest清單文件中申請SYSTEM_ALERT_WINDOW權限即可使用TYPE_SYSTEM_ALERT、TYPE_SYSTEM_ERROR等高級別窗口,用戶開啟手機勒索軟件後無需額外操作甚至來不及做出反應,系統窗口就已置頂,手機即刻被鎖定。

自Android 6.0起至Android 7.1,Android系統開啟動態權限模型,SYSTEM_ALERT_WINDOW權限開始被列為一項特殊權,盡管其權限級別(Signature)不是Dangerous,但開發者在使用之前也必須動態獲得用戶授權,只有在用戶進行授權後,應用才可以隨意使用TYPE_SYSTEM_ALERT、TYPE_SYSTEM_OVERLAY、TYPE_SYSTEM_ERROR等高級別窗口。在這一階段,用戶通過一項Action——MANAGE_OVERLAY_PERMISSION打開設置“在其他應用的上層顯示”頁面,如下圖所示,用戶手動允許後,系統高級別窗口權限開放,此時即可成功使用這些窗口進行手機勒索。

五、技術總結

到這裏,我們就分析了如何修改Android中鎖屏密碼,主要有兩種方式:

第一種:利用設備管理器權限,直接用系統提供的api修改

第二種:利用root權限和鎖屏密碼算法直接修改系統鎖機密碼文件內容

而這兩種方式操作完成之後都需要重啟設備生效,而對於這兩種方式各有利弊,不過針對於一些遊戲外掛root權限一般都是具備的,所以第二種是最優方案。而對於一些普通惡意應用root權限很少,可以利用第一種方式進行操作是最優方案。

加密算法源碼:https://github.com/fourbrother/AndroidScreenOffPwd

六、安全提示

但是到這裏,是否對於這些惡意鎖機軟件用戶就不能避免呢?當然可以避免,只要你不要有歪想法,比如你玩遊戲為何想到外掛?你為何要去下載哪些不好的應用,因為你心中有雜念。如果你是一個純真的用戶,可能不會選擇其他渠道下載應用,會去正規的市場中下載應用,這樣你不可能被搞,如果你是一個心無雜念的用戶,肯定不會隨意授權給應用,不會選擇root設備。那麽究其原因,哪些非法分子就是利用一小部分人的歪念心裏,制作了這個樣本開始勒索。而如果一旦被勒索了,第一時間是想到的自己解決,刷機或者恢復,不可進行交錢解決,因為對於那些勒索錢財的,不可放縱,就是不要給錢。寧願不要手機,也不給你。當然最後還想想說Android中的這個設備管理器權限特別是修改密碼這個操作本來其實為了用戶設備丟失,進行定位擦除數據或者修改密碼來避免手機更多信息被竊取弄的,但是這樣的api被亂用之後也是不合理的,如果可以期待系統能更加的優化這一塊的功能。

android黑科技系列——修改鎖屏密碼和惡意鎖機樣本原理分析