對(duì)小綿羊的轟炸APP逆向分析

背景
在網(wǎng)絡(luò)上意外看到一款叫小綿羊的轟炸機(jī)APP,經(jīng)過(guò)下載安裝(這種未知風(fēng)險(xiǎn)的APP建議都在模擬器上去安裝驗(yàn)證和分析功能,有安全風(fēng)險(xiǎn)問(wèn)題模擬器刪除即可)后確認(rèn),只要在APP界面的編輯框中輸入手機(jī)號(hào)碼,就可以進(jìn)行對(duì)指定手機(jī)號(hào)碼進(jìn)行短信狂轟炸的效果的(已用自己測(cè)試號(hào)碼驗(yàn)證過(guò)效果)。




下面就以開(kāi)發(fā)者角度進(jìn)行解析下這個(gè)APP的功能的實(shí)現(xiàn)原理。

 

基礎(chǔ)信息
拿到APP的一般做法,就是先對(duì)這個(gè)APP進(jìn)行查殼分析確認(rèn),決定是否刪除卸載APP還是繼續(xù)分析APP,還好通過(guò)查殼工具(通過(guò)識(shí)別APP中是否包含市面上的加固產(chǎn)品的特有的so文件特征)一分析這個(gè)小綿羊APP是沒(méi)有加固保護(hù)的,這樣對(duì)APP的分析門檻一下子就降低了。



通過(guò)使用jadx進(jìn)行查看APP的整個(gè)組成結(jié)構(gòu)和重點(diǎn)查看java功能代碼,通過(guò)工具可以查看app主要有java代碼 C++代碼(so文件),資源數(shù)據(jù),lua數(shù)據(jù),簽名信息組成的。




通過(guò)jadx工具查看,該APP的Java層部分代碼采用android studio自帶的proguard插件,進(jìn)行對(duì)個(gè)別的類名函數(shù)名稱進(jìn)行做混淆保護(hù),雖然這種混淆強(qiáng)度并不強(qiáng),但是還是有很多APP采用這種方式進(jìn)行對(duì)java層保護(hù)。只因這種保護(hù)成本低,只需簡(jiǎn)單的進(jìn)行配置下就可以達(dá)到混淆效果。




啟動(dòng)APP后,通過(guò)uiautomatorviewer(SDK中自帶的分析控件的工具)工具進(jìn)行分析該APP的界面控件信息,通過(guò)分析可以看到該APP的界面主要由1個(gè)EditText和3個(gè)Button控件組成的,也就是下面的截圖信息。




下面是這個(gè)轟炸APP的界面背景顏色的設(shè)置,這個(gè)實(shí)現(xiàn)功能主要是以lua腳本方式進(jìn)行實(shí)現(xiàn)的。




 

簽名信息
通過(guò)這jadx工具,可以看到這個(gè)APP采用的是V1的簽名方式,我們知道V1簽名是android最早的數(shù)字證書(shū)簽名,為了提高驗(yàn)證速度和覆蓋度在android7.0的系統(tǒng)中引入V2的簽名,為了實(shí)現(xiàn)密鑰的輪轉(zhuǎn)載android 9.0系統(tǒng)中引入V3的簽名。

目前APP中大部分都是通過(guò)V1和V2簽名相結(jié)合的。并且這個(gè)在簽名過(guò)程中要保證按照V1到V2在到V3的簽名順序,因?yàn)閂1簽名的改動(dòng)會(huì)修改到ZIP三大部分的內(nèi)容,先使用V2簽名再V1簽名會(huì)破壞V2簽名的完整性。

在android的app開(kāi)發(fā)過(guò)程中,必須對(duì)app進(jìn)行簽名,不然過(guò)不了系統(tǒng)驗(yàn)證也就無(wú)法進(jìn)行對(duì)app安裝。




android簽名的數(shù)字證書(shū)的一般都是采用 X.509的國(guó)際標(biāo)準(zhǔn)。

因X.509內(nèi)容為第三方可信機(jī)構(gòu)CA對(duì)公鑰實(shí)施數(shù)字簽名,故也叫公鑰證書(shū),數(shù)字證書(shū)在PKI體系中是一個(gè)表明身份的載體,除了用戶的公鑰,還包含用戶公開(kāi)的基本信息,如用戶名、組織、郵箱等。

下圖是android studio工具中可以自己創(chuàng)建用于對(duì)APP簽名的證書(shū),可以看到它包含密碼信息、用戶名稱、組織名稱、地區(qū)名稱、國(guó)家信息、省份信息、城市信息。




同樣也可以通過(guò)jadx工具,在META-INF目錄下的CERT.SF文件中去查看確認(rèn)簽名信息,V1簽名的主要關(guān)鍵字Created-By:, V2簽名的X-Android-APK-Signed的關(guān)鍵字。


、

 

權(quán)限信息
在這個(gè)AndroidManifest.xml文件中主要包含app中所需要的權(quán)限,四大組件信息,app包的相關(guān)信息(包名稱、sdk目標(biāo)版本、sdk最低版本等等)

android的機(jī)制下想要讀取相關(guān)的信息,都需要向用戶申請(qǐng)權(quán)限,這個(gè)不僅符合android的安全機(jī)制,也符合目前國(guó)內(nèi)的安全合規(guī),同樣也可以通過(guò)申請(qǐng)的權(quán)限信息了解APP的功能需求。




下面對(duì)這個(gè)APP的所有權(quán)限進(jìn)行詳解下:






android.permission.INTERNET :訪問(wèn)網(wǎng)絡(luò)連接可能產(chǎn)生GPRS流量

android.permission.ACCESS_NETWORK_STATE:獲取網(wǎng)絡(luò)信息狀態(tài),如當(dāng)前的網(wǎng)絡(luò)連接是否有效

android.permission.ACCESS_WIFI_STATE:獲取當(dāng)前WiFi接入的狀態(tài)以及WLAN熱點(diǎn)的信息

android.permission.WRITE_EXTERNAL_STORAGE:允許程序?qū)懭胪獠看鎯?chǔ),如SD卡上寫(xiě)文件

android.permission.WRITE_SMS:允許應(yīng)用程序?qū)懚绦艃?nèi)容

android.permission.READ_SMS:允許應(yīng)用程序讀取短信內(nèi)容

android.permission.WRITE_SETTINGS:允許應(yīng)用程序讀取或?qū)懭胂到y(tǒng)設(shè)置

android.permission.CLEAR_APP_CACHE:允許程序清除應(yīng)用緩存

android.permission.BLUETOOTH:允許程序連接配對(duì)過(guò)的藍(lán)牙設(shè)備

android.permission.VIBRATE:允許振動(dòng)

android.permission.READ_LOGS:允許程序讀取系統(tǒng)底層日志

android.permission.READ_FRAME_BUFFER:允許程序讀取幀緩存用于屏幕截圖



功能信息


這個(gè)APP的主要功能都是在lua上實(shí)現(xiàn)的,從界面到轟炸功能都集成到lua上。

Lua是一門用標(biāo)準(zhǔn)C編寫(xiě)的動(dòng)態(tài)腳本語(yǔ)言,如果希望在android上使用,則需要解決2個(gè)問(wèn)題。

1、需要用JNI為L(zhǎng)ua的C庫(kù)進(jìn)行封裝,這樣才可能在Java中使用。

2、由于Android系統(tǒng)開(kāi)發(fā)所特有的系統(tǒng)環(huán)境限制,Lua三方庫(kù)的動(dòng)態(tài)加載機(jī)制和lua腳本模塊的導(dǎo)入機(jī)制將不能正常運(yùn)行,需要進(jìn)行特殊處理。




輸入好手機(jī)號(hào)碼后(不過(guò)這個(gè)輸入都沒(méi)做驗(yàn)證,隨便輸入數(shù)據(jù)都進(jìn)行執(zhí)行一遍功能),通過(guò)charles抓包工具進(jìn)行抓取數(shù)據(jù)吧,可以很清晰的看到,點(diǎn)擊轟炸后,馬上執(zhí)行發(fā)送406個(gè)網(wǎng)絡(luò)數(shù)據(jù)包,這些數(shù)據(jù)主要集中在作者收集的406個(gè)各種類型網(wǎng)站進(jìn)行發(fā)網(wǎng)絡(luò)賬號(hào)注冊(cè)驗(yàn)證碼信息的轟炸。




在lua功能中,有對(duì)vpn的判斷,通過(guò)簡(jiǎn)單判斷獲取當(dāng)前網(wǎng)絡(luò)狀態(tài),并且判斷網(wǎng)絡(luò)狀態(tài)是否屬于vpn的狀態(tài),如果屬于vpn狀態(tài),那么就往storage的目錄下寫(xiě)入時(shí)間點(diǎn)設(shè)定,并且強(qiáng)制關(guān)閉APP,當(dāng)在啟動(dòng)APP的時(shí)候會(huì)先判斷文件是否有寫(xiě)入判斷禁入的信息,如果有就不讓啟動(dòng)APP。其實(shí)破解這個(gè)驗(yàn)證很簡(jiǎn)單,直接將文件的禁入信息清空即可。



下圖的這幾個(gè)so是網(wǎng)絡(luò)上lua和socket通用的so文件,并沒(méi)有什么可研究?jī)r(jià)值。




通過(guò)分析libsocket.so這個(gè)so文件,可以確認(rèn)采用的是luaSocket 3.0版本

LuaSocket 它是 Lua 的網(wǎng)絡(luò)模塊庫(kù),它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多種網(wǎng)絡(luò)協(xié)議的訪問(wèn)操作。

這個(gè)luasocke一部分是用 C 寫(xiě)的核心,提供對(duì) TCP 和 UDP 傳輸層的訪問(wèn)支持。另外一部分是用 Lua 寫(xiě)的,負(fù)責(zé)應(yīng)用功能的網(wǎng)絡(luò)接口處理。

開(kāi)源的luasocket代碼可以參考學(xué)習(xí)下

https://github.com/lunarmodules/luasocket

https://github.com/fengye/luasocket






 

總結(jié)
縱觀整個(gè)轟炸APP的功能,分析這個(gè)APP都沒(méi)有采取任何保護(hù)(加殼、反調(diào)試)就沒(méi)有門檻了,基本也不需要涉及到脫殼、hook和動(dòng)態(tài)調(diào)試這些操作,只要用幾個(gè)(jadx、charles、ida、uiautomatorviewer)工具就可以將功能全部分析清楚。

感嘆這個(gè)作者確實(shí)很用心的去做這個(gè)轟炸的功能,去收集了406個(gè)的各類型的網(wǎng)站進(jìn)行手機(jī)注冊(cè)功能。

對(duì)于這種具有攻擊性的APP還是要慎重下,免費(fèi)APP功能的前提往往會(huì)有給APP植入后門或者病毒的存在。





作者:小道安全


歡迎關(guān)注微信公眾號(hào) :小道安全