亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Accessibility Service的Android外掛插件實現(xiàn)原理及防御措施

        2019-12-12 06:05:16陳冬王太成
        軟件導(dǎo)刊 2019年11期
        關(guān)鍵詞:外掛插件調(diào)用

        陳冬 王太成

        摘 要:為解決傳統(tǒng)反外掛技術(shù)難以有效防御基于Accessibility Service的Android應(yīng)用程序外掛問題,通過反編譯已知的基于Accessibility Service的移動外掛插件,從AccessibilityService源碼剖析入手,分析其實現(xiàn)原理和外掛模式,從而有針對性地提出通過AccessibilityManager有效檢測外掛插件,實現(xiàn)Android應(yīng)用程序有意識屏蔽關(guān)鍵UI節(jié)點的獲取和點擊事件這兩種有效防御措施。實驗結(jié)果表明,綜合采用這兩種防御措施,對已知外掛插件及通過簽名變種的外掛插件識別準確率分別達到100%和92%。綜合應(yīng)用AccessibilityManager檢測外掛插件及屏蔽關(guān)鍵UI節(jié)點和點擊事件這兩種防御措施能有效防御基于Accessibility Service的Android應(yīng)用程序外掛。

        關(guān)鍵詞:Accessibility Service;Android外掛;外掛分析;外掛防御;反外掛

        Abstract: For solving the problem that traditional anti-cheat technology is difficult to defend against Android application cheater based on Accessibility Service, by decompoiling mobile cheaters based on Accessibility Service,we view the Accessibility Service source code to analyze its implementation principle and cheat mode. Finally two targeted defense measures are proposed that we can use Accessibility Manager to effectively detect cheaters and consciously block access and click for key UI nodes when implementing Android applications. Experiment results have shown that using these two defenses, the recognition accuracy of cheater and variation cheater by change signature is 100% and 92%. Using these two defenses can effectively protect Android application cheater based on Accessibility Service.

        Key Words: Accessibility Service; Android cheater; cheater analysis; cheater detection; anti-cheat

        0 引言

        外掛程序在計算機界由來已久,上世紀90年代初就有程序員利用Windows操作系統(tǒng)的Hook函數(shù)監(jiān)控操作系統(tǒng)消息進行軟件破解或木馬后門編寫[1]。到后來,在巨大的利益驅(qū)使下網(wǎng)絡(luò)游戲外掛盛行,程序員利用鼠標鍵盤模擬、修改客戶端程序、截取調(diào)換封包和全自動脫機等方法制作各種游戲外掛,給游戲公司造成巨額損失[2]。鑒于此,反外掛技術(shù)研究得到重視。大部分反外掛技術(shù)在客戶端使用Windows驅(qū)動掃描進程特征[3],在服務(wù)端基于交換機鏡像分光截獲通信協(xié)議匹配外掛行為[4]。隨著大數(shù)據(jù)應(yīng)用和機器學(xué)習(xí)技術(shù)的發(fā)展,出現(xiàn)了基于用戶的基礎(chǔ)數(shù)據(jù)和行為數(shù)據(jù)分析[5],以及將SVM、KNN、極限學(xué)習(xí)機等機器學(xué)習(xí)算法用于游戲外掛檢測等[6]研究,網(wǎng)絡(luò)游戲領(lǐng)域反外掛技術(shù)日漸成熟。

        隨著移動互聯(lián)網(wǎng)的蓬勃發(fā)展,移動端的惡意程序和外掛插件逐漸增多,特別是在Android移動端存在很多外掛插件,例如搶紅包、搶票、自動打卡等,嚴重影響了互聯(lián)網(wǎng)企業(yè)正常運營活動,給企業(yè)和用戶帶來了巨大損失。因此,移動端安全成為移動應(yīng)用開發(fā)領(lǐng)域急需解決的核心問題之一。移動平臺安全研究很多,但大部分是針對平臺安全的,如借鑒傳統(tǒng)反木馬技術(shù)研究移動端應(yīng)用程序框架層的Hook API方法和內(nèi)核層的系統(tǒng)調(diào)用攔截方法[7],或是基于Android簽名機制使用簡單的黑名單過濾[8],或是結(jié)合機器學(xué)習(xí)算法構(gòu)建檢測模型,實現(xiàn)對惡意行為的檢測理論研究[9]。移動平臺上外掛程序,特別是近兩年出現(xiàn)在Android平臺上利用Accessibility Service實現(xiàn)的外掛插件,其實現(xiàn)思路完全有別于傳統(tǒng)外掛程序?qū)崿F(xiàn)思路,所以生搬傳統(tǒng)反外掛技術(shù)研究在實際應(yīng)用中很難有效防御移動端外掛插件。本文通過對當前流行的基于Accessibility Service實現(xiàn)的移動端外掛插件進行反編譯,深入分析其實現(xiàn)原理和外掛行為模式,有針對性地提出防御措施,彌補了Accessibility Service類移動端外掛插件研究的缺失。

        1 Accessibility Service剖析

        Accessibility Service本來是Android提供給程序員實現(xiàn)無障礙輔助功能的一種系統(tǒng)服務(wù),通過Accessibility Service,應(yīng)用程序可以增強用戶界面以幫助殘障人士及暫時無法與設(shè)備充分交互的人[10]。Accessibility Service之所以被外掛插件利用,需要從Accessibility Service內(nèi)部工作機制及其監(jiān)控其它應(yīng)用程序的原理兩個方面分析。

        1.1 Accessibility Service內(nèi)部工作機制

        從Google的官方文檔和Android相關(guān)源代碼分析,得到AccessibilityService類和相關(guān)類及其關(guān)系如圖1所示。

        其中:AccessibilityService是Service的子類,并重寫了onBind方法。在onBind方法中創(chuàng)建并返回了一個IAccessibilityServiceClientWrapper實例對象。另外,在AccessibilityService中還預(yù)留了onAccessibilityEvent接口,提供給程序員在自己的AccessibilityService子類中實現(xiàn)針對AccessibilityEvent事件的邏輯處理。

        IAccessibilityServiceClientWrapper繼承自IAccessibilityServiceClient類,該類是一個AIDL接口,同時IAccessibilityServiceClientWrapper還繼承了IAccessibilityServiceClient.Stub類,并且實現(xiàn)了HandlerCaller.Callback接口。由此可以確定AccessibilityService是一個遠程服務(wù),使用Android的跨進程通信技術(shù)[11]。

        Android系統(tǒng)編譯器在IAccessibilityServiceClient.aidl保存后會自動在相同的包目錄下生成對應(yīng)的Java接口類,并在該類自動生成一個內(nèi)部靜態(tài)抽象類Stub[12]。Stub類繼承android.os.Binder,該類向上又實現(xiàn)了IBinder接口,并且實現(xiàn)了IAccessibilityServiceClient接口。編譯器在Stub類內(nèi)部生成一個靜態(tài)類Proxy,該類實現(xiàn)IAccessibilityServiceClient接口,所以最終AIDL執(zhí)行結(jié)果是Stub中的Proxy代理執(zhí)行結(jié)果[13]。

        在IAccessibilityServiceClientWrapper的構(gòu)造方法中有兩個較重要的參數(shù),一個是looper,在Accessibility Service的實現(xiàn)中就是主線程,可使應(yīng)用程序從binder線程回到主線程;另一個是Callbacks類型的回調(diào)對象callback。callback參數(shù)初始化一個HandlerCaller對象。HandlerCaller的主要作用是通過持有Context所在線程的Handler實例對象,不斷往Context所在線程的消息隊列發(fā)送消息,然后在Handler實例對象的回調(diào)方法handleMessage中調(diào)用回調(diào)對象的executeMessage方法,而回調(diào)對象正是IAccessibilityServiceClientWrapper,所以最終調(diào)用的是IAccessibilityServiceClientWrapper的executeMessage方法,具體流程如圖2所示。

        1.2 綁定和監(jiān)控其它APP原理

        Android使用Accessibility Service監(jiān)控其它應(yīng)用程序并獲得UI更改方法如下:

        從Google的官方文檔和Android相關(guān)源代碼分析得到相關(guān)類及其關(guān)系如圖3所示。當用戶在設(shè)置頁面開啟某個Accessibility Service的無障礙應(yīng)用程序后,Android系統(tǒng)會發(fā)送一條廣播到AccessibilityManager Service系統(tǒng)服務(wù)[14]。收到該廣播后,AccessibilityManager Service會綁定開啟的Accessibility Service,即調(diào)用上文提到的繼承自Service的AccessibilityService子類的onBind方法。根據(jù)上文分析流程,在AccessibilityService內(nèi)部,onBind方法會創(chuàng)建并返回一個IAccessibilityServiceClientWrapper對象,開啟AIDL跨進程通信。

        當某個受到監(jiān)控的應(yīng)用程序UI發(fā)生改變時,Android會通過View類中的ViewRootImpl對象調(diào)用其中的AccessibilityManager對象發(fā)送AccessibilityEvent事件。發(fā)出的AccessibilityEvent事件會通過Binder類調(diào)用AccessibilityService的onAccessibilityEvent接口[15],并將AccessibilityEvent事件作為參數(shù)傳遞給AccessibilityService的具體實現(xiàn)類,即最終調(diào)用重寫的onAccessibilityEvent方法。

        在Android的Accessibility Service實現(xiàn)框架中還有很重要的一點:UI中的每一個View對象都會存儲為一個AccessibilityNodeInfo對象。通過這個對象在UI節(jié)點樹中可以查找到對應(yīng)的View對象,并像操作原View對象一樣對AccessibilityNodeInfo對象進行操作,例如執(zhí)行點擊操作[16],其本質(zhì)是對應(yīng)用中的元數(shù)據(jù)使用反序列技術(shù),通過AccessibilityInteractionClient類實現(xiàn) [17],流程如圖4所示。

        2 外掛插件實現(xiàn)思路

        了解Accessibility Service的內(nèi)部實現(xiàn)原理和它如何監(jiān)控APP后,要實現(xiàn)一個基于Accessibility Service的Android外掛插件就變得容易了,其實現(xiàn)思路如下:

        當手機用戶在設(shè)置界面為某個APP開啟無障礙服務(wù)后,Accessibility Service會一直在后臺運行。當手機屏幕界面狀態(tài)發(fā)生變化時,如狀態(tài)欄出現(xiàn)新通知、窗口中焦點被移動等,就會發(fā)生AccessibilityEvent事件,這樣Accessibility Service將可接收到界面的所有變化。而在Accessibility Service中,Android將手機屏幕中的所有UI組件信息存儲在AccessibilityNodeInfo類中,因此可通過這些信息在UI節(jié)點樹中獲得相應(yīng)的組件View對象,并執(zhí)行期望的操作,例如點擊操作。

        以微信搶紅包外掛插件為例,插件在后臺啟動Accessibility Service后,當手機收到微信紅包的推送信息后,會發(fā)生AccessibilityEvent事件,從而調(diào)用AccessibilityService中重寫的onAccessibilityEvent方法,插件代碼通過判斷推送信息中是否包含“[微信紅包]”的消息提示進入聊天界面。通過AccessibilityNodeInfo遍歷窗口UI節(jié)點樹各個節(jié)點,發(fā)現(xiàn)帶有”領(lǐng)取紅包”字樣的節(jié)點,則點擊進入搶紅包界面。在搶紅包界面,插件代碼再通過UI節(jié)點的ID獲取含有“開”按鈕的UI節(jié)點,打開紅包詳情頁面。在紅包詳情頁面,通過UI節(jié)點ID獲取返回鍵按鈕對應(yīng)的節(jié)點,點擊該節(jié)點并返回微信聊天界面。

        3 外掛插件防御

        在了解基于Accessibility Service實現(xiàn)外掛插件原理和Accessibility Service的工作機制后,制定防御措施就變得更有針對性,主要從兩個方面入手:①既然Accessibility Service需要通過AccessibilityManager Service注冊,就可以在AccessibilityManager Service處尋求方法進行相關(guān)插件的檢測和禁止;②既然最終操作View的是AccessibilityInteractionClient對象,那么就在此處想辦法,讓其無法獲得對應(yīng)的View對象或無法操作該View對象,以達到防御插件的目的。

        3.1 外掛插件檢測

        Accessibility Service需要通過AccessibilityManager Service注冊,而在AccessibilityManager Service類中Android提供了一個getInstalledAccessibilityServiceList方法[18],該方法可通過用戶ID獲得所有AccessibilityService的服務(wù)信息。這些信息是通過AccessibilityServiceInfo類型提供的,其中PackageNames是防御代碼處理的關(guān)鍵。在具體實現(xiàn)時需注意:由于AccessibilityManager Service是系統(tǒng)類,并未提供重寫接口,除非重新編譯Android系統(tǒng)源代碼,否則無法實現(xiàn)代碼邏輯。但是上文提及的AccessibilityManager類,其內(nèi)部利用Binder可以間接調(diào)用AccessibilityManager Service[19]。除此之外,AccessibilityManager Service還有一個getEnabledAccessibilityServiceList方法[18],可以取得所有已經(jīng)開啟的AccessibilityService,所以防御的實現(xiàn)思路也是一樣的。通過比較正在監(jiān)控目標的Accessibility Service應(yīng)用程序的包名,檢測或禁止外掛插件啟動。

        3.2 屏蔽View獲取和點擊事件

        Accessibility Service最終是通過AccessibilityInteractionClient對象操作View對象。其中,通過調(diào)用findAccessibilityNodeInfosByText方法獲得期望的被監(jiān)控應(yīng)用程序UI的關(guān)鍵View對象,再通過調(diào)用performAccessibilityAction方法在該View對象上執(zhí)行點擊操作。針對此原理采取以下兩個措施:①在實現(xiàn)APP時實現(xiàn)自己的TextView實現(xiàn)類,使其重寫TextView的findViewsWithText方法[20],在該方法中將控件移出UI節(jié)點樹,使Accessibility Service反序列查找UI節(jié)點樹時無法找到這個View對象;②performAccessibilityAction方法執(zhí)行點擊事件最終會調(diào)用查找到的View的OnClickListener,所以可將OnClick替換為OnTouch事件。因為Android控件一般的操作都是執(zhí)行點擊操作,外掛插件編寫者一般也會有這個固定思維。

        4 結(jié)語

        移動平臺的反外掛技術(shù)研究越來越重要,但將傳統(tǒng)的反外掛技術(shù)直接應(yīng)用于移動應(yīng)用平臺難以有效防御外掛,特別是基于Accessibility Service的移動外掛插件。本文通過反編譯已知的基于Accessibility Service的移動外掛插件,分析其實現(xiàn)原理和外掛行為模式,有針對性地提出通過AccessibilityManager有效檢測外掛插件,以及實現(xiàn)Android應(yīng)用程序時有意識屏蔽關(guān)鍵View的獲取和點擊事件這兩種有效防御措施。實驗驗證表明,綜合采用這兩種措施,對已知外掛插件的識別準確率可達100%,對通過簽名變種的外掛插件識別準確率也達到92%。未來在外掛插件樣本數(shù)據(jù)充足的情況下,可以結(jié)合本文研究成果,應(yīng)用機器學(xué)習(xí)算法,對移動外掛插件進行外掛行為模式的自動識別研究,以提高對其它形式變種外掛的識別準確率。

        參考文獻:

        [1] 甘迪文. Windows黑客編程技術(shù)詳解[M]. 北京:人民郵電出版社,2018.

        [2] 蘭曉,尹杰. 中國網(wǎng)絡(luò)游戲外掛問題現(xiàn)狀分析[J]. 軟件,2010,31(10):71-77.

        [3] 胡和君,范明鈺. 基于內(nèi)存搜索的隱藏進程檢測技術(shù)[J]. 計算機應(yīng)用,2008,29(1):124-129.

        [4] 李延會,岳彩祥,徐金艷,等. 基于Winpcap的數(shù)據(jù)包捕獲和協(xié)議分析系統(tǒng)的設(shè)計與實現(xiàn)[J]. 中國科技信息,2009(10):66-71.

        [5] 楊丹,高員,顧欣,等. 基于用戶數(shù)據(jù)分析的網(wǎng)頁游戲反外掛方法[J]. 電子產(chǎn)品可靠性與環(huán)境試驗,2015,33(4):25-31.

        [6] 黃旭,曾孟佳,范婧,等. 一種基于ELM的在線游戲外掛檢測方法[J]. 微型電腦應(yīng)用,2018,34(4): 1-4.

        [7] 王倩文,沈蘇彬,吳振宇. 基于安卓平臺的惡意軟件動態(tài)監(jiān)測的研究[J]. 計算機技術(shù)與發(fā)展,2018,28(8):124-128.

        [8] NIKOLAY ELENKOV. Android security internals: an in-depth guide to android's security architecture[M]. No Starch Press,2014.

        [9] 王明生. 基于機器學(xué)習(xí)的Android惡意應(yīng)用檢測系統(tǒng)的設(shè)計與實現(xiàn)[D]. 蘭州:蘭州大學(xué),2017.

        [10] GOOGLE ANDROID TEAM. Build accessibility services[EB/OL]. https://developer.android.google.cn/guide/topics/ui/accessibility/services.

        [11] BLAKE MEIKE G. Inside the Android Os: building, customizing, managing and operating Android system services[M]. Addison-Wesley Professional, 2018.

        [12] 胡安明. Android平臺中AIDL語言的研究與分析[J]. 廣東技術(shù)師范學(xué)院學(xué)報:自然科學(xué)版,2014, 35(3):29-31.

        [13] GOOGLE ANDROID TEAM. Android interface definition language[EB/OL]. https://developer.android.com/guide/components/aidl.

        [14] GOOGLE ANDROID TEAM. Broadcasts overview[EB/OL]. https://developer.android.google.cn/guide/components/broadcasts.

        [15] 林學(xué)森. 深入理解Android內(nèi)核設(shè)計思想[M].北京: 人民郵電出版社,2017.

        [16] GOOGLE ANDROID TEAM. Use node tree debugging[EB/OL]. https://developer.android.com/guide/topics/ui/accessibility/node- tree-debugging.

        [17] GOOGLE ANDROID TEAM. Build more accessible custom views[EB/OL]. https://developer.android.com/guide/topics/ui/accessibility/custom-views.

        [18] GOOGLE ANDROID TEAM. Accessibility manager[EB/OL]. https://developer.android.com/reference/android/view/accessibility/AccessibilityManager.

        [19] PATIL N,BHOLE D,SHETE P. Enhanced UI automator viewer with improved android accessibility evaluation features[C]. International Conference on Automatic Control & Dynamic Optimization Techniques. IEEE, 2016.

        [20] GOOGLE ANDROID TEAM. TextView [EB/OL]. https://developer.android.com/reference/android/widget/TextView.

        (責(zé)任編輯:杜能鋼)

        猜你喜歡
        外掛插件調(diào)用
        槍械的“外掛神器”
        自編插件完善App Inventor與樂高機器人通信
        電子制作(2019年22期)2020-01-14 03:16:34
        核電項目物項調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        戰(zhàn)斗機武器外掛投放與內(nèi)埋投放比較
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        MapWindowGIS插件機制及應(yīng)用
        基于Revit MEP的插件制作探討
        利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
        那些死于外掛的網(wǎng)絡(luò)游戲們!
        蜜芽亚洲av无码精品色午夜| 成人av综合资源在线| 国产91会所女技师在线观看| 丝袜美腿在线观看一区| 国产日韩欧美一区二区东京热| 亚欧免费无码aⅴ在线观看| 一二三四视频社区在线| 豆国产95在线 | 亚洲| 色欲AV无码久久精品有码| 双腿张开被9个黑人调教影片| 亚洲国产AⅤ精品一区二区不卡| 国产日产免费在线视频| 视频国产自拍在线观看| 亚洲第一女人av| 国产一区二区三精品久久久无广告| 国产乱子伦精品无码码专区| 国产精品美女久久久浪潮av| 国产又湿又爽又猛的视频 | 国产亚洲欧洲三级片A级| 热门精品一区二区三区| 蜜桃视频羞羞在线观看| 国产av无码专区亚洲av男同| 永久黄网站免费视频性色| 最近中文字幕完整版| 亚洲电影中文字幕| 天堂av在线免费播放| 侵犯了美丽丰满人妻中文字幕| 国产亚洲aⅴ在线电影| 99香蕉国产精品偷在线观看 | 久久国产精品亚洲我射av大全| 亚洲综合av大全色婷婷| 男女车车的车车网站w98免费| 亚洲偷自拍另类图片二区| av天堂手机在线免费| 少妇被黑人整得嗷嗷叫视频| 国产精品久久人妻无码| 免费成人毛片| 亚洲专区在线观看第三页| 天涯成人国产亚洲精品一区av| 大学生高潮无套内谢视频| 少妇被躁爽到高潮无码文|