對一個手游修改器鎖機APP的分析
背景
在網絡上搜索到了一款號稱可以無視市面上,任何手游反外掛檢測的手游數據修改器。
于是就進行下載分析(使用或分析這種未知風險的APP,建議都在模擬器上進行操作,因為你不知道這APP是否有危害,在模擬器上運行,如果出問題了,頂多就是刪除模擬器然后重新再來,如果再手機上運行,那么這個就可能需要你進行刷機才可解決。),在模擬器上安裝完APP,點擊啟動APP然后就出現了下面的一幕。屏幕被鎖了,界面還帶有極具諷刺的文字。
我這個小曝脾氣怎么能忍呢,隨手就把模擬器給刪除了(讓你鎖不了),然后重新創建個模擬器就開始進行下面分析了。

基礎信息
一個APP的基本信息分析,一般可以從APP的界面信息、控件信息、文件組成信息、是否加固信息等基礎情況進行著手分析。

通過SDK的自帶的uiautomatorviewer控件查看工具,它可以查詢分析APP運行時的控件組成信息,它的所在目錄\Sdk\tools\bin\uiautomatorviewer。
通過控件工具看到這個手游修改器的界面控件主要是有三部分組成的,就是TextView控件也就是文字顯示框(界面顯示那些文字的哪些框框); EditText控件就是可編輯的輸入編輯框(就是哪個輸入鎖機密碼的哪個框架);Buttion控件就是按鈕控件,它可以響應指定事件功能的,不過在這個APP中沒有找到具體按鈕響應功能。

通過查殼工具(通過識別app中是否有包含第三方加固產品的特定的SO文件)可以看到這個手游修改器是沒有采取第三方加固產品進行加固的。

通過APP的AndroidManifest.xml配置文件中,可以識別出這個APP中的包名、SDK版本、四大組件、申請的權限信息。因此在靜態分析過程中這個配置文件一般可以作為對APP功能熟悉的第一步,通過這個配置文件可以快速了解這個APP的基本信息。

通過借助jadx工具,可以識別出這個APP中代碼和資源組成部分,這個APP中就是由java代碼實現的,它由8個java類構成的完整功能,并沒有使用到native層的代碼,它還有一些自定義的資源,在drawable目錄下。

權限信息
在android系統的安全機制下,特別在java代碼實現部分,要想進行一些系統交互的功能都需要申請對應的權限。只有申請的權限才能進行對應的操作。
在APP中的所有申請的權限都存儲在AndroidManifest.xml配置文件中。

android:name="android.permission.SEND_SMS" 接發短信的權限
android:name="android.permission.SYSTEM_ALERT_WINDOW" 彈出全局對話框權限
android:name="android.permission.RECEIVE_BOOT_COMPLETED" 開機自啟動權限
android:name="android.permission.INTERNET" 訪問網絡的權限
android:name="android.permission.ACCESS_NETWORK_STATE" 訪問網絡狀態的權限
android:name="android.permission.WRITE_EXTERNAL_STORAGE" SDK存儲卡寫入權限
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" SDK創建刪除權限
android:name="android.permission.VIBRATE" 允許訪問振動設備
通過對配置文件中的所有申請的權限信息,它有幾個敏感權限申請的操作,彈出全局對話框權限、開機自啟動權限。

針對這種高敏權限,建議在啟動過程中不要授權(但是很多申請權限都不符合對應的安全合規要求,因為它們都是屬于有危害的APP。
鎖機功能
鎖屏功能是一種很好的保護個人手機的數據隱私非常重要的策略,但是鎖屏這個功能被一些攻擊者或從事黑灰產者利用后就變成一種非法勒索用戶的手段。
這個APP中的鎖機功能主要由以下步驟實現:
- 先判斷當前安裝環境是否有設置鎖屏密碼,如果有那么激活設備管理器賬戶功能進行請求更改擦除掉原手機環境的鎖屏密碼;
- 進行調用設定APP啟動后的強制彈出全局對話框界面信息,這個對話框主要有按鈕控件、編輯框控件、文字展示控件,在設定按鈕控件偵聽事件功能。

通過通過onCreate方法去調用activiteDevice接口,
這個activiteDevice接口是通過廣播形式去實現達到,最后調用android.app.action.ADDDEVICEADMIN進行激活設備管理器賬戶功能。

通過調用DevicePolicyManager類的 lockNow()函數進行判斷是否有鎖屏和修改鎖屏的功能。

通過結合權限申請,然后進行彈出全屏對話框,對話框在通過繪制和讀取自定義資源的方式進行界面鎖定展示。
自啟動功能
APP自動重啟功能是鎖機功能構成功能必不可少的一部分功能,自啟動功能保證了鎖機功能不會因為重啟手機環境而導致功能的失效。
下面看下這個APP中的自動啟動功能。

從上圖中可以看出,當手機設備啟動成功后,
APP會自動發送一條android.intent.action.BOOT_COMPLETED的廣播,
接著通過Intent類去查找APP的啟動類com.h.s就是這個APP中的Activity組件(這個s類繼承Service類)。
最后在通過ComponentName這個接口進行啟動com.h.s這個Activity(就是這個鎖機的界面),從而實現APP的自動啟動功能。

通過上圖中,可以看出這個S類通過onCreate接口進行啟動APP,然后跳轉到鎖機的這個界面。
加密功能
這個APP中對輸入鎖屏密碼驗證,它是通過采用對稱的DES加密方式計算出來并進行驗證的。
DES對稱加密,它是一種比較傳統的加密方式,其加密運算、解密運算使用的是同樣的密鑰,信息的發送者和信息的接收者在進行信息的傳輸與處理時,必須共同持有該密碼(稱為對稱密碼),是一種對稱加密算法。
DES 使用一個 56 位的密鑰以及附加的 8 位奇偶校驗位,產生最大 64 位的分組大小。

通過對APPjava代碼的分析,它的加密方式是DES對稱加密,知道了加密算法后,那么進行解密就有了頭緒有了目標。
對于這個APP中的鎖屏密碼獲取,可以用smali插樁的方式或者對DES進行解密而獲取到這個加密密碼。
小結
這個鎖機的APP就是通過偽裝成為手游修改器,這種在游戲中喜歡作弊的玩家就非常容易中槍,因為普通用戶一般拿到APP就會馬上進行在手機上安裝,那么你只要安裝并啟動下你就中槍了,你的手機就被鎖機了。
通過基于以上的一些分析和查閱相關資料,這種非常典型的鎖機,其實功能實現上并沒有什么復雜的地方,只是它這種鎖屏模式傳播性非常強,其實這種鎖屏有個典型的特征S.java這個文件其實通用的一個模板,這個模板開發者的最早可以追溯到“薄荷”的開發者,很多的鎖機APP都是基于頭的模板進行修改定制的。
最后來點建議,在網絡上千萬不要被哪些關鍵敏感字眼和帶有誘惑性的圖片給吸引,要冷靜冷靜再冷靜,對待網絡上的東西要保持懷疑的態度來看待。下載資源和瀏覽對應的網頁,最好在官網或者安全的商店上進行操作,因為你不知道這些對應資源和瀏覽的網頁,背后隱藏著多少你無法看到的黑灰產、網絡攻擊、網絡勒索等,它會給你帶來的損失和傷害很多都是致命性的。