国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

完整的安卓系統(tǒng)框架層調(diào)用圖生成方法

2018-09-05 10:19:04代蕊蕊王雅哲
智能計算機與應(yīng)用 2018年3期
關(guān)鍵詞:安卓調(diào)用進程

代蕊蕊 王雅哲

文章編號: 2095-2163(2018)03-0015-06中圖分類號: 文獻標志碼: A

摘要: 關(guān)鍵詞: (1 Beijing Engineering Laboratory of the Internet Intelligent Device Sercurity, Institute of Information Engineering,

Chinese Academy of Sciences, Beijing 100195, China; 2 School of Cyber Security,

University of Chinese Academy of Sciences, Beijing 100049, China)

Abstract: At present, Android framework call graph static analysis is limited to the Java framework layer, ignoring the media services and sensor services in the C++ framework layer. The safety analysis of the Android system based on the call graph is also less complete. Based on the in-depth analysis of the Android system framework mechanism and source code, the paper presents a complete Android framework call graph generation method. It includes three parts, which are: the Java framework call graph, C++ framework call graph and JNI connection for complete call graph. After that, the paper analyzes in detail the call chain about remote process call, message handler and Java Native Interface.

Key words:

引言

當(dāng)前,對安卓系統(tǒng)框架層的調(diào)用圖靜態(tài)分析局限在Java框架層,但是安卓系統(tǒng)框架層卻還容納有不可或缺的一部分,即C++框架層,該層可提供一些頗具代表性的媒體服務(wù),包括CameraService、AudioFlinger、AudioPolicyService、MediaPlayerService、與用戶敏感信息密切相關(guān)的傳感器服務(wù)的主要功能也在該層運行實現(xiàn),包括SensorService、GravitySensor、 LinearAccelerationSensor、 OrientationSensor等。本文研究旨在生成完整的安卓系統(tǒng)框架層調(diào)用圖,從而增進現(xiàn)有安卓系統(tǒng)靜態(tài)分析的完整性,更好地支持論證各類安卓系統(tǒng)框架層安全問題的分析。在對安卓系統(tǒng)框架層機制和源碼深入探討分析的基礎(chǔ)上,該方法主要包含了Java框架層調(diào)用圖、C++框架層調(diào)用圖、JNI連接生成完整的框架層調(diào)用圖三個部分。下面,將就這一內(nèi)容展開設(shè)計論述。

1安卓系統(tǒng)概述及框架層分析存在的問題

1.1安卓系統(tǒng)架構(gòu)

安卓系統(tǒng)不僅龐大,而且錯綜復(fù)雜,安卓系統(tǒng)架構(gòu)[1]如圖1所示。由圖1可知,從Kernel層開始進入安卓系統(tǒng),用于加載Binder Driver、Camera Driver、GPS Driver等;Native層中的init進程(pid=1)是Linux系統(tǒng)的用戶進程,用于啟動ServiceManager(Binder服務(wù)管家)等重要服務(wù);C++ Framework層的Media Server進程由init進程衍生得來,用于啟動和管理CemaraService、AudioFlinger等本地系統(tǒng)服務(wù);Zygote進程由init進程孵化出來,Java Framework的System Server是Zygote進程孵化的第一個進程,用于啟動和管理LocationManagerService、WifiService、BluetoothManagerService等Java系統(tǒng)服務(wù);所有的APP進程都是由Zygote進程孵化的,通過Binder調(diào)用系統(tǒng)服務(wù)實現(xiàn)相應(yīng)功能。

1.2現(xiàn)有安卓系統(tǒng)框架層分析方案

PScout[2]是基于soot[3]的一個開源項目,研究最終將提取安卓中API(documented API和undocumented API)和對應(yīng)的權(quán)限的關(guān)系,對應(yīng)關(guān)系的提取是通過權(quán)限提取和對安卓框架層調(diào)用圖的可達性分析得到的,但是PScout僅針對Java框架層,無法生成C++框架層的調(diào)用圖。

文獻[4]主要研究分析安卓框架層源碼中的安全體系,設(shè)計提出了一個靜態(tài)分析工具來分析源碼中的權(quán)限問題。其中,生成框架層調(diào)用圖的工具是WALA,該工具同樣只針對安卓Java框架層,無法生成C++框架層的調(diào)用圖。

Kratos[5]的研發(fā)目的在于分析Android系統(tǒng)中權(quán)限不一致性問題,即針對同一資源在不同路徑上的權(quán)限檢查不同,其中生成框架層調(diào)用圖的工具是Spark,該工具從一個入口點開始尋找一個方法調(diào)用到的方法,然后以調(diào)用到的方法為起點繼續(xù)尋找下一級調(diào)用方法,同樣,該工具無法生成C++框架層的調(diào)用圖。

綜上所述可知,安卓系統(tǒng)框架層包括C++框架層、Java框架層和連接兩層的JNI,但是現(xiàn)有安卓系統(tǒng)框架層的分析方法僅針對Java框架層,卻忽略了C++框架層中的Camera、Audio等重要系統(tǒng)服務(wù)。特別指出的是,加速儀、陀螺儀、重力感應(yīng)儀、氣壓計、溫度計、光度計、溫度計、方位傳感器、磁強計等與用戶隱私高度相關(guān)的傳感器[6]的優(yōu)勢功能也在C++框架層實現(xiàn)。所以,為了更趨完善地系統(tǒng)支持各類安卓系統(tǒng)框架層安全問題的分析,就需要研究構(gòu)建一個完整的安卓系統(tǒng)框架層調(diào)用圖,不僅可以展示Java函數(shù)的調(diào)用,而且可以提供C++函數(shù)的調(diào)用關(guān)系,以及兩者之間的相互調(diào)用關(guān)系。

2完整的安卓系統(tǒng)框架層調(diào)用圖生成方法設(shè)計

為了保證安卓系統(tǒng)框架層調(diào)用圖的完整性,如圖2所示,本文基于對安卓系統(tǒng)框架層源碼的深入分析,結(jié)合PScout、Doxygen[7]和Graphviz[8]分別生成Java框架層調(diào)用圖和C++框架層調(diào)用圖,然后利用JNI中本地函數(shù)的注冊和Java函數(shù)指針的注冊將2部分調(diào)用圖合成一個完整的安卓系統(tǒng)框架層調(diào)用圖。研究內(nèi)容可闡釋分述如下。

2.1Java框架層調(diào)用圖

Soot是開源的Java編譯優(yōu)化框架,可以用其來對Java字節(jié)碼的程序流和控制流進行分析,首先利用soot提取每個方法調(diào)用到的N個方法,然后提取N個方法中每個方法調(diào)用到的M個方法,如此重復(fù),從而可以對每個組件生成調(diào)用圖。

對所有組件生成的調(diào)用圖添加遠程進程調(diào)用(Remote Process Call,RPC )相關(guān)的邊。在安卓Java框架層通過接口文件處理Binder RPC 操作,如圖3所示。圖2完整調(diào)用圖生成方法圖3Java框架層Binder遠程進程調(diào)用過程示例

Fig. 2Complete call graph generation method Fig. 3Java framework layer Binder RPC example

ILocationManager.aidl 是一個安卓接口定義文件,具體實現(xiàn)在LocationManagerService 服務(wù)中,ILocationManager$Stub是該服務(wù)的服務(wù)端代理;ILocationManager$Stub$Proxy 是該服務(wù)的客戶端代理;當(dāng)客戶端LocationManager 需要從服務(wù)LocationManagerService 獲取位置信息時,調(diào)用服務(wù)端的getLastLocation方法,客戶端代理負責(zé)封裝IPC 數(shù)據(jù),服務(wù)端代理負責(zé)解析IPC數(shù)據(jù),然后調(diào)用了LocationManagerService 服務(wù)中的getLastLocation方法后,位置信息數(shù)據(jù)作為返回值被返回給LocationManager 服務(wù)管理者。

以獲取最后一次位置信息為例,添加RPC相關(guān)的邊后的部分調(diào)用鏈可見表1。

最后,添加消息處理機制相關(guān)的邊。在安卓中,消息發(fā)送使用通用的消息處理類,即Message Handler,消息發(fā)送者必須先獲取該類才能發(fā)送消息。該類可以用來區(qū)分消息的發(fā)送方法和接收方法,以Location ManagerService.java 中的MSG_LOCATION_CHANGED 消息的發(fā)送為例,源碼中的關(guān)鍵調(diào)用如圖4所示,消息的發(fā)送方法是reportLocation,消息的處理實例為mLocationHandler,對應(yīng)的類是LocationManagerService 的內(nèi)部類LocationWorkerHandler,該類中有handleMessage方法。從該方法中可以看出,消息MSG_LOCATION_CHANGED對應(yīng)的調(diào)用方法為handleLocationChanged。

添加消息處理機制相關(guān)的邊后,位置信息上報對應(yīng)的部分調(diào)用鏈可見表2。

為了生成完整的C++框架層調(diào)用圖,設(shè)計過程可做如下解析:

(1)利用Doxygen和graphviz對整個安卓框架層的C++代碼生成分散的函數(shù)調(diào)用圖。

(2)處理分散的dot文件,通過文本分析識別所有dot文件中存在的邊,例如,圖5中的9條邊需要加入調(diào)用圖文件中,其它dot文件的處理方式相同。因為不同dot文件中可能存在相同的邊,就要對最終的結(jié)果文件進行去重。

(3)添加RPC相關(guān)的邊。如圖6所示,以Camera為例,C++框架層的Binder通過接口文件實現(xiàn),如ICameraService接口執(zhí)行Binder RPC交互,重點處理來自客戶端的連接請求(getNumberOfCameras, getCameraInfo, connect)。其中,BpCameraService為客戶端代理,BnCameraService為服務(wù)端代理; ICamera接口將負責(zé)處理來自客戶端的設(shè)置與控制請求(startPreview, takePicture等),ICameraClient接口定義的是回調(diào)函數(shù),將負責(zé)處理來自服務(wù)端的事件(dataCallback, notifyCallback, dataCallbackTimestamp)。

圖6中類與接口的繼承關(guān)系可以通過頭文件的分析獲取,Camera繼承自BnCameraClient;CameraService繼承自BnCameraService;CameraClient繼承自CameraService::Client,而CameraService::Client繼承自BnCamera,所以CameraClient繼承自BnCamera。接口中客戶端與服務(wù)端函數(shù)的對應(yīng)關(guān)系可以通過接口文件的分析獲取,以CameraClient中的takePicture函數(shù)為例,如圖7所示,Camera類中的takePicture調(diào)用ICamera中的takePicture,ICamera中的takePicture通過BnCamera可傳遞給其子類CameraClient,從而調(diào)用到了CameraClient中的takePicture。添加上RPC相關(guān)邊后的調(diào)用鏈(部分),參見第3節(jié)中表3中的5~7行。

2.3JNI連接生成完整的框架層調(diào)用圖

安卓中大量使用了JNI技術(shù),JNI層的代碼使用Native語言(C/C++)編寫,使得Java程序中的函數(shù)可以調(diào)用Native語言寫的函數(shù),Native程序中的函數(shù)可以調(diào)用Java層的函數(shù)。如圖6所示,在Camera架構(gòu)中,android_hardware_Camera.cpp(JNI)位于Camera.java與Camera.cpp之間,目的就是將Camera.java中的連接、設(shè)置和控制類信息傳遞給Camera.cpp,同時將Camera.cpp中的數(shù)據(jù)回調(diào)信息上交給Camera.java。

為了進行如上功能研究,Java層需要向JNI注冊函數(shù),函數(shù)將定義在JNI中,如圖7所示。Camera.java中的函數(shù)takePicture調(diào)用本地函數(shù)native_takePcture,而native_takePicture在android_hardware_Camera.cpp(JNI)則注冊為android_hardware_Camera_takePicture,該函數(shù)中實現(xiàn)具體的功能,即調(diào)用Camera.cpp中的takePicture函數(shù)。這一調(diào)用鏈可參見第3節(jié)中表3中的2~4行。

對安卓框架層中其它JNI的處理原理也是如此,從而可以將Java框架層與C++框架層的調(diào)用圖連接起來,生成完整的安卓框架層調(diào)用圖。3結(jié)果

以拍照(takePicture)為例,一條從Java層經(jīng)過JNI、跨過Binder RPC的調(diào)用鏈可見表3。起點為android.hardware.Camera.java中的takePicture函數(shù),終點為CameraClient.cpp中的takePicure函數(shù),該函數(shù)調(diào)用CameraHardwareInterface.h中的takePicture,本文將其視作偏硬件的操作,不計入調(diào)用鏈。

而且,研究中可以利用圖形數(shù)據(jù)庫neo4j[9]對兩點之間的調(diào)用圖進行可視化,Location中部分調(diào)用圖如圖8所示。圖8中,每個節(jié)點代表一個函數(shù),在neo4j中點擊進行查看。

4結(jié)束語

為了更好地支持各類安卓系統(tǒng)框架層安全問題的分析,增進現(xiàn)有安卓系統(tǒng)靜態(tài)分析的完備性,本文研究設(shè)計了一種完整的安卓系統(tǒng)框架層調(diào)用圖生成方法。基于對安卓系統(tǒng)框架層源碼的深入分析和現(xiàn)有相關(guān)開源項目的透徹理解,該方法主要包含Java框架層調(diào)用圖、C++框架層調(diào)用圖、JNI連接生成完整的框架層調(diào)用圖共3個部分。最終生成的完整調(diào)用圖可以支持安卓系統(tǒng)研究者的分析工作,例如,安卓權(quán)限機制的安全性分析、安卓安全訪問管控系統(tǒng)中鉤子代碼的添加[10-11]。

參考文獻

[1] 卿斯?jié)h. Android安全研究進展[J]. 軟件學(xué)報,2016, 27(1): 45-71.

[2] AU K W Y, ZHOU Yifan, HUANG Zhen, et al. PScout: Analyzing the Android permission specification[C]// Proceedings of the 2012 ACM conference on computer and communications security. Raleigh, North Carolina, USA:ACM, 2012:217-228.

[3] VALLERAI R, CO P, GAGNON E, et al. Soot-a Java bytecode optimization framework[C]//CASCON '99 Proceedings of the 1999 conference of the Centre for Advanced Studies on Collaborative research. Mississauga, Ontario, Canada: ACM, 1999:1-11.

[4] BACKES M, BUGIEL S, DERR E, et al. On demystifying the Android application framework: Re-visiting Android permission specification analysis[C]// 25th USENIX Security Symposium. Austin, TX: USENIX Association, 2016:1-18.

[5] SHAO Yuru, OTT J, CHEN Q A, et al. Kratos: Discovering inconsistent security policy enforcement in the Android framework[C]// Network and Distributed System Security Symposium. San Diego, California, USA:Dblp,2016:1-15.

[6] NARAIN S, VOHUU T D, BLOCK K, et al. Inferring user routes and locations using zero-permission mobile sensors[C]// Security and Privacy. San Jose, CA, USA:IEEE, 2016:397-413.

[7] Doxygen. Downloads[EB/OL]. [2018-01-30]. http://www.stack.nl/~dimitri/doxygen/download.html.

[8] graphviz. Graph visulization software[EB/OL]. [2016-10-10]. http://www.graphviz.org/.

[9] Neo4j.inc. neo4j[EB/OL].[2017-07-11]. https://neo4j.com/.

[10]CHAKRABORTY S, SHEN Chenguang, RAGHAVAN K R, et al. ipShield: A framework for enforcing context-aware privacy[C]//Proceedings of the 11th USENIX Symposium on Networked Systems Design and Implementation(NSDI'14). Seattle, WA, USA: Usenix Association, 2014:143-156.

[11]PETRACCA G, SUN Yuqiong, JAEGER T, et al. AuDroid: Preventing attacks on audio channels in mobile devices[C]//Proceedings of the 31st Annual Computer Security Applications Conference. Los Angeles, CA, USA:ACM, 2015:181-190.(上接第14頁)

[5] [ZK(#〗吳曉軍,王紅星,劉敏. 不同能見度下接收孔徑對無線光通信誤碼率性能影響分析[J]. 光學(xué)學(xué)報,2013,33(10):1006003.

[6] 封雙連,張志剛,強希文,等. 戈壁地區(qū)近地面大氣折射率結(jié)構(gòu)常數(shù)的統(tǒng)計分析[J]. 強激光與粒子束, 2012, 24(1):39-42.

[7] 葛琪,王可東,張弘,等. 長曝光大氣湍流退化圖像點擴散函數(shù)估計 [J]. 紅外與激光工程,2014,43(4):1327-1331.

[8] 王先鵬. 大氣激光通信系統(tǒng)誤碼特性的實驗測量與分析 [D]. 西安:西安理工大學(xué),2008.

[9] 于林韜,宋路,韓成,等. 空地激光通信鏈路功率與通信性能分析與仿真 [J]. 光子學(xué)報,2013,42(5):543-547.

[10]KAUR P, JAIN V K, KAR S. Performance analysis of FSO array receivers in presence of atmospheric turbulence[J]. IEEE Photonics Technology Letters, 2014, 26(12): 1165-1168.

[11]黃繼鵬,王延杰,孫宏海,等. 激光光斑位置精確測量系統(tǒng)[J]. 光學(xué)精密工程, 2013, 21(4):841-848.

[12]王德飛,楚振鋒,任正雷,等. 大氣湍流對激光通信系統(tǒng)誤碼率影響的研究 [J]. 激光與紅外,2011,41(4):390-393.

[13]ANDREWS L C, PHILLIPS R L, YOUNG C Y. Laser beam scintillation with applications [M]. Bellingham: SPIE Press, 2001.

[14]馬曉珊,朱文越,饒瑞中. 利用閃爍和漂移效應(yīng)測量大氣折射率結(jié)構(gòu)常數(shù)的對比分析[J]. 強激光與粒子束,2007,19(4):538-542.

[15]LI H D, KALLERGI M, CLARKE L P, et al. Markov random field for tumor detection in digital Mammagraphy[J]. IEEE Trans. on Medical Imaging,1995,14(3):565-576.

猜你喜歡
安卓調(diào)用進程
核電項目物項調(diào)用管理的應(yīng)用研究
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
文物表情包
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
一種基于安卓系統(tǒng)的手機側(cè)抓包分析方法
安卓L未至安卓M來了!安卓首泄漏M系統(tǒng)
社會進程中的新聞學(xué)探尋
我國高等教育改革進程與反思
Linux僵死進程的產(chǎn)生與避免
繁峙县| 新丰县| 西乡县| 伊宁市| 江川县| 苍山县| 大城县| 沁阳市| 商洛市| 定远县| 石阡县| 白沙| 淳安县| 邵东县| 南木林县| 桃园县| 河北区| 镇赉县| 乐平市| 湘阴县| 福清市| 道真| 上林县| 乌拉特中旗| 郯城县| 新巴尔虎左旗| 辽宁省| 谢通门县| 山东省| 通海县| 遂昌县| 沐川县| 芜湖市| 吴堡县| 图们市| 松桃| 满洲里市| 瑞金市| 永嘉县| 包头市| 兴海县|