本發(fā)明涉及信息安全技術(shù)領(lǐng)域,具體涉及一種文件轉(zhuǎn)換方法和裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)和移動(dòng)終端技術(shù)的發(fā)展,移動(dòng)終端安全問題和安全隱患也隨之愈來愈嚴(yán)重。尤其是安裝了android系統(tǒng)的移動(dòng)終端,基于android系統(tǒng)源代碼的開放性,其開發(fā)的應(yīng)用程序存在的風(fēng)險(xiǎn)更是備受關(guān)注。android系統(tǒng)雖然也有精心設(shè)計(jì)的安全體系,但是攻擊者仍然可以利用漏洞來繞過某些防護(hù)機(jī)制。
由于這個(gè)特性,大量惡意代碼和安全事件往往圍繞安全漏洞展開,由此可見安全漏洞是影響android安全性的關(guān)鍵因素,而如何有效挖掘android系統(tǒng)的安全漏洞,是技術(shù)人員面臨的亟需解決的技術(shù)問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種文件轉(zhuǎn)換方法和裝置,以對(duì)android系統(tǒng)的安全漏洞進(jìn)行挖掘,增強(qiáng)安裝了android系統(tǒng)的移動(dòng)終端的安全性,保護(hù)用戶隱私數(shù)據(jù)免遭攻擊者竊取。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種文件轉(zhuǎn)換方法,應(yīng)用于二進(jìn)制文件分析框架angr中,包括:
獲取待檢測的android應(yīng)用的dex文件;
將所述dex文件轉(zhuǎn)換為所述angr框架支持的二進(jìn)制格式的第一文件;
加載所述第一文件到所述angr框架中并對(duì)所述第一文件進(jìn)行符號(hào)執(zhí)行分析,根據(jù)所述符號(hào)執(zhí)行分析結(jié)果輔助判斷所述android應(yīng)用是否存在漏洞。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種文件轉(zhuǎn)換裝置,應(yīng)用于二進(jìn)制文件分析框架angr中,包括:
文件獲取模塊,用于獲取待檢測的android應(yīng)用的dex文件;
文件轉(zhuǎn)換模塊,用于將所述dex文件轉(zhuǎn)換為所述angr框架支持的二進(jìn)制格式的第一文件;
檢測確定模塊,用于加載所述第一文件到所述angr框架中并對(duì)所述第一文件進(jìn)行符號(hào)執(zhí)行分析,根據(jù)所述符號(hào)執(zhí)行分析結(jié)果輔助判斷所述android應(yīng)用是否存在漏洞。
本發(fā)明的有益效果是:本發(fā)明實(shí)施例的文件轉(zhuǎn)換方法和裝置,應(yīng)用于二進(jìn)制文件分析框架angr中,通過獲取待檢測android應(yīng)用的dex文件,將dex文件轉(zhuǎn)換為angr框架支持的二進(jìn)制格式的第一文件,然后加載第一文件到angr框架中對(duì)第一文件進(jìn)行符號(hào)執(zhí)行分析,根據(jù)符號(hào)執(zhí)行分析結(jié)果輔助判斷待檢測android應(yīng)用是否存在漏洞。如此,解決了由于現(xiàn)有angr框架不支持android應(yīng)用的字節(jié)碼文件進(jìn)而不能利用angr框架對(duì)android應(yīng)用進(jìn)行符號(hào)執(zhí)行分析的問題。而且,為android應(yīng)用的漏洞檢測提供了新的解決方案,增強(qiáng)了安裝android系統(tǒng)的移動(dòng)終端的安全性,保護(hù)用戶隱私數(shù)據(jù)免遭竊取和泄露,改善了移動(dòng)終端的用戶體驗(yàn)。
附圖說明
圖1是本發(fā)明一個(gè)實(shí)施例的一種文件轉(zhuǎn)換方法的流程示意圖;
圖2是本發(fā)明一個(gè)實(shí)施例的文件獲取流程示意圖;
圖3是apk文件轉(zhuǎn)換的流程示意圖;
圖4是dex文件的轉(zhuǎn)換流程示意圖;
圖5是本發(fā)明一個(gè)實(shí)施例的一種文件轉(zhuǎn)換裝置的結(jié)構(gòu)框圖。
具體實(shí)施方式
本發(fā)明的設(shè)計(jì)構(gòu)思在于:angr框架可以對(duì)不同類型的二進(jìn)制文件進(jìn)行符號(hào)執(zhí)行分析,它的加載器可以加載多種類型的二進(jìn)制文件,并且可以根據(jù)二進(jìn)制文件的類型自動(dòng)識(shí)別和匹配合適的后端裝載器。但是由于android字節(jié)碼的特殊性(即,android字節(jié)碼運(yùn)行在dalvik虛擬機(jī)中,與java不同,java字節(jié)碼運(yùn)行在jvm虛擬機(jī)中),angr框架的加載器不能識(shí)別android應(yīng)用的可執(zhí)行文件,即,android應(yīng)用的可執(zhí)行文件dex文件無法被angr成功加載。由于上述原因的存在,導(dǎo)致angr框架無法對(duì)android應(yīng)用進(jìn)行符號(hào)執(zhí)行分析進(jìn)而不能檢測android應(yīng)用是否存在漏洞。
本發(fā)明實(shí)施例主要是通過對(duì)android應(yīng)用的可執(zhí)行文件進(jìn)行處理,使其能夠成功加載到angr框架,從而使angr能夠適用于移動(dòng)終端的android系統(tǒng),對(duì)其進(jìn)行基于符號(hào)執(zhí)行的漏洞檢測,幫助提升android系統(tǒng)的安全性。
為便于理解,這里對(duì)本發(fā)明實(shí)施例中的幾個(gè)技術(shù)名詞進(jìn)行簡要說明。
angr框架:angr是二進(jìn)制自動(dòng)化分析框架,其中集成了很多二進(jìn)制分析技術(shù),具備對(duì)二進(jìn)制程序的動(dòng)態(tài)符號(hào)執(zhí)行能力和靜態(tài)分析能力。angr起初是用來尋找程序中的后門,現(xiàn)在可以應(yīng)用于漏洞分析領(lǐng)域。angr基于python架構(gòu),其兼容性較好,同時(shí)支持跨平臺(tái)、跨架構(gòu),目前可以分析多種二進(jìn)制文件。
符號(hào)執(zhí)行:符號(hào)執(zhí)行是一種代碼執(zhí)行空間遍歷技術(shù),在軟件安全、惡意代碼分析、程序調(diào)試等領(lǐng)域有著重要應(yīng)用。符號(hào)執(zhí)行是用抽象符號(hào)代替程序變量,根據(jù)程序的語義,在每條路徑上通過符號(hào)計(jì)算引擎對(duì)抽象符號(hào)等做語義操作,模擬程序執(zhí)行。符號(hào)執(zhí)行分為過程內(nèi)分析和過程間分析,基于是否實(shí)際執(zhí)行也可分為靜態(tài)符號(hào)執(zhí)行與動(dòng)態(tài)符號(hào)執(zhí)行。
angr框架符號(hào)執(zhí)行包括四個(gè)部分:可以加載幾乎任何二進(jìn)制文件的加載工具;將二進(jìn)制文件轉(zhuǎn)換為中間語言的轉(zhuǎn)換工具;對(duì)中間語言進(jìn)行符號(hào)執(zhí)行的符號(hào)執(zhí)行工具以及約束求解工具。
android應(yīng)用:android是一種基于linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,如智能手機(jī)和平板電腦。android應(yīng)用是指運(yùn)行于android操作系統(tǒng)的應(yīng)用程序,包括系統(tǒng)應(yīng)用和普通應(yīng)用。
圖1是本發(fā)明一個(gè)實(shí)施例的一種文件轉(zhuǎn)換方法的流程示意圖,參見圖1,本實(shí)施例的文件轉(zhuǎn)換方法,應(yīng)用于二進(jìn)制文件分析框架angr中,包括:
步驟s101,獲取待檢測的android應(yīng)用的dex文件;
dex是dalvikvmexecutes的簡稱,dex是android平臺(tái)上(dalvik虛擬機(jī))的可執(zhí)行文件,相當(dāng)于windows平臺(tái)中的exe文件,每個(gè)apk(androidpackage)安裝包中都有dex文件,里面包含了該應(yīng)用的所有源碼,通過反編譯工具可以獲取到相應(yīng)的java源碼。
步驟s102,將所述dex文件轉(zhuǎn)換為所述angr框架支持的二進(jìn)制格式的第一文件;
步驟s103,加載所述第一文件到所述angr框架中并對(duì)所述第一文件進(jìn)行符號(hào)執(zhí)行分析,根據(jù)所述符號(hào)執(zhí)行分析結(jié)果輔助判斷所述android應(yīng)用是否存在漏洞。
由圖1所示可知,本實(shí)施例的文件轉(zhuǎn)換方法,獲取android應(yīng)用的dex文件,將dex文件轉(zhuǎn)換為angr框架支持的二進(jìn)制格式的第一文件,并加載到angr框架中,對(duì)第一文件進(jìn)行符號(hào)執(zhí)行分析,根據(jù)符號(hào)執(zhí)行分析結(jié)果輔助判斷待檢測android應(yīng)用是否存在漏洞。解決了目前angr框架不能識(shí)別android應(yīng)用的可執(zhí)行文件,無法對(duì)android應(yīng)用進(jìn)行符號(hào)執(zhí)行分析的問題,為android應(yīng)用的漏洞檢測提供了新的解決方案,幫助提升android應(yīng)用的安全性,避免android移動(dòng)終端的用戶隱私數(shù)據(jù)被攻擊者竊取,改善android移動(dòng)終端的用戶體驗(yàn)。
下面結(jié)合圖2至圖4對(duì)本發(fā)明實(shí)施例的文件轉(zhuǎn)換方法進(jìn)行具體說明。
針對(duì)現(xiàn)有的angr框架無法加載android應(yīng)用的可執(zhí)行文件的不足,本實(shí)施例根據(jù)android代碼的特點(diǎn),提出一種針對(duì)android應(yīng)用的可執(zhí)行文件的轉(zhuǎn)換方法,即,對(duì)android應(yīng)用的可執(zhí)行文件進(jìn)行格式轉(zhuǎn)換。
具體的,參見圖2,首先,獲取一個(gè)待檢測的android應(yīng)用;
然后,對(duì)該android應(yīng)用進(jìn)行文件轉(zhuǎn)換生成exe可執(zhí)行文件。
由于exe可執(zhí)行文件是angr框架支持的二進(jìn)制文件格式,從而能夠?qū)ndroid應(yīng)用對(duì)應(yīng)的exe可執(zhí)行文件加載到angr框架中。
最后,基于angr框架對(duì)exe可執(zhí)行文件進(jìn)行符號(hào)執(zhí)行分析,進(jìn)而輔助判斷待檢測android應(yīng)用是否存在漏洞。
文件轉(zhuǎn)換是本實(shí)施例的重點(diǎn),接下來進(jìn)行具體說明。
參見圖3,首先,獲取android應(yīng)用的apk文件;android系統(tǒng)中apk文件是android安裝包。
其次,在得到apk文件之后,通過apk工具對(duì)其進(jìn)行解壓縮處理,得到一個(gè)完整的android項(xiàng)目。需要說明的是,本實(shí)施例中是以通過apk工具對(duì)apk文件進(jìn)行解壓縮處理為例進(jìn)行的示意性說明,但不限于此,實(shí)際應(yīng)用中可以使用任何能夠?qū)pk文件進(jìn)行解壓縮處理的工具。
參見圖3,解壓縮之后得到的android項(xiàng)目主要包括meta-inf文件、res文件、xml文件、dex文件以及arsc文件。
其中,meta-inf文件是apk簽名文件,用來保證apk包的完整性和系統(tǒng)的安全性。
res文件用來存放android項(xiàng)目的各種資源文件,并且不同的資源文件存放在不同的目錄中。res目錄下又有下一級(jí)目錄,例如,主要存放布局文件的layout目錄,主要存放菜單文件的menu目錄,主要存放應(yīng)用程序默認(rèn)的資源文件的values目錄。
xml文件主要是指androidmanifest.xml,androidmanifest.xml是android應(yīng)用的全局配置文件。
arsc文件用來存放編譯后的二進(jìn)制資源文件,并且記錄資源文件和資源id的映射關(guān)系。
dex文件是編譯生成的dalvik字節(jié)碼文件,它只能在dalvik虛擬機(jī)上運(yùn)行,并且dalvik虛擬機(jī)與java虛擬機(jī)并不兼容。
最后,從得到的android項(xiàng)目中提取出dex文件。
也就是說,本實(shí)施例中是從android項(xiàng)目中提取出可執(zhí)行文件dex文件以便后續(xù)進(jìn)行轉(zhuǎn)換處理。
在得到dex文件之后,參見圖4,圖4中示意了dex文件到windows系統(tǒng)的可執(zhí)行文件exe文件的轉(zhuǎn)換流程。即,通過將dex文件反編譯成java的jar文件之后,再將jar文件轉(zhuǎn)換為windows系統(tǒng)的可執(zhí)行文件exe文件。
圖4所示的文件轉(zhuǎn)換又可以細(xì)分反編譯和重新編譯兩部分。
反編譯是將android的可執(zhí)行文件dex文件反編譯為初始的java文件包,即,將classes.dex轉(zhuǎn)化成jar文件。
這一部分所使用的工具是dex2jar,dex2jar是一款針對(duì)android平臺(tái)dex文件的反編譯工具。經(jīng)過反編譯之后得到的jar文件雖然不是標(biāo)準(zhǔn)的java代碼文件,但是可以通過下一步的重新編譯將其編譯為exe文件。
重新編譯是將上一步所得到的jar文件編譯轉(zhuǎn)換為windows系統(tǒng)上的可執(zhí)行文件exe文件。
這一部分所使用的工具是jar2exe,jar2exe工具的工作原理是使用jni接口啟動(dòng)java虛擬機(jī),并在此基礎(chǔ)上提供其他高級(jí)功能,jar2exe可以生成控制臺(tái)程序、windows窗口程序以及windowsnt服務(wù)程序三種類型的可執(zhí)行文件。在重新編譯的過程中通過使用控制臺(tái)程序便可實(shí)現(xiàn)從jar文件到exe可執(zhí)行文件的轉(zhuǎn)化。
windows系統(tǒng)上的可執(zhí)行文件exe文件可以直接加載到angr框架,之后在angr框架上進(jìn)行后續(xù)的符號(hào)執(zhí)行分析。
接下來對(duì)angr框架上的符號(hào)執(zhí)行分析過程進(jìn)行簡要說明。
angr框架集成了一些現(xiàn)有的漏洞分析技術(shù),同時(shí)使用不同的模塊實(shí)現(xiàn)不同的功能,因此,可以很容易對(duì)已有的分析技術(shù)進(jìn)行比較,并且能利用不同分析技術(shù)的優(yōu)勢。
其簡要處理過程是:首先,將二進(jìn)制程序(例如,圖4所示的exe執(zhí)行文件)加載到angr框架中;再將二進(jìn)制文件的代碼轉(zhuǎn)換成中間語言(intermediaterepresentation,簡稱ir);接著進(jìn)一步分析程序,其中包括對(duì)程序的靜態(tài)分析或動(dòng)態(tài)符號(hào)執(zhí)行分析。
angr主要包括以下幾個(gè)模塊:
二進(jìn)制程序加載模塊(cle),其將一個(gè)二進(jìn)制程序加載到分析平臺(tái)中,其中包括exe可執(zhí)行文件;
中間表示模塊(ir),將二進(jìn)制代碼翻譯成中間語言,其中間語言vex使angr可以在不同架構(gòu)上分析二進(jìn)制程序;
程序狀態(tài)表示模塊(simuvex),表示程序的狀態(tài),并且simuvex中的simstate實(shí)現(xiàn)了一組狀態(tài)插件的集合,如寄存器、抽象內(nèi)存以及符號(hào)內(nèi)存等,這些插件的狀態(tài)可以由用戶指定;
數(shù)據(jù)模型模塊(claripy),其為存儲(chǔ)在simstate的寄存器或存儲(chǔ)器中的值提供抽象表示;
完整程序分析模塊,將所有的模塊組合起來使得angr可以進(jìn)行復(fù)雜且完整的程序分析。
其中,二進(jìn)制程序加載模塊(cle)是angr框架的入口,通過cle模塊,可以將本實(shí)施例的android應(yīng)用的字節(jié)碼文件dex文件轉(zhuǎn)換成的exe可執(zhí)行文件加載到angr框架進(jìn)行后續(xù)的符號(hào)執(zhí)行分析。
符號(hào)執(zhí)行能夠在復(fù)雜的數(shù)據(jù)依賴關(guān)系中發(fā)現(xiàn)變量之間本質(zhì)的約束關(guān)系,比污點(diǎn)傳播分析以及模糊測試等方法精度高,這種精確的變量代數(shù)關(guān)系能幫助理解程序的內(nèi)在邏輯;在模擬程序運(yùn)行的過程中,符號(hào)執(zhí)行還會(huì)精確記錄執(zhí)行路徑上所有的約束條件,可以提高控制流分析中路徑可達(dá)性問題判定的精確性。
需要說明的是,基于angr框架的符號(hào)執(zhí)行分析是現(xiàn)有技術(shù),因而在將由android應(yīng)用的字節(jié)碼文件dex文件轉(zhuǎn)換成的exe可執(zhí)行文件加載到angr框架后的符號(hào)執(zhí)行分析可以參見現(xiàn)有技術(shù),這里不再贅述。
圖5是本發(fā)明一個(gè)實(shí)施例的一種文件轉(zhuǎn)換裝置的結(jié)構(gòu)框圖,參見圖5,本實(shí)施例的文件轉(zhuǎn)換裝置500,應(yīng)用于二進(jìn)制文件分析框架angr中,包括:
文件獲取模塊501,用于獲取待檢測的android應(yīng)用的dex文件;
文件轉(zhuǎn)換模塊502,用于將所述dex文件轉(zhuǎn)換為所述angr框架支持的二進(jìn)制格式的第一文件;
檢測確定模塊503,用于加載所述第一文件到所述angr框架中并對(duì)所述第一文件進(jìn)行符號(hào)執(zhí)行分析,根據(jù)所述符號(hào)執(zhí)行分析結(jié)果輔助判斷所述android應(yīng)用是否存在漏洞。
一個(gè)實(shí)施例中,文件獲取模塊501,具體用于獲取待檢測的android應(yīng)用的安裝包apk文件,解壓所述apk文件并提取其中的dex文件。
一個(gè)實(shí)施例中,文件轉(zhuǎn)換模塊502,具體用于反編譯所述dex文件得到j(luò)ava歸檔文件jar文件;重新編譯所述jar文件得到二進(jìn)制格式的exe文件。
需要說明的是,本實(shí)施例的文件轉(zhuǎn)換裝置是和前述實(shí)施例中的文件轉(zhuǎn)換方法相對(duì)應(yīng)的,因此,本實(shí)施例中文件轉(zhuǎn)換裝置的工作過程可以參見前述方法實(shí)施例中的說明,在此不再贅述。
綜上所述,本發(fā)明實(shí)施例的文件轉(zhuǎn)換方法和裝置實(shí)現(xiàn)了針對(duì)android應(yīng)用進(jìn)行文件轉(zhuǎn)換,將android應(yīng)用的字節(jié)碼文件dex轉(zhuǎn)換成windows平臺(tái)下的可執(zhí)行文件exe,加載到angr框架中進(jìn)行后續(xù)的符號(hào)執(zhí)行分析的有益效果。解決了angr框架因無法對(duì)android系統(tǒng)的安裝包apk文件以及可執(zhí)行文件dex導(dǎo)入和讀取而無法對(duì)android系統(tǒng)的應(yīng)用程序進(jìn)行符號(hào)執(zhí)行分析,進(jìn)而輔助進(jìn)行漏洞檢測的問題,幫助提升了android系統(tǒng)的可靠性和安全性。
以上所述,僅為本發(fā)明的具體實(shí)施方式,在本發(fā)明的上述教導(dǎo)下,本領(lǐng)域技術(shù)人員可以在上述實(shí)施例的基礎(chǔ)上進(jìn)行其他的改進(jìn)或變形。本領(lǐng)域技術(shù)人員應(yīng)該明白,上述的具體描述只是更好的解釋本發(fā)明的目的,本發(fā)明的保護(hù)范圍以權(quán)利要求的保護(hù)范圍為準(zhǔn)。