井 靖 蔣烈輝, 劉鐵銘 司彬彬 曾 韻 朱曉清
軟件逆向分析過(guò)程中的多維圖譜抽取方法
井 靖1蔣烈輝1,2劉鐵銘2司彬彬1曾 韻1朱曉清2
1(信息工程大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 河南 鄭州 450000)
2(數(shù)學(xué)工程與先進(jìn)計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室 河南 鄭州 450000)
由于軟件逆向分析過(guò)程中產(chǎn)生的結(jié)果通常是形式化的符號(hào),且復(fù)雜難懂,因此基于軟件逆向分析進(jìn)行代碼閱讀或漏洞挖掘等工作的效率非常低下。針對(duì)這種情況,首先設(shè)計(jì)多維圖譜抽取框架,基于該框架定義多維圖譜描述約束(schema),使多維圖譜抽取與具體的逆向分析過(guò)程之間相互獨(dú)立;給出逆向分析算法庫(kù)的構(gòu)造方式及算法庫(kù)調(diào)用接口,實(shí)現(xiàn)基于多維圖譜描述的抽象圖譜生成;設(shè)計(jì)基于圖形描述語(yǔ)言DOT的抽象圖譜轉(zhuǎn)換接口,實(shí)現(xiàn)抽象圖譜的快速可視化;最后給出多維圖譜抽取算法。實(shí)驗(yàn)結(jié)果表明,采用該方法能有效提高逆向分析過(guò)程中生成結(jié)果的可讀性,大幅提升分析人員代碼閱讀及漏洞挖掘的工作效率。
多維圖譜 抽取 抽象圖 DOT接口 可視化
目前比較流行的軟件逆向分析算法通常采用基于抽象解釋理論的近似逼近技術(shù)[1,2]。即依據(jù)分析或驗(yàn)證的實(shí)際語(yǔ)義,定義具有完備格屬性的抽象域,基于抽象解釋框架,將被分析的反匯編代碼或中間代碼上的數(shù)據(jù)流分析轉(zhuǎn)換為抽象域上的數(shù)學(xué)運(yùn)算,并利用抽象域的數(shù)學(xué)特性迭代求解,最終到達(dá)語(yǔ)義不動(dòng)點(diǎn)從而得到較精確的分析結(jié)果。然而這些算法的結(jié)果通常是以純數(shù)據(jù)或者抽象符號(hào)的形式給出,往往晦澀難懂,即便是專業(yè)的逆向分析人員,要想從分析結(jié)果中發(fā)現(xiàn)可執(zhí)行代碼的框架、意圖以及漏洞,要花很長(zhǎng)的時(shí)間,效率非常低下。如果能對(duì)各種逆向分析算法進(jìn)行分類,并按照不同的分析粒度以圖譜的形式顯示出來(lái),將會(huì)大大提高逆向分析人員的工作效率。
比較流行的軟件逆向分析工具中(比如IDA、Ollydb、TEMU、Pin等)都或多或少地提供了圖表視圖的功能,為用戶分析代碼結(jié)構(gòu)、挖掘漏洞等提供了重要幫助[3-5]。但這些工具通常提供圖的維數(shù)太少,適用性差,無(wú)法為用戶自定義的分析算法生成相應(yīng)的圖。因此,如何將軟件逆向分析算法進(jìn)行分類,并將圖的生成從具體的逆向分析中獨(dú)立出來(lái),使其能夠靈活地為各種分析結(jié)果生成相應(yīng)的圖譜并按照用戶的需求打印出來(lái)是本文主要研究的內(nèi)容。
本文首先提出多維圖譜抽取框架,給出基于XML[6]的多維圖譜描述約束,并在此基礎(chǔ)上給出抽象圖譜抽取方法。然后設(shè)計(jì)基于DOT[7]的抽象圖轉(zhuǎn)換接口。最后給出圖譜抽取示例及相關(guān)工作比較。
從狹義上講,多維是指由時(shí)間軸和空間坐標(biāo)軸構(gòu)成的多個(gè)獨(dú)立的時(shí)空坐標(biāo);從廣義上講,多維是指按照一定的分類規(guī)則所劃分的不同類別或者不同視角。在本文多維則是指由靜態(tài)和動(dòng)態(tài)兩種分析模式以及不同代碼分析粒度構(gòu)成的多種逆向分析方法(多種逆向分析維度)。而圖譜抽取則是指從多維度的逆向分析中提取分析結(jié)果,并按照分析人員的需求以自定義圖的形式表示出來(lái)。
多維圖譜抽取在軟件逆向分析過(guò)程中所處的位置如圖1所示。被分析的代碼首先經(jīng)過(guò)多源靜態(tài)反匯編(將基于不同CPU的可執(zhí)行代碼翻譯為對(duì)應(yīng)指令集下的匯編代碼)或者多架構(gòu)動(dòng)態(tài)執(zhí)行引擎(支持不同硬件平臺(tái)下可執(zhí)行代碼運(yùn)行的虛擬機(jī))被翻譯成匯編代碼;然后經(jīng)過(guò)代碼語(yǔ)義提升(中間代碼生成)將匯編代碼轉(zhuǎn)換為統(tǒng)一的中間語(yǔ)言代碼;接著基于統(tǒng)一的中間語(yǔ)言代碼;進(jìn)行多維圖譜抽??;最后基于多維圖譜進(jìn)行控制結(jié)構(gòu)恢復(fù)、數(shù)據(jù)結(jié)構(gòu)恢復(fù)、代碼架構(gòu)恢復(fù)、惡意行為分析和漏洞挖掘等高級(jí)語(yǔ)義分析。
圖1 軟件逆向分析過(guò)程
其中多源靜態(tài)反匯編已經(jīng)有很多成熟的工具:比如采用線性掃描算法的BAP[8]、采用遞歸掃描算法的IDA[9]、采用啟發(fā)式掃描算法的各種反匯編工具[10]等;基于QEMU虛擬機(jī)[11]的多架構(gòu)動(dòng)態(tài)執(zhí)行引擎已經(jīng)被成功用于動(dòng)態(tài)軟件逆向分析工作中;代碼語(yǔ)義提升也有很多實(shí)現(xiàn)方法:比如BAP和BitBlaze[12]的中間代碼生成方法、基于語(yǔ)義字典的BRIL中間代碼生成[13]等;多維圖譜抽取是基于中間代碼的分析及結(jié)果提取過(guò)程,是實(shí)現(xiàn)高級(jí)語(yǔ)義快速分析的基礎(chǔ),也是本文的主要研究?jī)?nèi)容。
多維圖譜抽取的框架結(jié)構(gòu)如圖2虛線框部分所示。主要由多維圖譜描述文件、抽象圖譜抽取以及抽象圖轉(zhuǎn)換接口三個(gè)模塊組成。多維圖譜描述文件采用基于XML的描述方法,用戶可根據(jù)具體分析要求,自定義抽取圖譜的個(gè)數(shù)、樣式以及采用分析算法的名稱等;抽象圖譜抽取按照分析代碼的粒度分別劃分為:語(yǔ)句級(jí)、基本塊級(jí)、結(jié)構(gòu)級(jí)以及過(guò)程級(jí)等(這里的過(guò)程級(jí)也可以叫做函數(shù)級(jí),過(guò)程指procedure),負(fù)責(zé)調(diào)用具體逆向分析算法、提取抽象結(jié)果以及生成抽象圖譜;抽象圖譜轉(zhuǎn)換接口負(fù)責(zé)將生成的抽象圖轉(zhuǎn)換為圖形描述語(yǔ)言DOT的描述形式,并傳遞給下層的DOT解析器,最終由DOT解析器將其轉(zhuǎn)換為實(shí)際的圖形打印在屏幕上。
圖2 多維圖譜抽取框架
3.1 基于XML的多維圖譜描述
XML是一種可擴(kuò)展的元標(biāo)記語(yǔ)言,被廣泛應(yīng)用于數(shù)據(jù)交換、異構(gòu)系統(tǒng)的整合及系統(tǒng)配置等領(lǐng)域中,獨(dú)立于任何軟硬件平臺(tái)。為了實(shí)現(xiàn)圖譜顯示與分析算法之間的相互獨(dú)立性,我們利用基于XML的描述文件對(duì)要生成圖譜的維數(shù)、樣式、采用的算法等屬性進(jìn)行描述,并設(shè)計(jì)了多維圖譜描述文件的schema,利用XMLSpy 2011生成的多維圖譜描述文件的schema概要圖如圖3所示。
圖3 多維圖譜描述約束概要圖(schema)
其中g(shù)raph為描述文件的根元素;static和dynamic為graph的子元素,分別用來(lái)描述靜態(tài)圖譜和動(dòng)態(tài)圖譜的屬性;instruction、baseblock、structure和procedure子元素分別用來(lái)描述指令級(jí)、基本塊級(jí)、結(jié)構(gòu)級(jí)以及過(guò)程級(jí)圖譜的相關(guān)屬性;algoname、algoaddr、style子元素則用來(lái)描述圖譜所選用的算法名稱、算法地址、顯示圖譜的樣式等;node和edge是style的子元素,color和shape分別用來(lái)描述結(jié)點(diǎn)和邊的顏色以及形狀屬性。
說(shuō)明1:圖中dynamic元素的結(jié)構(gòu)與static元素的類似,但是比static元素多了一個(gè)trace屬性,用于指定動(dòng)態(tài)執(zhí)行的指令序列;
說(shuō)明2:baseblock、structure和procedure元素的結(jié)構(gòu)與instruction元素的類似,元素右側(cè)的加號(hào)表示未展開;
說(shuō)明3:虛線框的元素或?qū)傩员硎臼强蛇x的,在描述文件中不是必須被定義的。
3.2 基于圖譜描述的抽象圖譜抽取
按照被分析對(duì)象的來(lái)源,抽象圖譜抽取可劃分為靜態(tài)和動(dòng)態(tài)兩大類。靜態(tài)抽象圖譜抽取基于靜態(tài)反匯編或代碼語(yǔ)義提升得到的中間代碼,利用傳統(tǒng)的前向、后向數(shù)據(jù)流分析,或者面向某個(gè)抽象域的抽象解釋框架,對(duì)被分析代碼進(jìn)行不同粒度的迭代求解[14,15]。動(dòng)態(tài)抽象圖譜抽取基于動(dòng)態(tài)執(zhí)行引擎(比如pin for x86、Qemu、TEMU for x86、DroidScope for arm[16]等)記錄的虛擬執(zhí)行序列,即指令流或經(jīng)過(guò)代碼語(yǔ)義提升的中間代碼序列,采用不同粒度的逆向分析算法進(jìn)行數(shù)據(jù)流分析。
抽象圖譜抽取模塊主要由算法庫(kù)和算法庫(kù)調(diào)用接口兩部分構(gòu)成。算法庫(kù)由目前已經(jīng)比較成熟的逆向分析算法構(gòu)成,按照分析的粒度進(jìn)行劃分,主要包括語(yǔ)句級(jí)算法庫(kù)、基本塊算法庫(kù)、結(jié)構(gòu)級(jí)算法庫(kù)和過(guò)程級(jí)算法庫(kù)。算法庫(kù)調(diào)用接口根據(jù)圖譜描述文件中static元素以及dynamic元素所描述的屬性,比如子元素的個(gè)數(shù)以及每個(gè)子元素下algoname以及algoaddr元素描述的算法名稱和算法地址等,依次調(diào)用對(duì)應(yīng)的算法進(jìn)行靜態(tài)分析,完成抽象圖譜的抽??;并將各自style元素定義的屬性傳遞給下層的DOT轉(zhuǎn)換接口。常用的調(diào)用接口定義如表1所示,表1中的接口參數(shù)algoname和algoname_list均由圖譜描述文件中定義過(guò)的algoname屬性值來(lái)確定。
表1 常用算法庫(kù)調(diào)用接口
由于算法庫(kù)中包括的算法多樣,分析的粒度越小,圖的復(fù)雜程度通常越高。此外動(dòng)態(tài)抽象圖譜只針對(duì)代碼的一條執(zhí)行路徑,對(duì)于不同執(zhí)行路徑生成的動(dòng)態(tài)抽象圖譜反映了不同路徑下的分析結(jié)果。所以為了方便分析人員的觀察和閱讀,描述文件中的mix屬性和layer屬性分別對(duì)生成圖的模式進(jìn)行了限定,并根據(jù)這些屬性調(diào)用不同的接口函數(shù)。當(dāng)mix=1時(shí),表示可以混合顯示,即將不同維度(粒度)的圖合并為一幅大圖,調(diào)用mix_*_abs_graph()函數(shù);mix=0表示不同維度的圖將分別獨(dú)立顯示,調(diào)用single_*_abs_graph()函數(shù)。此外,當(dāng)layer=-1時(shí),hight=-1,表示顯示完整的圖;layer=n(n∈N)時(shí),hight=N,表示顯示到圖的高度最多至第n層。
3.3 基于DOT 的抽象圖譜轉(zhuǎn)換接口
DOT是一種圖形描述語(yǔ)言,它提供了一種簡(jiǎn)單的圖形描述方法,很容易被人和計(jì)算機(jī)程序理解,具體的語(yǔ)法規(guī)范可以參考文獻(xiàn)[7]。DOT語(yǔ)言也可以看做是一種腳本語(yǔ)言,由專門的DOT解釋程序來(lái)解釋執(zhí)行,比如GraphViz就是一組用于處理dot文件的開源工具包[7]。它既可以作為獨(dú)立的軟件來(lái)使用,也可以作為庫(kù)被其他應(yīng)用程序調(diào)用。下面是一個(gè)簡(jiǎn)單的dot描述示例:
digraph sample{
A [shape=box];
A->B->D;
A->C->F;
B->E [style=dotted];
D->A [style=dotted];
}
圖4是針對(duì)上述dot描述文件使用GraphViz工具解釋執(zhí)行后顯示的圖形。
圖4 GraphViz解釋后生成的圖
經(jīng)過(guò)靜態(tài)、動(dòng)態(tài)圖譜抽取模塊得到的抽象圖通常只含有節(jié)點(diǎn)以及邊的關(guān)系,即結(jié)點(diǎn)集合N和邊結(jié)合E,不利于用戶的查看和分析。設(shè)計(jì)DOT接口可以將這些抽象圖(結(jié)點(diǎn)集合、邊集合)自動(dòng)轉(zhuǎn)化為DOT描述文件,從而調(diào)用DOT解釋器實(shí)現(xiàn)多維圖譜的可視化。DOT接口API定義如表2所示。
表2 DOT轉(zhuǎn)換接口列表
基于多維圖譜抽取框架以及各個(gè)模塊定義的接口函數(shù),設(shè)計(jì)多維圖譜抽取算法。該算法以多維圖譜描述文件Spec_Xml以及被分析代碼來(lái)源Code_Source為輸入?yún)?shù),以多維圖譜GRAPHS為輸出結(jié)果,具體的算法偽代碼如下所示:
算法1 多維圖譜抽取算法
輸入 Spec_Xml,Code_Source
輸出 Graphs
Proc Di_Graphs_Extract (Spec_Xml, Code_Source)
If (Code_Source is static)
mixed=Get_ Attribut _Value(static, mix);
If (Spec_Xml->static->instruction is not null)
Graph[0]=instruction;
End If
If (Spec_Xml->static->baseblock is not null)
Graph[1]= baseblock;
End If
If (Spec_Xml->static->structure is not null)
Graph[2]= structure;
End If
If (Spec_Xml->static->procedure is not null)
Graph[3]= procedure;
End If
For (i=0; i<4; i++) do
layer= Get_Attribut_Value(Graph[i], layer);
algoname=Get_Child_Value(Graph[i], algoname);
algoaddr= Get_Child_Value(Graph[i], algoaddr);
style->node.color=
Get_ Attribut _Value(Graph[i]->style->node, color);
style->node.shape=
Get_ Attribut _Value(Graph[i]->style->node, shape);
Style->edge.color=
Get_ Attribut _Value(Graph[i]->style->edge, color);
Style->edge.shape=
Get_ Attribut _Value(Graph[i]->style->edge, shape);
(N, E)= Static_Abs_Graph (algoname, algoaddr);
dot_node_attr=node_attr(style.node);
dot_edge_attr=edge_attr(style.edge);
dot_edges=edge_to_edge( E );
dot_file=create_cot_file(dot_node_attr, dot_edge_attr, dot_edges, mixed);
GraphViz(dot_file);
//調(diào)用dot文檔解析器
End For
End If
If (Code_Source is dynamic trace)
Similar to static;
//與靜態(tài)代碼的處理方法類似
End If
End Proc
設(shè)被分析代碼是靜態(tài)的中間語(yǔ)句,且語(yǔ)句級(jí)、基本塊級(jí)、結(jié)構(gòu)級(jí)以及過(guò)程級(jí)抽象圖生成算法的最大復(fù)雜度為K,抽象圖的邊的最大數(shù)目為e,轉(zhuǎn)換為dot文檔后的語(yǔ)句最大條數(shù)為d,則通過(guò)分析算法可以得靜態(tài)多維圖譜抽取算法的最大復(fù)雜度為C≈O(K+e+d)。
證明:
靜態(tài)語(yǔ)句級(jí)Get_Abs_Graph()的復(fù)雜度c11與algoname算法的復(fù)雜度相關(guān);edge_to_edge()的復(fù)雜度c12與抽象圖邊的條數(shù)相關(guān);Create_Dot_Document()的復(fù)雜度c13也與抽象圖邊的條數(shù)相關(guān);GraphViz()的復(fù)雜度c14與dot文件中的語(yǔ)句條數(shù)相關(guān)。
設(shè)語(yǔ)句級(jí)抽象算法復(fù)雜度為k1,抽象圖(N, E)邊的條數(shù)為e1,dot文件中的語(yǔ)句條數(shù)為d1,則語(yǔ)句級(jí)靜態(tài)圖譜抽取的復(fù)雜度為:
C1=c11+c12+c13+c14=k1+e1+e1+d1=k1+2e1+d1
同理,基本塊級(jí)、結(jié)構(gòu)級(jí)和過(guò)程級(jí)的靜態(tài)圖譜抽取復(fù)雜度分別為:
C2= c21+c22+c23+c24=k2+e2+e2+d2=k2+2e2+d2
C3= c31+c32+c33+c34=k3+e3+e3+d3=k3+2e3+d3
C4= c41+c42+c43+c44=k4+e4+e4+d4=k4+2e4+d4
因?yàn)镵=max(k1, k2, k3, k4),e=max(e1, e2, e3, e4),d=max(d1, d2, d3, d4)。
則靜態(tài)圖譜抽取的最大復(fù)雜度為:
C=C1+C2+C3+C4≈4K+8e+4d≈O(K+e+d)
說(shuō)明:上述結(jié)論是以靜態(tài)圖譜抽取部分的復(fù)雜度為例,動(dòng)態(tài)圖譜抽取的算法與靜態(tài)類似。只是抽象圖生成算法的復(fù)雜度以及抽象圖邊的條數(shù),dot文檔的語(yǔ)句條數(shù)與靜態(tài)圖譜的不同,可以得到相類似的結(jié)論。
為了驗(yàn)證多維圖譜抽取算法的有效性,和時(shí)間復(fù)雜度,課題組搭建嵌入式二進(jìn)制分析平臺(tái)EBAP[15]作為多維靜態(tài)圖譜抽取的前端?;赒EMU搭建動(dòng)態(tài)信息提取系統(tǒng)作為動(dòng)態(tài)圖譜提取的前端,以基于BRIL[13]中間語(yǔ)言的中間代碼和中間代碼序列作為靜態(tài)圖譜抽取和動(dòng)態(tài)圖譜抽取的對(duì)象。
實(shí)驗(yàn)機(jī)型為聯(lián)想ThinkCentre M8400s,處理器為Intel酷睿i5 2400,8 GB內(nèi)存,主機(jī)操作系統(tǒng)為Windows 7,將源程序test1.cpp~test5.cpp經(jīng)過(guò)gcc4.4.3編譯得到測(cè)試程序test for x86系列test1.exe~test5.exe,將源程序test1.cpp/test2.cpp/test3.cpp經(jīng)過(guò)arm-linux-gcc-4.4.3交叉編譯得到test for arm系列test1/test2/test5。選用基于抽象解釋的數(shù)據(jù)依賴分析算法(語(yǔ)句級(jí))、精度可調(diào)的控制流圖恢復(fù)算法(基本塊級(jí))[15]、基于結(jié)構(gòu)語(yǔ)義樹的高級(jí)控制結(jié)構(gòu)恢復(fù)算法(結(jié)構(gòu)級(jí))[13]等各粒度的算法構(gòu)建算法庫(kù),編寫圖譜描述文件,并調(diào)用算法1進(jìn)行測(cè)試。
測(cè)試的部分結(jié)果如圖5-圖7所示。其中test1.exe語(yǔ)句級(jí)靜態(tài)圖譜抽取結(jié)果如圖5所示,test2.exe基本塊級(jí)與結(jié)構(gòu)級(jí)以普通混合模式顯示的靜態(tài)圖譜結(jié)果如圖6所示,test3.exe過(guò)程級(jí)最大高度hight=6的靜態(tài)圖譜結(jié)果如圖7所示。
圖5 語(yǔ)句級(jí)靜態(tài)分析圖
圖6 基本塊和結(jié)構(gòu)級(jí)靜態(tài)分析圖
圖7 過(guò)程級(jí)靜態(tài)分析圖
由圖可以看到,經(jīng)過(guò)多維圖譜抽取算法得到的結(jié)果使語(yǔ)句級(jí)的依賴關(guān)系、基本塊間的控制流轉(zhuǎn)關(guān)系、高級(jí)控制結(jié)構(gòu)的構(gòu)成方式以及函數(shù)間的調(diào)用關(guān)系一目了然。大大提高了分析人員閱讀代碼的工作效率,為下一步進(jìn)行關(guān)鍵區(qū)域的漏洞挖掘等安全性分析工作提供了方向性的指導(dǎo)。
多維圖譜抽取的時(shí)間性能測(cè)試如表3和表4所示。
表3 靜態(tài)圖譜抽取時(shí)間性能測(cè)試結(jié)果
表4 動(dòng)態(tài)圖譜抽取時(shí)間性能測(cè)試結(jié)果
由測(cè)試結(jié)果可以發(fā)現(xiàn),動(dòng)態(tài)抽取的中間代碼語(yǔ)句條數(shù)比靜態(tài)分析下得到的要多,而靜態(tài)圖譜抽取的時(shí)間卻比動(dòng)態(tài)圖譜提取的時(shí)間要長(zhǎng),原因如下:
1) 動(dòng)態(tài)圖譜提取測(cè)試針對(duì)中間代碼序列的一次運(yùn)行過(guò)程,在運(yùn)行時(shí)會(huì)將循環(huán)結(jié)構(gòu)的代碼按照實(shí)際的循環(huán)次數(shù)進(jìn)行展開,故其語(yǔ)句條數(shù)通常會(huì)比靜態(tài)分析得到的要多;
2) 動(dòng)態(tài)圖譜因?yàn)槠湔Z(yǔ)句級(jí)依賴關(guān)系、基本塊之間的控制關(guān)系、結(jié)構(gòu)關(guān)系以及函數(shù)間的調(diào)用關(guān)系是確定的,比較簡(jiǎn)單,這使得抽象圖譜生成算法可以迅速到達(dá)不動(dòng)點(diǎn),因此整個(gè)圖譜的抽取也就會(huì)比靜態(tài)圖譜抽取的速度要快。
另外測(cè)試結(jié)果中的時(shí)間性能還與采用的算法庫(kù)中的抽象圖譜生成算法的復(fù)雜度密切相關(guān),選用的算法復(fù)雜度越高,圖譜抽取所需的時(shí)間就越長(zhǎng)。
目前常用的其他逆向分析工具,比如IDA、Ollydb等,都僅提供基于某種特定靜態(tài)匯編代碼的語(yǔ)句級(jí)、基本塊級(jí)、過(guò)程級(jí)的結(jié)構(gòu)圖。當(dāng)用戶基于匯編代碼采用其他逆向分析算法進(jìn)行分析的時(shí)候,無(wú)法幫用戶更新這些結(jié)構(gòu)圖,不方便分析人員的分析和比較。多維圖譜抽取技術(shù)實(shí)現(xiàn)了圖譜生成與逆向分析算法的獨(dú)立,即當(dāng)采用的逆向分析算法發(fā)生變化的時(shí)候,只需要修改圖譜描述文件中對(duì)應(yīng)維度下算法元素的名稱和地址屬性,就可以自動(dòng)生成對(duì)應(yīng)算法的實(shí)際圖形。分析人員不需要關(guān)心具體圖形是如何顯示的。
下一步需要完成的工作主要有:完成圖譜復(fù)雜混合模式的顯示功能,增強(qiáng)不同粒度之間圖譜的對(duì)比性和關(guān)聯(lián)性,尤其是基本塊級(jí)、結(jié)構(gòu)級(jí)與過(guò)程級(jí)之間的關(guān)聯(lián)性;實(shí)現(xiàn)復(fù)雜圖譜的部分以及連續(xù)顯示,更加方便用戶的閱讀和分析;完成基于不同抽象圖譜提取算法的時(shí)間性能測(cè)試及比較,為用戶算法選擇提供參考;另外基于多維圖譜的惡意行為檢測(cè)技術(shù)和漏洞挖掘技術(shù)等也是我們進(jìn)一步重點(diǎn)研究的內(nèi)容。
[1] JeanLouis Boulanger.Static analysis of software:The abstract interpretation[M].Hoboken:Wiley Press,2013.
[2] Patrick Cousot,Radhia Cousot.Abstract interpretation:a unified lattice model for static analysis of programs by construction or approximation of fixpoints[C]//Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on principles of programming languages,Los Angeles,California,1977:238-252.
[3] 李永偉.基于Hex-Rays的緩沖區(qū)溢出漏洞挖掘技術(shù)研究[D].鄭州:解放軍信息工程大學(xué),2013.
[4] 焦永生,舒輝.基于TEMU的進(jìn)程間通信過(guò)程逆向[J].計(jì)算機(jī)應(yīng)用研究,2013,30(7):2091-2095.
[5] Heng Yin,Dawn Song.TEMU:Binary Code Analysis via Whole-System Layered Annotative Execution[EB/OL].(2012-10-11).[2014-09-11].http://www.eecs.berkeley.edu/Pubs/TechRpts/2010/EECS-2010-3.html.
[6] XML可擴(kuò)展標(biāo)記語(yǔ)言[EB/OL].(2014-08-20).[2014-09-11].http://zh.wikipedia.org/zh-cn/XML.
[7] Dot language[EB/OL].(2014-09-11).[2014-09-11].http://www.graphviz.org/content/dot-language.
[8] David Brumley,Ivan Jager,Thanassis Avgerinos,et al.BAP:A Binary Analysis Platform[C]//Proceedings of the conference on computer aided verification,2011:1-7.
[9] IDA:About[EB/OL].(2014-01-25).[2014-09-11].https://www.hex-rays.com/products/ida/index.shtml.
[10] 吳偉民,司斯,阮奕邦,等.基于函數(shù)劃分塊及置信度的反匯編優(yōu)化研究[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(1):85-88,164.
[11] QEMU Internals[EB/OL].(2014-08-01).[2014-09-11].http://qemu.weilnetz.de/qemu-tech.html.
[12] Dawn Song,David Brumley,Heng Yin,et al.BitBlaze:A New Approach to Computer Security via Binary Analysis[C]//Proceedings of the 4th international conference on information systems security,Hyderabad,India,2008:1-25.
[13] 劉絮穎.反編譯中控制流重構(gòu)與控制結(jié)構(gòu)恢復(fù)技術(shù)研究[D].鄭州:信息工程大學(xué),2010.
[14] 邢雨辰.用于程序驗(yàn)證的數(shù)據(jù)流分析技術(shù)的整合[D].南京:南京大學(xué),2013.
[15] Jing Jing,Jiang Liehui,Liu Tieming,et al.A Precision tunable CFG Reconstruction Algorithm[C]//Proceedings of international conference on Mechatronic sciences,Electric engineering and Computer,Shenyang,China 2013:2095-2099.
[16] Lok Kwang Yan,Heng Yin.DroidScope:Seamlessly Reconstructing the OS and Dalvik Semantic Views for Dynamic Android Malware Analysis[C]//Proceedings of the 21st USENIX Security Symposium,2012:1-16.
MULTIDIMENSIONAL GRAPHS EXTRACTION METHOD IN SOFTWARE REVERSE ANALYSIS PROCESS
Jing Jing1Jiang Liehui1,2Liu Tieming2Si Binbin1Zeng Yun1Zhu Xiaoqing2
1(SchoolofComputerScienceandTechnology,InformationandEngineeringUniversity,Zhengzhou450000,Henan,China)2(TheStateKeyLaboratoryofMathematicalEngineeringandAdvancedComputing,Zhengzhou450000,Henan,China)
The results of software reverse analysis process are usually the formal symbols, which are complicated and unintelligibility, therefore the efficiency of the works of code behaviour understanding or code vulnerabilities mining based on software reverse analysis is very slow. In view of this, we design the multidimensional graphs extraction framework firstly, and based on this framework we define the multidimensional graphs description constraints (schema), which makes the multidimensional graphs extraction and specific reverse analysis process be independent from each other. And we present the construction approach of reverse analysis algorithm library and design the call interfaces of the algorithm library, realise the multidimensional graphs description-based abstract graphs generation. What’s more, we design the abstract graphs convert interface which is based on DOT (a graph description language), and achieves the fast visualisation of abstract graphs. At last we present an algorithm of multidimensional graphs extraction. Experimental results show that to use this algorithm can effectively improve the readability of the generated results in reverse analysis process, and greatly increase the work efficiency of analysers in code behaviour understanding and code vulnerabilities mining.
Multidimensional graphs Extract
2014-09-12。國(guó)家自然科學(xué)基金項(xiàng)目(61272489)。井靖,講師,主研領(lǐng)域:軟件逆向分析。蔣烈輝,教授。劉鐵銘,講師。司彬彬,講師。曾韻,講師。朱曉清,講師。
TP311
A
10.3969/j.issn.1000-386x.2016.04.001
graph DOT interface Visualisation