「荒野行動盒子」Root鎖屏勒索樣本分析
這是一篇非反病毒工程師的非專業分析,寫完發現更像逆向教程,文中如果有疏漏,歡迎批評指正。
0x00 前言
最近在吾愛破解論壇病毒救援區看到一個鎖機樣本,說是root鎖,雖然帖子好幾天了但還沒人分析,樓主應該線刷系統了,打算就以這個練練手吧。很久也沒分析鎖屏App了,之前有個王者榮耀輔助的樣本,不過沒root鎖,想看看最近勒索App有什麼新花樣。話說,現在惡意軟體都喜歡蹭熱度,什麼遊戲流行就偽裝什麼外掛。
0x01 信息收集
先安裝樣本到模擬器里看看(模擬器萬一搞壞了,大不了卸載重新安裝),安裝完成後會有一個「荒野行動盒子」的圖標,運行後發現App申請Root許可權,(很多外掛都需要Root許可權,勒索軟體以外掛為名倒是很容易讓人放鬆警惕):
這裡點擊「永久記住選擇「,然後點擊」允許「,看看勒索軟體搞什麼鬼。發現這個勒索App還做了一個外掛界面:
等一會模擬器自動重啟了。重啟完成後,發現如願以償,模擬器被鎖了,鎖屏界面如下(鎖屏界面忒丑了):
隨便輸入「123456「,點擊」解鎖「發現沒有反應,點擊高亮的」解鎖20元「,發現有提示:
意思是點100次就會解鎖,這種都是調戲人的。要是可以免費解鎖,那還怎麼勒索那20塊錢?
0x02 反編譯分析
接下來祭出神器jadx反編譯分析,反編譯後發現資源裡面的結構有點不一樣:
正常情況下,apk反編譯後應該是下面這種結構:
原來res目錄下的drawable、layout等資源全部被混淆了。打開r下的0文件發現其實就是編譯後的layout文件:
這個樣本其實是使用了MT管理器的」RES資源混淆「功能。(MT管理器是一個可以在安卓手機上修改apk文件、反編譯dex、修改smali、修改xml、重打包的App,功能很強大)。
代碼的入口是MainActivity:
代碼簡潔的不得了,LogCatBroadcaster看著很眼熟吧,進去看看代碼:
這就是AIDE的特徵(AIDE是一款可以在安卓手機上編寫安卓App的開發工具,分析過勒索App的應該都很熟悉了) 。
再來看看e.busybox函數,發現代碼混淆了,那還是使用JEB接著分析吧,分析完混淆函數,然後重命名一下,看著還不是很清楚:
尤其是下面一大堆的StringBuffer:
先把函數拷貝出來,精簡掉StringBuffer,代碼清晰多了:
這部分代碼功能很清晰:複製libjiagu.so到App私有目錄的a/k.bat文件中,再複製lib2jiagu.so到App私有目錄的a/libStarEngine.so文件中,然後解密k.bat得到key.bat文件,再獲取key.bat文件的包名保存到e.packageName中,這裡可以看出來key.bat(即libjiagu.so文件)是一個apk文件。繼續看下面代碼:
接著執行「ls data「命令,安卓App中要執行系統命令,必須申請root許可權,代碼執行到這裡就需要申請root許可權。不過這裡執行這個命令沒起到什麼作用。
這裡根據安卓系統版本分別進行處理,如果小於5.0,先把key.bat釋放到/system/app/並改名為time.apk,然後釋放libStarEngine.so到/system/lib/libStarEngine.so, 判斷是否安裝了com.example.xphuluxia,如果安裝了就卸載,最後重啟手機,安裝激活勒索App。補充一下,com.example.xphuluxia是一個名為防鎖俠的App,據說可以查殺鎖屏勒索App,個人還沒測試過。
繼續看後面代碼:
從大段重複代碼可以看出作者很擅長CVM模式(ctrl+c、ctrl+v、modify)(個人猜想寫病毒維護應該很少吧)。
這裡需要用到e.packageName,我們先來獲取一下包名,使用命令行獲取一下模擬器的當前Activity即可:
即e.packageName=」com.hl.app」。現在來分析勒索App在5.0及其以上系統時的操作:釋放key.bat到/system/priv-app/com.hl.app/並改名為com.hl.app.ap;釋放libStarEngine.so到 /system/priv-app/com.hl.app/lib/arm/libStarEngine.so;重啟手機,系統重啟後會自動安裝/system/priv-app/com.hl.app/com.hl.app.apk,激活勒索App。
分析到這裡,現在清楚了,這是一個字母型的勒索App,母App任務應該完成了,可以通過Manifest.xml文件再確認一下:
這裡沒有申請任何許可權,所以母App就是個殼,已經不需要繼續分析了。
0x03分析子包
接下來分析真正的鎖屏勒索子包代碼,我的模擬器系統是4.4,使用adb先導出病毒文件到電腦:
然後使用jadx反編譯,這裡同樣是使用MT管理器做了資源混淆:
查看AndroidManifest.xml,入口還是MainActivity:
LogCatBroadcaster就不用看了,還是AIDE的特徵,沒什麼作用。主要是啟動了com.hl.app.MyApp服務。繼續看看這個服務代碼:
代碼混淆了,那用JEB繼續分析,先看看a類:
很明顯這是一個DES的加密解密演算法類,所以a類被重命名為a_Cryptor。再看hx1:
很明顯,創建全屏的浮動窗口,遮擋其他App導致無法操作,達到鎖屏效果。那麼重命名為hx1_showLockView1,重命名變數、函數名稱後,添加註釋代碼如下:
這裡初始化了加密密鑰,然後創建了全屏浮動窗口達到鎖屏效果,繼續看代碼:
這裡更新了a_crypt的密鑰,然後生成隨機數保存在lock1xlh中,設置點擊響應函數,其中100000000是假的,騙人點100次的函數,最後的100000001才是真的解鎖判斷函數,繼續看100000001的onClick代碼:
Try代碼塊是一堆解密、轉換代碼,最後關鍵的是if語句,判斷輸入和隨機碼計算後的結果是不是相同,相同則進入第二層鎖屏界面。所以,解鎖密碼就是這一堆代碼計算後再與隨機碼計算的結果。這裡b類代碼被重命名為b_AES,set函數被重命名為set_replaceAndReverse。解密的代碼就不用看了,我們寫解密演算法時直接copy過來用就行了,這時候就要發揮CVM模式(ctrl+c、ctrl+v、modify)的長處。
0x04解密第一層鎖屏
接下來寫計算第一層解密密碼的演算法,創建java工程,把100000001的onClick代碼複製過來,中間需要依賴的類: a_Cryptor、b_AES、c以及其他相關函數全部從JEB複製過來,修改錯誤後,把onClick函數改成getLockView1Pass,主要代碼如下(記得前面有a_crypt更新密鑰的相關代碼,要複製過來):
lock1xlh就是鎖屏界面上的隨機碼,運行後你就可以得到解鎖密碼了。我的隨機碼是477042,計算後得到解鎖密碼:1200556544,在模擬器中輸入後,點擊解鎖,然後進入第二層鎖屏,作者還是那麼囂張,界面依然奇醜無比:
0x05分析第二層鎖屏
接下來繼續JEB分析第二層鎖屏。查看hx2代碼,這裡改名為hx2_showLockView2:
還是一樣的配方,隨機碼保存在lock2xlh中,創建全屏浮動窗口達到鎖屏效果,解鎖按鈕點擊響應函數是100000002,繼續看代碼:
代碼有點亂,拷貝出來精簡一下:
注釋都寫清楚了,關鍵是理解最後代碼,輸入的解鎖碼v2前3位經過sha、md5之後就應該等於「9fd09fe7fd77ab118ef78795668bc8a1」,後9位等於隨機碼經過md5、sha之後保留數字位的前9位。下面就可以寫代碼計算了。
0x06解密第二層鎖屏
由於解鎖碼都是數字,前3位經過sha、md5之後就應該等於「9fd09fe7fd77ab118ef78795668bc8a1」,這個可以寫代碼爆破。演算法很簡單,如下所示:
lock2xlh就是第二層鎖屏界面上的隨機碼,運行後你就可以得到解鎖密碼了。我的隨機碼是498691,計算後得到解鎖密碼:187360012293,在模擬器中輸入後,點擊解鎖,鎖屏終於解除了。
之前還有個libStarEngine.so,在app代碼中並沒有發現載入該庫文件的代碼,IDA查看也沒有發現什麼,經過搜索發現是一個3d引擎,在這裡也沒有什麼實際作用。
到這裡,鎖屏App已經分析完了。
0x07總結
結合之前分析,總結一下:
- 這是一個子母型的勒索App,母App主要完成解密、釋放子病毒文件。病毒文件在0以下系統是/system/app/time.apk、 /system/lib/libStarEngine.so;5.0及其以上系統是/system/priv-app/com.hl.app/com.hl.app.apk 、/system/priv-app/com.hl.app/lib/arm/libStarEngine.so。
- 子病毒文件被加密後放在母App中,主要目的應該是繞過殺毒軟體檢測,效果如何見後文。
- 子病毒文件被釋放到系統App目錄中,系統雙清是無法刪除病毒文件的。
- 如果手機沒有root,或者沒有給勒索App授予root許可權,那麼是不會受影響的,只要卸載該「荒野行動盒子」即可。
- 病毒代碼中雖然寫了很多加密演算法:AES、DES、md5、sha及字元替換等等,但還是很容易寫出解密演算法的。
- 另外,這個樣本中可以看到使用了AIDE、MT管理器,這兩個工具可以完成病毒App的開發、修改,也就是說,你只要有個安卓手機,就可以完成病毒的製作、修改過程,可以不用PC來完成,這個變化是值得注意和警惕的。
這裡我簡單寫了一個計算解鎖碼的程序,需要java環境支持,用法很簡單:
java -jar unlock_hyhz.jar,然後按照提示輸入屏幕解鎖碼即可,執行效果如下圖所示:
下載地址:https://share.weiyun.com/46ffd85b4467fa564819262cbe32df5a
Hash校驗:
CRC32: 346A9DCB
MD5: 6BC24E74AA3C80FE2C85F0ADD84F5772
SHA-1: E0D693064D2A4350A4FC4B4B700F891420ED446C
0x08清除
分析完了該清除文件了。啟用USB調試, 執行adb shell進入shell環境。
5.0以下系統執行:
5.0及以上系統執行:
最後所有系統上需要卸載母包:
0x09測試一下殺毒軟體
最後把樣本上傳到http://virustotal.com上看了一下,有17款殺毒軟體檢測出來問題:
https://www.virustotal.com/#/file/bf3637f7ed48732404eaaf74abc6eca0a628def264a20d86fa044db04b6abce4/detection
如果把子包直接放上去再看看,檢測率還降低了:
https://www.virustotal.com/#/file/f426e208bbb8ed720d0200b28d1969c8eeb0ebaf841e63f8258d4c3fc428af88/detection
總體感覺,這個檢測率還是偏低的。這個檢測結果可能也無法代表安卓手機端的檢測率。
0x010 後記
個人感覺,自從5月份 wannacry爆發之後,不管是PC還是安卓系統,國內勒索病毒也越來越多了。而且現在安卓手機端的病毒可以使用安卓手機App開發、修改,那麼分發、傳播起來會更快,變種也會更多,這些都是PC上病毒沒有的特點,需要引起重視。
最後,對於普通用戶來說,防範措施非常簡單,只要保持良好的使用習慣即可避免被鎖屏勒索:
- 不要root手機!(除非你非常懂安全,即使被鎖也能自己搞定)
- 不要下載、安裝來歷不明的App!
- 安裝一個殺毒軟體。
最重要的還是前兩個習慣,因為「安全問題很多時候都是人的問題」。
0x011 附錄
樣本來源:https://www.52pojie.cn/thread-672111-1-1.html
登錄 安全客 - 有思想的安全新媒體 來獲取更多資訊~
推薦閱讀:
※Let's GoSSIP! 2017年軟體與移動智能系統安全暑期學校開始報名啦~
※原創分享:推薦幾本安全方面的好書
※如何看待代碼安全保障技術的發展趨勢
※黑客為什麼可以做到無需知道源碼的情況下找出系統漏洞?