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缺陷檢測中的應用
調壓柜的調試與試運行探討
主站蜘蛛池模板: 亚洲第一极品精品无码| 欧美性爱精品一区二区三区| 久久毛片免费基地| 久久夜色精品国产嚕嚕亚洲av| 2019国产在线| 2021国产精品自产拍在线| 日韩大乳视频中文字幕| 亚洲VA中文字幕| 亚洲一级毛片免费观看| 亚洲第一黄片大全| 国产精品男人的天堂| 97免费在线观看视频| 国产亚洲美日韩AV中文字幕无码成人 | 亚洲欧美一区二区三区图片| 免费在线不卡视频| 日本精品一在线观看视频| 国产一级精品毛片基地| 欧美a级在线| 国产日韩精品一区在线不卡| 国内精品久久久久鸭| 亚洲视频免| 99r在线精品视频在线播放| 久久永久视频| 免费可以看的无遮挡av无码| 这里只有精品在线| 久久综合AV免费观看| 欧美翘臀一区二区三区| 国产在线视频欧美亚综合| 亚洲无码视频喷水| 亚洲女人在线| 国产成人高清精品免费5388| 99久久精品免费看国产免费软件| 九九九精品成人免费视频7| 九九热免费在线视频| 亚洲专区一区二区在线观看| 日韩中文精品亚洲第三区| 亚洲乱伦视频| 日韩小视频在线播放| 一级毛片基地| 国产幂在线无码精品| 五月天综合网亚洲综合天堂网| 日本五区在线不卡精品| 国产丝袜丝视频在线观看| 毛片免费试看| 国产欧美日韩免费| 亚洲中字无码AV电影在线观看| 国产第一页第二页| 小蝌蚪亚洲精品国产| 国产欧美日韩91| 91在线国内在线播放老师| 色噜噜综合网| 久久大香香蕉国产免费网站| 91在线免费公开视频| 国产精品入口麻豆| 欧美中文字幕一区二区三区| 国产精品自在在线午夜| 亚洲精品色AV无码看| 国产在线啪| 在线综合亚洲欧美网站| 国产欧美日本在线观看| 欧美日韩国产精品va| 欧美国产日韩在线| 18黑白丝水手服自慰喷水网站| 欧美成人aⅴ| 无码一区二区波多野结衣播放搜索| 亚洲欧洲日产无码AV| 9966国产精品视频| 精品视频在线一区| 国产成人亚洲精品无码电影| 日本AⅤ精品一区二区三区日| 99久久亚洲精品影院| 午夜视频免费试看| 国产精品九九视频| 亚洲日韩日本中文在线| 亚洲欧美国产五月天综合| 国产成年无码AⅤ片在线| 欧美区一区| 波多野结衣无码视频在线观看| 国产 在线视频无码| 国产本道久久一区二区三区| 亚洲成人www| 国内精品一区二区在线观看|