999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Dalvik 虛擬機的Android Application 脫殼技術

2017-04-22 08:34:46王李松方勇
現代計算機 2017年7期
關鍵詞:調試檢測

王李松,方勇

(四川大學電子信息學院,成都 610065)

基于Dalvik 虛擬機的Android Application 脫殼技術

王李松,方勇

(四川大學電子信息學院,成都 610065)

隨著移動應用的飛速發展,移動端頻頻爆發的惡意代碼日益嚴重地困擾著每一個用戶的隱私和財產安全。同時大量的惡意程序采用加殼保護,躲避殺毒引擎的掃描。無論是分析木馬病毒,還是尋找正常程序的漏洞,首先都要從加殼的程序中得到原始的可執行文件。基于對Android平臺加固技術以及Dalvik虛擬機的機制進行研究,提出并實現一種通用的脫殼方案DexUnpack。

Dalvik;Android;加殼;脫殼

0 引言

目前Android已經成為最流行的移動操作系統,巨大的市場占有率帶來了極大的利潤,大量的攻擊者也將目光投到了Android平臺。阿里移動安全2016年第二季度的報告顯示,該季度感染惡意代碼的Android設備總量高達2877萬,比上一季度增長96.2%。與此同時,原本用來防止應用程序被逆向分析、破解修改、重打包的加殼技術也被惡意程序利用。攻擊者利用加殼技術隱藏木馬病毒程序的真正代碼來躲避安全軟件殺毒引擎的掃描與移動安全研究人員的分析。Android平臺常用的加殼技術主要包括:虛擬機檢測,代碼動態加載,代碼動態修改,反調試。無論是安全人員分析應用還是各種殺毒引擎掃描查殺惡意程序,首先都必須獲得原始的可執行文件(Dex)。

由于脫殼技術對于Android應用安全的重要作用,百度移動安全的研究人員提出并實現了基于Xp osed框架的脫殼工具ZjDroid,安全研究員瘦蛟舞基于Cydia Substrate框架實現了Dex Memory Dump Tools。其中的基本思想就是Android應用運行的內存空間中存在完整的Dex文件,直接將對應區域的內存讀出即可。但是由于加殼技術的發展,當加殼過后的程序檢測到在上述脫殼環境中運行時,可以通過直接退出,大量形成虛假的Dex內存空間,Dex動態修改等對抗手段讓其失效,使得我們要么不能得到Dex,要么得到錯誤或不完整的Dex。基于對Android應用的加殼技術以及Dalvik虛擬機中可執行文件的加載過程的深入分析,通過修改Android系統源碼,編譯自定義的系統實現了一種通用的脫殼方案DexUnpack。

1 Android 平臺的加殼技術

1.1 環境檢測

為了防止應用程序在危險環境運行被分析破解,加殼程序都具有運行環境檢查功能,一旦檢測到自己的運行環境不是安全環境,就會觸發本身的安全機制,不會進行真實Dex文件的加載。常用的檢測技術包括檢查Android模擬器以及脫殼環境檢測。Android模擬器檢測可以通過檢查設備的IMEI,DeviceID,PhoneNumber,Fingerprints,Props,特征文件(/dev/socket/qemud,/dev/qemu_pipe)等。脫殼環境檢測包括Root檢測,Xposed框架檢測,Cydia Substrate框架檢測等。

1.2 代碼動態加載

Dalvik虛擬機允許程序在運行時動態加載代碼執行。加殼的應用程序往往會將原始的可執行文件進行加密保存,在運行時對加密的代碼進行解密,將解密后的內容直接通過匿名內存映射的方式直接映射到一塊匿名的內存空間然后使用libdvm.so中的相關函數進行Dex文件的內存加載。這樣整個文件系統中就不會出現Dex文件,大大增強了隱蔽性與安全性。

1.3 代碼動態修改

當可執行代碼被Dalvik虛擬機加載進內存后可以通過JNI接口調用native code更改可執行代碼,當該代碼需要真正運行時再將其修改還原。這樣即使在內存中也不存在完整的可執行代碼,這就從一定程度上增加了逆向分析的難度。讓傳統的基于內存搜索和內存Dump的方法都失效。

1.4 反動態調試

動態調試技術是分析應用程序的重要手段,加殼程序為了阻止自身被動態分析,采用的手段通常有:限制調試器連接,Android使用android:debuggable標簽標識應用程序是否可調試,通過將android:debuggable設置為false便可限制調試器連接;搶占ptrace,搶占ptrace的概念繼承至Linux系統的ptrace系統調用,ptrace系統調用為開發者提供一種使用一個進程監視、控制另一個進程的執行或檢查、改變另一個進程內存和寄存器的方法,ptrace經常被用來實現反調試功能,因為一個進程只能被ptrace一次,如果應用程序使用ptrace進行自我監控和跟蹤,就可以阻止動態調試;檢查/proc/pid目錄下的文件,Linux系統將進程在內核中的進程信息通過內存映射的方式映射到/proc/pid目錄中的文件中,當程序被調試時,相關信息會發生變化,例如status文件中的TracerPid就會從0變為調試該進程的進程pid,通過檢測TracerPid是否為0就可檢測程序是否正在被動態調試。

2 DexUnpack 實現原理

2.1 DexUnpack實現的基本思想

Android應用程序的可執行文件即Dex文件在運行時由Dalvik虛擬機加載并執行,它的文件格式如圖一所示。只要我們能夠正確地重建此文件結構,就能得到脫殼后的Dex文件。為了重建該文件結構,我們必須得到每一個Class的全部信息。因為每個Class在使用前都必須被Dalvik虛擬機正確加載,所以只要我們深入到Dalvik虛擬機對Dex文件處理加載Class的過程中,修改Dalvik虛擬機的處理過程即可得到Class的全部信息。

圖1 Dex文件結構

2.2 Dex文件處理

對Dex文件進行處理的過程如圖2所示:

圖2 Dex文件處理流程

(1)對Dex文件驗證和優化,驗證的目的是對Dex文件中的類數據進行安全性合法性檢驗,為虛擬機的安全穩定運行提供保證;優化的目的則是根據當前設備平臺增加輔助信息,使得Dex文件更加高效的被執行。

(2)對Dex文件進行解析,其目標就是通過在內存中創建專用的數據結構描述該文件,為隨后實際加載某一指定類做好數據準備。

(3)對指定類進行實際加載,其功能是實時根據Dalvik虛擬機執行需要從已被解析的Dex文件中提取二進制Dalvik字節碼并將其封裝進運行時數據結構,以供解釋器解釋執行。該運行時數據結構實際上是一個ClassObject結構體對象,也稱為類對象,該數據結構用于封裝程序類的所有運行時數據信息。當虛擬機執行一個類方法時,解釋器將引用并執行類對象中封裝的方法操作碼,進而達到完成程序要求的執行目標。因此,ClassObject對象在程序運行過程中承擔著不可替代的重要作用。

ClassObject加載機制的根本任務是根據程序運行需要在已被虛擬機解析的Dex文件中查找并加載指定類。類加載機制最終會輸出一個ClassObject數據結構的實例對象。Dalvik虛擬機主要通過調用類加載機制的本地方法接口函數Dalvik_dalvik_System_DexFile_ defineClass對運行時所需的類進行定義,完成對類的加載工作。當類加載完成我們就得到了重建是需要的全部Class信息。

3 DexUnpack 的設計與實現

通過對Dalvik虛擬機源碼的分析,我們知道了ClassObject的完整的加載過程。通過對Dalvik虛擬機的源碼進行修改,增加反模擬器檢測的內核模塊,實現了DexUnpack。

3.1 DexUnpack的框架結構

DexUnpack主要由一個自定義的Android系統完成主要功能,如圖3所示。當加殼APP應用在我們的工具上運行,通過反模擬器檢測模塊,Dex文件內存重建模塊,脫殼應用重建模塊的作用,我們將得到一個脫殼后的應用。后續的安全人員安全分析和殺毒軟件的掃描即可在真正的可執行程序上進行。

3.2 反模擬器檢測

因為加殼代碼一開始就會檢測運行環境,如果發現自身運行在模擬器上就會觸發本身的安全機制,不會進行Dex文件的加載。根據加殼代碼進行模擬器檢測的方法,通過自定義的模塊進行對抗。DexUnpack中實現反模擬器檢測的方法有以下兩種:

圖3 Dexunpack處理加殼應用

(1)隱藏系統API返回的模擬器特征值:系統提供一些API獲得Android設備的電話號碼,IMEI,MAC地址等,在模擬器上這些值都是預定義不變的,通過這些特征很容易判斷運行環境為模擬器。通過加載自定義的HOOK模塊,更改這些返回值即可隱藏真實的運行環境。一部分更改值如表1所示。

表1

(2)隱藏關鍵文件:/dev/socket/qemud和/dev/qemu_ pipe文件是模擬器中的關鍵驅動文件,隱藏這些文件可以隱藏真實的運行環境。隱藏方式同意通過修改File.exits(),當發現有應用在檢測這些路徑時直接返回為空,代表這些文件并不存在。

3.3 Dex文件內存重建

通過上面對于ClassObject對象的加載我們獲得了ClassData的原型數據,但是前面提到加殼程序的動態修改技術使得當前ClassData的原型數據并不是正確的。對于每一個新加載的類,它的初始化函數不一定會立即調用。但是該類的任何其他函數被調用前或該類的靜態成員被使用前該初始化函數一定會被調用。所以利用代碼動態修改技術的代碼都會放在類對象的初始化函數調用前。所以我們的解決方法是枚舉所有DexClassDef,行強制加載并初始化。

當我們得到了正確的ClassData的原型數據,下面需要按照結構體DexClassData重建ClassData。結構體DexClassData的結構如下:

當遍歷重建完全部的ClassData,Dex文件中最關鍵的各個Class的數據我們就重建完成了。下面只需要按照DexFile數據結構和ClassObject數據結構的對應關系重建Dex文件。重建過程如圖4所示:

圖4 數據結構對應關系

4 實驗結果

4.1 加殼廠商識別

加殼廠商在給應用加殼時會引入明顯的特征,通過加固后的應用的文件信息我們可以容易的判斷加殼的廠商。

娜迦:libchaosvmp.so,libddog.solibfdog.so

愛加密:libexec.so,libexecmain.so

梆梆:libsecexe.so,libsecmain.so,libDexHelper.so

360 :libprotectClass.so,libjiagu.so

通付盾:libegis.so

網秦:libnqshield.so

百度:libbaiduprotect.so

4.2 實驗數據

根據上文提出的方法實現DexUnpack并進行測試。為了測試DexUnpack的通用性與有效性我們選取不同廠商加殼的應用進行測試。測試的結果如下:

表2

從上面的實驗結果可以得出,本方案在對抗虛擬機檢測和脫殼成功率方面具有較好的效果,所以通過修改系統源碼實現自動化脫殼分析是十分可行的方案。

[1]Patrick Schulz.Code Protection in Android(2012)

[2]Chen,K.,Liu,P.,Zhang,Y.:Achieving Accuracy and Scalability Simultaneously in Detecting Application Clones on Android Markets. In:Proceedings of the ACMICSE(2014).

[3]Strazzere,T.:Android-Unpacker(2014).https://github.com/strazzere/androidunpacker.

[4]譚艷華.Android Dalvik即時編譯系統評估與優化.福建:東南大學,2015.

[5]Sabanal,P.:State of the art:Exploring the New Android Kitkat Runtime(2014).

[6]Qian,C.,Luo,X.,Yu,L.,Gu,G.:Vulhunter:Towards Discovering Vulnerabilities in Android Applications.IEEE Micro 35(1),44-53 (2015)

[7]Doha,Qatar.DroidNative:Real-Time Detection of Android Native Code Malware(2015)

[8]Yueqian Zhang,Xiapu Luo,Haoyang Yin.DexHunter:Toward Extracting Hidden Code from Packed Android Applications(2015).

[9]Gartner Inc.:Debunking Six Myths of App Wrapping(2015).http://gtnr.it/1aGJizc.

[10]ZjDroid.https://github.com/halfkiss/ZjDroid.

[11]吳艷霞,張國印.Dalvik虛擬機各模塊機制分析[D].北京:清華大學出版社,2014.

Code Extraction Technology of Packed Android Application Based on Dalvik Virtual Machine

WANG Li-song,FANG Yong
(College of Electronic Information,Sichuan University,Chengdu610065)

With the rapid development of mobile applications,the mobile device of the frequent outbreak of malicious code increasingly plaguing every user's privacy and property security.At the same time a large number of malicious programs use packed protection,avoid antivirus engine scan.Whether the analysis malicious program,or to find the normal program of the loopholes,first of all from the packed program to get the original executable file.Based on the research on the packed technology of Android platform and the mechanism of Dalvik virtual machine,puts forward and realizes a general de-wrapping program DexUnpack.

Dalvik;Android;Packed;Unpacked

1007-1423(2017)07-0045-05

10.3969/j.issn.1007-1423.2017.07.012

王李松(1991-),男,湖北松滋人,碩士,研究方向為Android安全

2016-12-22

2017-02-20

方勇,博士,教授,研究方向為信息安全、網絡信息對抗

猜你喜歡
調試檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
“幾何圖形”檢測題
“角”檢測題
基于航拍無人機的設計與調試
電子制作(2018年12期)2018-08-01 00:47:44
核電廠主給水系統調試
中國核電(2017年1期)2017-05-17 06:10:11
無線通信中頻線路窄帶臨界調試法及其應用
電子制作(2017年19期)2017-02-02 07:08:38
小波變換在PCB缺陷檢測中的應用
調壓柜的調試與試運行探討
主站蜘蛛池模板: 91黄视频在线观看| 三区在线视频| 亚洲无码高清视频在线观看| 五月婷婷欧美| 国产va欧美va在线观看| 国产一区二区丝袜高跟鞋| 99这里只有精品在线| 伊人色在线视频| 亚洲免费三区| 国产成人免费手机在线观看视频| www欧美在线观看| 97se亚洲综合在线| 成AV人片一区二区三区久久| 亚洲一级毛片免费观看| 久久香蕉国产线看观看精品蕉| 国产香蕉国产精品偷在线观看| 国产精品美乳| 日韩在线欧美在线| 国产噜噜在线视频观看| 成人午夜免费观看| 亚洲精品视频免费看| 88av在线看| 亚洲国产综合精品中文第一| 亚洲一区二区三区香蕉| 2021亚洲精品不卡a| 国产成人喷潮在线观看| 免费午夜无码18禁无码影院| 国产欧美日韩18| 91亚洲精选| 色婷婷丁香| 国产在线观看一区二区三区| 中国毛片网| 国产精品网址你懂的| 日本免费一级视频| 青青草国产免费国产| 欧美一区二区三区国产精品| 亚洲男人的天堂网| 天堂在线视频精品| 国产浮力第一页永久地址| 欧美中出一区二区| 亚洲第一国产综合| 国产毛片基地| AV不卡在线永久免费观看| 久久综合九九亚洲一区| 亚洲人成影院午夜网站| 成人免费网站在线观看| 亚洲婷婷在线视频| 手机永久AV在线播放| 国产手机在线小视频免费观看| 午夜精品福利影院| 亚洲AV电影不卡在线观看| 国产黄视频网站| 日韩精品久久久久久久电影蜜臀| 麻豆国产在线观看一区二区 | 亚洲国产成人精品青青草原| 婷婷六月激情综合一区| 手机在线看片不卡中文字幕| 一本一本大道香蕉久在线播放| 特级做a爰片毛片免费69| 国产福利小视频在线播放观看| 亚洲国产日韩一区| 精品午夜国产福利观看| 91福利在线观看视频| 91精品情国产情侣高潮对白蜜| 国产成人精品18| 亚洲一区二区三区国产精品| 乱人伦中文视频在线观看免费| 欧洲高清无码在线| 亚洲成人在线免费| 亚洲精品卡2卡3卡4卡5卡区| 精品欧美视频| 午夜老司机永久免费看片| 国产免费精彩视频| 国产精品第三页在线看| 日韩天堂网| 国产日韩欧美精品区性色| 精品人妻一区无码视频| 国产国产人在线成免费视频狼人色| 国产农村1级毛片| 国产男女免费视频| 69视频国产| 亚洲中文字幕无码爆乳|