導讀:群控系統一般由多個部分組成,例如在手機端執行的服務、在手機端用於模擬輸入的輸入法、在 PC 端用來對所有裝置操作與監控的中控臺、在伺服器中執行的連線所有裝置的服務端等。本文主要介紹對群控軟體技術的相關研究與實踐。
文|李伊洋 網易易盾 Android 安全工程師
群控功能
區別於模擬點選工具,群控系統一般由多個部分組成,例如在手機端執行的服務、在手機端用於模擬輸入的輸入法、在 PC 端用來對所有裝置操作與監控的中控臺、在伺服器中執行的連線所有裝置的服務端等。
群控系統的組成
作為一個系統,群控系統由 PC 中控模組、手機通訊模組、功能實現模組三部分組成,但是不一定每個模組都是獨立或是獨一的,用某智控產品舉例,只有 PC 中控軟體與一個 APK 安裝包兩個軟體,而某助手軟體包含 PC 中控軟體、輸入法 APK、通訊 APK、UIAutomator 功能 APK 四個軟體。
一、PC 中控模組
PC 中控軟體是整個系統的核心。核心功能可以分為對裝置的監控與控制、對指令碼的編寫與控制兩個部分。
對裝置的監控是指會有大量的裝置螢幕在這裡被展示,透過顏色或是一些小標誌,可以看到對應裝置的手機通訊模組是否正常運轉。當指令下發時,沒有正確執行指令的裝置,由於螢幕不一致就會顯現出來。黑灰產廠商能夠快速排查問題,保證裝置牆正常運轉。這部分功能依賴於 adb 或是網路通訊,做法可以根據手機內的通訊模組而改變。
指令碼的編寫主要是依賴於對手機 Activity 樹狀結構的解析,使得 View 資訊能被指令碼開發人員獲取,透過 View 的 id 或是 text 屬性,從而定位 View 的座標,完成指令碼開發。
同時部分中控軟體也支援指令碼市場的功能,可以直接編寫指令碼開發人員已經編寫好的指令碼。
指令碼由 PC 中控軟體控制下發,做到批次執行、定期執行、延期執行、批次停止等操作。
二、手機通訊模組
主要用於對 PC 中控軟體的指令進行解析,以及將螢幕影像傳遞給 PC 中控軟體。以某老牌群控軟體為例。
接受指令:
也用於彈出部分提示資訊,例如查詢指定裝置,則會發出聲音,並提示關閉提示倒數計時:
三、功能實現模組
每個群控系統都有他們特有的做法用來實現具體的功能。在整個群控系統中,這個模組是最接近被保護應用的,目前的檢測思路主要也是圍繞功能模組進行。下文會對這裡提到的各個功能進行更具體的分析。
指令碼開發和使用中,都需要獲取到 View 的資訊。為了獲取這個資訊,需要手機內的功能模組輔助完成。
模擬正常使用者的點選,觸發應用按鈕、螢幕滑動等內容。模擬點選一般不會是單獨的一個 apk,常見整合在輸入法內。
截圖、開關 WIFI、重啟裝置等小功能就不再展開。
功能劃分
從群控實現了的功能出發,可以將其分為以下的功能:
對系統的操作
WIFI 開啟或關閉
流量開啟或關閉
應用的安裝與解除安裝
應用 Activity 的啟動
通訊錄管理
檔案的互傳
剪貼簿的互轉
獲取 Activity 的樹狀結構
其他
對系統的監聽
簡訊及其內容的監聽
螢幕變化的監聽
其他
對輸入的模擬
文字輸入的模擬
座標點選的模擬
多選框選擇的模擬
其他
對自身的邏輯
錄製操作的儲存
已錄製操作的重放
已編寫指令碼的解析
延遲指令碼的處理
各個部分間的通訊
多個指令碼的控制
其他
技術細節
具體做法
群控往往是跨端實現功能,現在基本可分為本地群控和雲控,區別在於是否開放外網操縱裝置。
雲控的好處在於裝置本身可以是分散的,例如黑灰廠商向一個正常裝置租下一段時間,透過雲端傳送指令操作,完成黑灰操作後再結算費用給散戶。這樣從裝置的聚集性上就很難看出異常,不論是 ip 還是 gps 都沒有任何的聚集性。
同時雲控也有另外的做法,同樣使用傳統裝置牆,裝置牆連線一箇中控伺服器,伺服器開放外網,這樣就能隨時隨地操作裝置牆,主要用於大型團隊的操作。而本地群控就是最傳統的做法,如果裝置較少就可以直接透過集線器連線電腦,電腦直接透過群控系統跨端操作裝置牆。如果裝置過多,可以加入一箇中轉的中控伺服器,但是不連線外網,而是透過路由器等在內網直接接受指令。
(圖源:俠客助手官網)
功能模組原理
模擬點選
模擬點選的具體內容可以檢視之前發過的 Android 模擬點選研究相關文章。
控制元件查詢
控制元件查詢對於任何一個群控系統與自動點選工具來說都是必備功能。除開透過 opencv 庫做到的找圖和 OCR 找字之外,對於控制元件查詢更重要的能力在於對其屬性的獲取。例如一個介面中若是有兩個都是長得一模一樣的按鈕,那麼不論是找圖還是 OCR 都只會返回第一個值,後一個按鈕就失效了。
於是出於指令碼穩定性考慮,群控系統和自動點選工具都會想方設法去獲得控制元件的屬性,例如唯一標識的 ID。
以現有的樣本為例,群控系統獲得控制元件屬性的辦法有兩種,分別是類 Auto.js 做法與類 UIAutomator 做法。
該做法依賴於無障礙服務,所以需要註冊無障礙服務,但並非所有軟體都需要註冊該服務
*/com.stardust.autojs.core.accessibility.AccessibilityService
優點:開發容易且穩定。缺點:依賴無障礙服務,透過獲取無障礙服務列表可以檢測。
這種做法來源於測試工具,appium 也是同樣的做法。
大致思想是將 UIAutomator 除錯橋植入裝置,然後可以透過 adb shell uiautomator dump 命令,將當前的 activity 的樹狀結構 dump 成一個 xml 形式,然後解析該 xml,就可以得到 activity 中的所有控制元件屬性。
可以看到在沒有使用無障礙服務的情況下,獲得了所有的 View 資訊。
優點:脫離了對無障礙服務的依賴,使得檢測更困難。缺點:類似於早期的 monitor 工具,所有的 xml 都需要 dump 然後解析,時效性較差且效率較低。
有效的檢測方案
網路通訊
目前發現群控基本都依賴於 socket 通訊,對於一些處理不是很好或是開發時間較久的群控系統,可以透過復佔埠的方式檢測。
模擬點選
模擬點選方式透過 adb 許可權,MotionEcent.obtain 模擬,injectInputEvnet 注入,易盾 Android 反外掛能力已經擁有了對這種模擬行為的檢測能力。點選免費試用網易易盾反外掛產品
安裝包
在上文中提到過的相關模組,都可以作為檢測的依據。