對一個手游修改器鎖機APP的分析
背景
在網(wǎng)絡(luò)上搜索到了一款號稱可以無視市面上,任何手游反外掛檢測的手游數(shù)據(jù)修改器。
于是就進(jìn)行下載分析(使用或分析這種未知風(fēng)險的APP,建議都在模擬器上進(jìn)行操作,因為你不知道這APP是否有危害,在模擬器上運行,如果出問題了,頂多就是刪除模擬器然后重新再來,如果再手機上運行,那么這個就可能需要你進(jìn)行刷機才可解決。),在模擬器上安裝完APP,點擊啟動APP然后就出現(xiàn)了下面的一幕。屏幕被鎖了,界面還帶有極具諷刺的文字。
我這個小曝脾氣怎么能忍呢,隨手就把模擬器給刪除了(讓你鎖不了),然后重新創(chuàng)建個模擬器就開始進(jìn)行下面分析了。
基礎(chǔ)信息
一個APP的基本信息分析,一般可以從APP的界面信息、控件信息、文件組成信息、是否加固信息等基礎(chǔ)情況進(jìn)行著手分析。
通過SDK的自帶的uiautomatorviewer控件查看工具,它可以查詢分析APP運行時的控件組成信息,它的所在目錄\Sdk\tools\bin\uiautomatorviewer。
通過控件工具看到這個手游修改器的界面控件主要是有三部分組成的,就是TextView控件也就是文字顯示框(界面顯示那些文字的哪些框框); EditText控件就是可編輯的輸入編輯框(就是哪個輸入鎖機密碼的哪個框架);Buttion控件就是按鈕控件,它可以響應(yīng)指定事件功能的,不過在這個APP中沒有找到具體按鈕響應(yīng)功能。
通過查殼工具(通過識別app中是否有包含第三方加固產(chǎn)品的特定的SO文件)可以看到這個手游修改器是沒有采取第三方加固產(chǎn)品進(jìn)行加固的。
通過APP的AndroidManifest.xml配置文件中,可以識別出這個APP中的包名、SDK版本、四大組件、申請的權(quán)限信息。因此在靜態(tài)分析過程中這個配置文件一般可以作為對APP功能熟悉的第一步,通過這個配置文件可以快速了解這個APP的基本信息。
通過借助jadx工具,可以識別出這個APP中代碼和資源組成部分,這個APP中就是由java代碼實現(xiàn)的,它由8個java類構(gòu)成的完整功能,并沒有使用到native層的代碼,它還有一些自定義的資源,在drawable目錄下。
權(quán)限信息
在android系統(tǒng)的安全機制下,特別在java代碼實現(xiàn)部分,要想進(jìn)行一些系統(tǒng)交互的功能都需要申請對應(yīng)的權(quán)限。只有申請的權(quán)限才能進(jìn)行對應(yīng)的操作。
在APP中的所有申請的權(quán)限都存儲在AndroidManifest.xml配置文件中。
android:name="android.permission.SEND_SMS" 接發(fā)短信的權(quán)限
android:name="android.permission.SYSTEM_ALERT_WINDOW" 彈出全局對話框權(quán)限
android:name="android.permission.RECEIVE_BOOT_COMPLETED" 開機自啟動權(quán)限
android:name="android.permission.INTERNET" 訪問網(wǎng)絡(luò)的權(quán)限
android:name="android.permission.ACCESS_NETWORK_STATE" 訪問網(wǎng)絡(luò)狀態(tài)的權(quán)限
android:name="android.permission.WRITE_EXTERNAL_STORAGE" SDK存儲卡寫入權(quán)限
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" SDK創(chuàng)建刪除權(quán)限
android:name="android.permission.VIBRATE" 允許訪問振動設(shè)備
通過對配置文件中的所有申請的權(quán)限信息,它有幾個敏感權(quán)限申請的操作,彈出全局對話框權(quán)限、開機自啟動權(quán)限。
針對這種高敏權(quán)限,建議在啟動過程中不要授權(quán)(但是很多申請權(quán)限都不符合對應(yīng)的安全合規(guī)要求,因為它們都是屬于有危害的APP。
鎖機功能
鎖屏功能是一種很好的保護(hù)個人手機的數(shù)據(jù)隱私非常重要的策略,但是鎖屏這個功能被一些攻擊者或從事黑灰產(chǎn)者利用后就變成一種非法勒索用戶的手段。
這個APP中的鎖機功能主要由以下步驟實現(xiàn):
先判斷當(dāng)前安裝環(huán)境是否有設(shè)置鎖屏密碼,如果有那么激活設(shè)備管理器賬戶功能進(jìn)行請求更改擦除掉原手機環(huán)境的鎖屏密碼;
進(jìn)行調(diào)用設(shè)定APP啟動后的強制彈出全局對話框界面信息,這個對話框主要有按鈕控件、編輯框控件、文字展示控件,在設(shè)定按鈕控件偵聽事件功能。
通過通過onCreate方法去調(diào)用activiteDevice接口,
這個activiteDevice接口是通過廣播形式去實現(xiàn)達(dá)到,最后調(diào)用android.app.action.ADD_DEVICE_ADMIN進(jìn)行激活設(shè)備管理器賬戶功能。
通過調(diào)用DevicePolicyManager類的 lockNow()函數(shù)進(jìn)行判斷是否有鎖屏和修改鎖屏的功能。
通過結(jié)合權(quán)限申請,然后進(jìn)行彈出全屏對話框,對話框在通過繪制和讀取自定義資源的方式進(jìn)行界面鎖定展示。
自啟動功能
APP自動重啟功能是鎖機功能構(gòu)成功能必不可少的一部分功能,自啟動功能保證了鎖機功能不會因為重啟手機環(huán)境而導(dǎo)致功能的失效。
下面看下這個APP中的自動啟動功能。
從上圖中可以看出,當(dāng)手機設(shè)備啟動成功后,
APP會自動發(fā)送一條android.intent.action.BOOT_COMPLETED的廣播,
接著通過Intent類去查找APP的啟動類com.h.s就是這個APP中的Activity組件(這個s類繼承Service類)。
最后在通過ComponentName這個接口進(jìn)行啟動com.h.s這個Activity(就是這個鎖機的界面),從而實現(xiàn)APP的自動啟動功能。
通過上圖中,可以看出這個S類通過onCreate接口進(jìn)行啟動APP,然后跳轉(zhuǎn)到鎖機的這個界面。
加密功能
這個APP中對輸入鎖屏密碼驗證,它是通過采用對稱的DES加密方式計算出來并進(jìn)行驗證的。
DES對稱加密,它是一種比較傳統(tǒng)的加密方式,其加密運算、解密運算使用的是同樣的密鑰,信息的發(fā)送者和信息的接收者在進(jìn)行信息的傳輸與處理時,必須共同持有該密碼(稱為對稱密碼),是一種對稱加密算法。
DES 使用一個 56 位的密鑰以及附加的 8 位奇偶校驗位,產(chǎn)生最大 64 位的分組大小。
通過對APP中java代碼的分析,它的加密方式是DES對稱加密,知道了加密算法后,那么進(jìn)行解密就有了頭緒有了目標(biāo)。
對于這個APP中的鎖屏密碼獲取,可以用smali插樁的方式或者對DES進(jìn)行解密而獲取到這個加密密碼。
小結(jié)
這個鎖機的APP就是通過偽裝成為手游修改器,這種在游戲中喜歡作弊的玩家就非常容易中槍,因為普通用戶一般拿到APP就會馬上進(jìn)行在手機上安裝,那么你只要安裝并啟動下你就中槍了,你的手機就被鎖機了。
通過基于以上的一些分析和查閱相關(guān)資料,這種非常典型的鎖機,其實功能實現(xiàn)上并沒有什么復(fù)雜的地方,只是它這種鎖屏模式傳播性非常強,其實這種鎖屏有個典型的特征S.java這個文件其實通用的一個模板,這個模板開發(fā)者的最早可以追溯到“薄荷”的開發(fā)者,很多的鎖機APP都是基于頭的模板進(jìn)行修改定制的。
最后來點建議,在網(wǎng)絡(luò)上千萬不要被哪些關(guān)鍵敏感字眼和帶有誘惑性的圖片給吸引,要冷靜冷靜再冷靜,對待網(wǎng)絡(luò)上的東西要保持懷疑的態(tài)度來看待。下載資源和瀏覽對應(yīng)的網(wǎng)頁,最好在官網(wǎng)或者安全的商店上進(jìn)行操作,因為你不知道這些對應(yīng)資源和瀏覽的網(wǎng)頁,背后隱藏著多少你無法看到的黑灰產(chǎn)、網(wǎng)絡(luò)攻擊、網(wǎng)絡(luò)勒索等,它會給你帶來的損失和傷害很多都是致命性的。
作者:小道安全
歡迎關(guān)注微信公眾號 :小道安全