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

基于動(dòng)態(tài)分析的底層虛擬機(jī)混淆器反混淆方法

2022-12-31 00:00:00寇宇王其軍
計(jì)算機(jī)應(yīng)用研究 2022年11期

摘 要:底層虛擬機(jī)混淆器(OLLVM)是一個(gè)著名的代碼混淆工具,除了用于保護(hù)商業(yè)軟件的安全外,也被惡意代碼的開(kāi)發(fā)者所利用,以此增加分析難度。為便于安全研究人員對(duì)ARM惡意程序進(jìn)行分析,提出并實(shí)現(xiàn)了基于動(dòng)態(tài)分析的OLLVM自動(dòng)化反混淆方法。對(duì)于虛假控制流,根據(jù)不透明謂詞的內(nèi)存特征監(jiān)控內(nèi)存讀寫(xiě)并利用動(dòng)態(tài)污點(diǎn)分析技術(shù)識(shí)別虛假控制流來(lái)完成反混淆;對(duì)于控制流平坦化,通過(guò)動(dòng)態(tài)運(yùn)行程序并記錄基本塊的執(zhí)行順序來(lái)完成反混淆;同時(shí)利用多執(zhí)行路徑構(gòu)造來(lái)提高代碼覆蓋率,最后通過(guò)指令修復(fù)還原基本塊之間的關(guān)系。實(shí)驗(yàn)結(jié)果表明,該方法可準(zhǔn)確消除可執(zhí)行程序中因混淆產(chǎn)生的條件分支,且反混淆后得到的程序其運(yùn)行結(jié)果與未混淆的程序保持一致,能有效完成對(duì)ARM混淆程序的反混淆工作。

關(guān)鍵詞:反混淆;動(dòng)態(tài)分析;指令修復(fù);底層虛擬機(jī)混淆器

中圖分類號(hào):TP393 文獻(xiàn)標(biāo)志碼:A

文章編號(hào):1001-3695(2022)11-043-3465-05

doi:10.19734/j.issn.1001-3695.2022.04.0157

Deobfuscation method of obfuscator low level virtual machine based on dynamic analysis

Kou Yua,Wang Qijunb

(a.School of Computer Science,b.School of Petroleum Engineering,Southwest Petroleum University,Chengdu 610500,China)

Abstract:The obfuscator low level virtual machine(OLLVM) is a well-known code obfuscation tool,which is not only used to protect the security of commercial software,but also used by malicious code developers to increase the difficulty of analysis.In order to facilitate the analysis of ARM malware by security researchers,this paper proposed and implemented an OLLVM automatic deobfuscation method based on dynamic analysis.For bogus control flow,this method monitored memory read and write based on the memory characteristics of opaque predicates and used dynamic taint analysis technology to identify it to complete deobfuscation.For control flow flattening,the method completed deobfuscation by dynamically running the program and recor-ding the execution order of basic blocks.At the same time,it used multiple execution paths exploration to improve code cove-rage,and finally restored the relationship between basic blocks through instruction repair.The experimental results show that the method can accurately eliminate the conditional branches caused by obfuscation in executable programs,and the running results of the deobfuscated programs are consistent with the unobfuscated programs.It verifies that the method can effectively complete the deobfuscation of ARM obfuscated programs.

Key words:deobfuscation;dynamic analysis;instruction repair;OLLVM

作者簡(jiǎn)介:寇宇(1998-),男,四川邛崍人,碩士研究生,主要研究方向?yàn)槎M(jìn)制安全;王其軍(1982-),男(通信作者),四川簡(jiǎn)陽(yáng)人,高級(jí)實(shí)驗(yàn)師,碩導(dǎo),主要研究方向?yàn)樽詣?dòng)控制及儀器儀表(xyz317@163.com).

當(dāng)今眾多網(wǎng)絡(luò)安全問(wèn)題中,惡意代碼所造成的安全危害愈加嚴(yán)重。為了逃避安全工具的檢測(cè)以及阻止安全研究人員的分析,惡意代碼的開(kāi)發(fā)者常常使用代碼混淆技術(shù)進(jìn)行保護(hù)。底層虛擬機(jī)混淆器(obfuscator low level virtual machine,OLLVM)[1及一些基于OLLVM實(shí)現(xiàn)的變種混淆工具如Armariris[2廣泛應(yīng)用于軟件安全領(lǐng)域,除了被用于保護(hù)商業(yè)軟件的權(quán)益外,也被惡意代碼的開(kāi)發(fā)者所利用。例如towelroot(CVE-2014-3153)[3使用了OLLVM進(jìn)行混淆,這使得安全研究人員需要更多精力來(lái)深入了解代碼的技術(shù)細(xì)節(jié)。

目前針對(duì)OLLVM的反混淆研究主要利用符號(hào)執(zhí)行技術(shù)完成,其中Francis[4提出了面向x86二進(jìn)制程序的反混淆方法,該方法基于Miasm框架[5實(shí)現(xiàn),反混淆的結(jié)果為中間表示(intermediate representation,IR)[6,7的控制流圖。肖順陶等人8基于Angr框架[9實(shí)現(xiàn)了一個(gè)面向x86二進(jìn)制程序的反混淆框架,反混淆的結(jié)果為去混淆后的程序,但是該框架僅實(shí)現(xiàn)了針對(duì)控制流平坦化的反混淆。

本文在現(xiàn)有研究的基礎(chǔ)上,提出了一種基于動(dòng)態(tài)分析的自動(dòng)化反混淆方法,用于去除ARM架構(gòu)下經(jīng)OLLVM混淆后的可執(zhí)行與可鏈接格式(executable and linkable format,ELF)程序的混淆,反混淆的結(jié)果為一個(gè)去混淆后的ELF可執(zhí)行程序,有利于安全研究人員對(duì)惡意程序進(jìn)行逆向分析以及通過(guò)反編譯恢復(fù)出程序的原始代碼。

1 背景知識(shí)

1.1 不透明謂詞

不透明謂詞[10,11是一個(gè)表達(dá)式,它的值在程序運(yùn)行時(shí)是確定的,但靜態(tài)分析器很難推斷出這個(gè)值。通常,編譯器在編譯時(shí)會(huì)自動(dòng)優(yōu)化代碼,將死代碼移除,而由于不透明謂詞的值難以被推斷,從而使得不透明謂詞相關(guān)的代碼塊不會(huì)被移除。所以,混淆工具通常在原始代碼塊中加入不透明謂詞來(lái)插入死代碼,增加靜態(tài)分析的難度。

1.2 OLLVM混淆

OLLVM是x86和ARM平臺(tái)上使用最廣泛的代碼混淆器之一,它作為L(zhǎng)LVM編譯過(guò)程中的中間環(huán)節(jié)實(shí)現(xiàn),提供了以下三種混淆技術(shù):

a) 指令替換(instructions substitution,InsSub)。指令替換是OLLVM中最簡(jiǎn)單的混淆技術(shù)。它用功能等價(jià)但更復(fù)雜的指令序列替代標(biāo)準(zhǔn)的二進(jìn)制操作,如算術(shù)運(yùn)算(ADD,SUB)或布爾運(yùn)算(AND,OR和XOR)。對(duì)于每種操作,指令替換都有多種方式來(lái)執(zhí)行混淆操作并在運(yùn)行過(guò)程中隨機(jī)選擇一種方式,以增加混淆代碼的多樣性。

b)虛假控制流(bogus control flow,BCF)。BCF通過(guò)向隨機(jī)選擇的基本塊中添加恒真或恒假的條件跳轉(zhuǎn)來(lái)修改函數(shù)的控制流圖,使得混淆后的代碼中多出了許多嚴(yán)重影響分析的死代碼。為了避免死代碼被優(yōu)化器優(yōu)化,BCF使用不透明謂詞來(lái)確保程序運(yùn)行時(shí)只執(zhí)行原始代碼。

c)控制流平坦化(control flow flattening,CFF)。CFF是最難的一種混淆技術(shù),其基本思想是刪除所有容易識(shí)別的條件跳轉(zhuǎn)和循環(huán)結(jié)構(gòu)并使用while和switch結(jié)構(gòu)來(lái)重構(gòu)代碼的控制流,控制基本塊之間的跳轉(zhuǎn),使得塊與塊之間看起來(lái)是平行關(guān)系。

在逆向工程中,分析程序的控制流是一個(gè)重要的過(guò)程,而經(jīng)BCF或CFF混淆后的程序由于插入了許多條件分支和無(wú)用代碼塊嚴(yán)重破壞了原始程序的控制流,使得混淆后的程序變得晦澀難懂。當(dāng)它們組合使用時(shí),程序?qū)⑦M(jìn)一步變得難以理解。因此本文主要針對(duì)OLLVM中的BCF和CFF進(jìn)行反混淆研究。

1.3 Qiling框架

Qiling[12是一個(gè)二進(jìn)制仿真框架,具有跨平臺(tái)、跨架構(gòu)的特點(diǎn),可以模擬運(yùn)行多種平臺(tái)及多種文件格式的程序。其本質(zhì)上是在沙箱環(huán)境中模擬執(zhí)行二進(jìn)制文件,并提供統(tǒng)一分析的應(yīng)用程序接口(application program interface,API),包括快照、插樁分析、API劫持和系統(tǒng)調(diào)用等。

2 BCF反混淆

2.1 BCF特征分析

OLLVM中的BCF混淆在函數(shù)中引入了不透明謂詞。如圖1(a)所示,block A為不透明謂詞所在的一個(gè)基本塊,不透明謂詞的數(shù)學(xué)表達(dá)式為ylt;10 or (x×(x-1) mod 2)==0,匯編指令序列具有比較明顯的特征。表達(dá)式的后半部分是奇數(shù)乘以偶數(shù)模2,恒等于0,整個(gè)表達(dá)式將始終為真,由此引入不可達(dá)分支,即block B。由于OLLVM開(kāi)源,開(kāi)發(fā)者很容易自定義為其他表達(dá)式,此時(shí),基于表達(dá)式特征的匹配[4將會(huì)失敗,研究人員需要手動(dòng)分析新的特征。

為了避免該問(wèn)題,本文對(duì)OLLVM中的不透明謂詞進(jìn)行了深入分析。不透明謂詞中的x和y是全局變量,在程序編譯后被存儲(chǔ)于ELF文件的.bss節(jié)中。在ELF文件的規(guī)范,.bss節(jié)用于保存未進(jìn)行初始化的全局?jǐn)?shù)據(jù),是data段的一部分,程序在加載時(shí)將數(shù)據(jù)初始化為0,并且在程序執(zhí)行期間可以進(jìn)行賦值[13,而混淆后的程序在整個(gè)執(zhí)行期間并不會(huì)對(duì)其進(jìn)行賦值,否則可能會(huì)在靜態(tài)分析時(shí)被優(yōu)化掉。根據(jù)這一特點(diǎn),本文結(jié)合動(dòng)態(tài)污點(diǎn)分析技術(shù)14~16來(lái)識(shí)別不透明謂詞,從而實(shí)現(xiàn)反混淆。

2.2 BCF反混淆方法

本文首先將.bss節(jié)中的每個(gè)內(nèi)存地址標(biāo)記為污點(diǎn)源,并對(duì).bss節(jié)的內(nèi)存區(qū)域進(jìn)行監(jiān)控。若程序運(yùn)行過(guò)程中,在對(duì)某個(gè)內(nèi)存地址進(jìn)行讀操作之前,先對(duì)該地址進(jìn)行了寫(xiě)操作,則認(rèn)為該地址正常并移除污點(diǎn)標(biāo)記;否則,認(rèn)為該地址與不透明謂詞相關(guān),并在內(nèi)存讀操作發(fā)生時(shí),將相關(guān)的寄存器標(biāo)記為污點(diǎn)寄存器,將污點(diǎn)寄存器相關(guān)的指令標(biāo)記為被污染的指令,同時(shí)開(kāi)始進(jìn)行污點(diǎn)傳播分析。若該寄存器被干凈的數(shù)據(jù)重新賦值,則移除其污點(diǎn)標(biāo)記。污點(diǎn)傳播分析過(guò)程通過(guò)在動(dòng)態(tài)運(yùn)行程序時(shí)hook每條指令完成。

值得注意的是,除了R0~R15寄存器外,狀態(tài)寄存器CPSR也可能被污染,從而導(dǎo)致污點(diǎn)傳播。例如圖1(a)中指令序列“CMP R0,#0xA; LDR R0,=0; MOVLT R0,#1”,其中R0是污點(diǎn)寄存器,在第一條指令中由于CMP指令會(huì)影響CPSR,使得CPSR被污染;在第二條指令中,R0因重新賦值被漂白,但卻在第三條指令中由于CPSR是污點(diǎn)寄存器,使得R0寄存器重新被污染。當(dāng)程序執(zhí)行到條件跳轉(zhuǎn)指令時(shí),如“BEQ xxx”,若此時(shí)CPSR是污點(diǎn)寄存器,則認(rèn)為當(dāng)前基本塊是虛假控制流塊,并記錄下一條指令執(zhí)行時(shí)的地址,在后續(xù)指令修復(fù)[8時(shí)將條件跳轉(zhuǎn)指令改為無(wú)條件跳轉(zhuǎn)指令,跳轉(zhuǎn)地址為所記錄的執(zhí)行地址。

為了增加代碼覆蓋率,本文引入多執(zhí)行路徑構(gòu)造[17的方法,在程序執(zhí)行到正常的條件分支處時(shí)保存程序快照到快照集合中,并在每次程序執(zhí)行完畢后取出一個(gè)快照并通過(guò)修改CPSR寄存器中相應(yīng)標(biāo)志位的值,迫使程序沿另一條路徑執(zhí)行。Qiling框架提供了快照功能,使得本文能很容易實(shí)現(xiàn)這一點(diǎn)。同時(shí),為了避免程序陷入死循環(huán)中,本文使用一個(gè)集合記錄程序執(zhí)行過(guò)的地址,當(dāng)出現(xiàn)重復(fù)時(shí)便停止運(yùn)行,清空該集合并取出下一個(gè)快照開(kāi)始執(zhí)行。

除了修復(fù)跳轉(zhuǎn)指令,還需修復(fù)被污染的指令。其中對(duì)于被污染的算術(shù)運(yùn)算指令和比較指令,使用空操作指令MOV R0,R0(在IDA中將被識(shí)別為無(wú)操作指令NOP)進(jìn)行填充[18;對(duì)于被污染的條件執(zhí)行的數(shù)據(jù)傳送指令,由于其在第4章的綜合混淆中可能起著控制狀態(tài)變量的作用,所以本文根據(jù)狀態(tài)寄存器的值及指令的條件碼計(jì)算其是否執(zhí)行;若執(zhí)行,則將其改為無(wú)條件執(zhí)行,否則使用空操作指令填充。圖1(a)的反混淆結(jié)果如圖1(b)所示,指向block B的不可達(dá)分支被移除。

3 CFF反混淆

3.1 CFF特征分析

CFF混淆破壞掉了函數(shù)的原始控制流,并引入了大量不包含原始代碼的基本塊。本文參考之前在x86平臺(tái)上的工作[4,8,將一個(gè)混淆函數(shù)的基本塊劃分為六類,詳細(xì)定義如下:

a)序言塊:函數(shù)的起始?jí)K;

b)主調(diào)度器:序言塊的直接后繼塊;

c)預(yù)調(diào)度器:后繼為主調(diào)度器的塊;

d)相關(guān)塊:后繼為預(yù)調(diào)度器的塊;

e)返回塊:無(wú)任何后繼的基本塊;

f)其余為子調(diào)度器。

程序的原始操作存在于序言塊、相關(guān)塊和返回塊中,可以統(tǒng)稱為有用塊。在動(dòng)態(tài)調(diào)試程序時(shí),易得知已執(zhí)行的基本塊之間的順序關(guān)系,因此,本文通過(guò)自動(dòng)化的動(dòng)態(tài)分析找到各個(gè)有用塊之間的拓?fù)潢P(guān)系。在程序執(zhí)行過(guò)程中,第一個(gè)被執(zhí)行的相關(guān)塊在原始控制流中必然屬于序言塊的后繼,因此最重要的是找到相關(guān)塊及返回塊之間的關(guān)系。

經(jīng)CFF混淆的程序,其相關(guān)塊中并沒(méi)有條件跳轉(zhuǎn)指令,取而代之的是通過(guò)一個(gè)狀態(tài)變量(通常是很大的數(shù))來(lái)指示主調(diào)度器下一個(gè)需要到達(dá)的相關(guān)塊或返回塊[4,如圖2中樣例所示。但是,若該相關(guān)塊在原始控制流中是條件分支的基本塊,則相關(guān)塊中必然存在條件碼不為1110和1111的指令,如圖2基本塊block J中的MOVGT R2,#1和MOVNE R1,R0指令;此外,必然包含一條TST指令,該指令和下一條指令MOVNE組合使用實(shí)現(xiàn)了對(duì)狀態(tài)變量的控制。因此,可在此處的TST指令執(zhí)行完畢后,根據(jù)該基本塊中后續(xù)指令的類型對(duì)狀態(tài)寄存器CPSR的標(biāo)志位進(jìn)行相應(yīng)的改變,從而引導(dǎo)程序執(zhí)行其他分支。

3.2 CFF反混淆方法

在正式開(kāi)始動(dòng)態(tài)分析前,本文首先采用肖順陶等人[8給出的基本塊分類算法預(yù)先通過(guò)靜態(tài)分析工具IDA Pro導(dǎo)出混淆函數(shù)的控制流圖對(duì)基本塊進(jìn)行分類。之后,通過(guò)Qiling動(dòng)態(tài)執(zhí)行程序,并hook每條指令,按算法1進(jìn)行處理。同樣,為了增加代碼覆蓋率,在程序執(zhí)行到有用塊中的TST指令時(shí),將程序快照和其他一些必要數(shù)據(jù)保存到快照集合中,并每次在程序運(yùn)行完畢后從集合中取出快照,恢復(fù)相應(yīng)數(shù)據(jù),更改狀態(tài)寄存器的值,使程序走向另一個(gè)分支。

算法1 CFF反混淆算法

輸入:相關(guān)塊和返回塊的并集Rel={r1,r2,…,rn},當(dāng)前執(zhí)行的指令ins,上一個(gè)執(zhí)行的有用塊Last∈Rel,當(dāng)前執(zhí)行的有用塊Cur∈Rel,狀態(tài)變量是否被改變Status,當(dāng)前執(zhí)行的程序快照CurSnap,已執(zhí)行過(guò)的基本塊集合Exed。

輸出:有用塊之間的關(guān)系。

for each block∈Rel do

if ins的地址等于block的首地址 then

if ins not in Exed then

添加ins到Exed中

else

Exed←?

停止運(yùn)行當(dāng)前程序,避免陷入死循環(huán);從快照集合中取出一個(gè)快照運(yùn)行

return

end if

Last←Cur

Cur←block

if Last is none then

記錄當(dāng)前塊Cur為第一個(gè)執(zhí)行的有用塊

else if Last不為?,且Last中無(wú)TST指令 then

記錄Last的直接后繼為Cur

else if Last不為?,且Last中含TST指令 then

if Status then

記錄Last的條件滿足分支為Cur

else

記錄Last的條件不滿足分支為Cur

end if

end if

end if

end for

if ins為T(mén)ST指令,且指令所在的塊屬于Rel then

保存當(dāng)前程序快照、當(dāng)前地址、Last和Cur到快照集合中;結(jié)合之后條件執(zhí)行的數(shù)據(jù)傳送指令,計(jì)算狀態(tài)變量是否會(huì)被改變

if 狀態(tài)變量會(huì)被改變 then

Status←true

else

Status←1

end if

if 當(dāng)前地址等于CurSnap的起始地址 then

Status取反,并更改一次狀態(tài)寄存器相應(yīng)標(biāo)志位

end if

end if

當(dāng)混淆程序運(yùn)行完畢,且快照集合為空,表明此時(shí)各有用塊之間的關(guān)系已被分析完成,接下來(lái),開(kāi)始最后指令修復(fù)步驟。對(duì)于非有用塊,使用空操作指令填充;對(duì)于無(wú)條件分支的有用塊,修改其塊末尾跳轉(zhuǎn)指令的跳轉(zhuǎn)地址,使其跳轉(zhuǎn)到正確有用塊;對(duì)于含條件分支的有用塊,則修改TST指令后條件執(zhí)行的數(shù)據(jù)傳送指令為條件跳轉(zhuǎn)指令,使其指向滿足條件的分支,修改塊末的無(wú)條件跳轉(zhuǎn)指令,使其指向條件不滿足的分支。由于序言塊不含條件跳轉(zhuǎn)指令,本文修改主分發(fā)器的最后一條指令,使其無(wú)條件跳轉(zhuǎn)到第一個(gè)執(zhí)行的相關(guān)塊,并使用空操作指令填充該塊的其他指令。圖2中樣例的反混淆結(jié)果如圖3所示,反混淆后的程序仍然可執(zhí)行。其中由于block B與block C的地址相鄰,使其即使被空操作指令填充后在控制流圖中仍然指向block C,但此時(shí)對(duì)分析人員的影響已經(jīng)非常小,且并不影響反混淆后的程序運(yùn)行。

4 綜合反混淆

4.1 綜合混淆特征分析

當(dāng)BCF和CFF混淆綜合使用時(shí),混淆程序的特征有部分改變,其控制流圖在結(jié)構(gòu)上仍然與單獨(dú)使用CFF混淆時(shí)相同,但不同之處在于相關(guān)塊集合中包含具有不透明謂詞的基本塊,如圖4(a)中基本塊block B所示。此時(shí)不透明謂詞所在的基本塊僅有一個(gè)后繼基本塊,但塊中包含狀態(tài)變量,且由不透明謂詞決定是否改變。此外,不透明謂詞所在的塊中同樣含有TST指令,如果仍使用算法1進(jìn)行反混淆,將會(huì)出現(xiàn)錯(cuò)誤,因此,需要對(duì)含有不透明謂詞的基本塊作額外處理。

4.2 綜合反混淆方法

由于綜合混淆后的程序其控制流圖在結(jié)構(gòu)上仍然與單獨(dú)使用CFF混淆時(shí)相同,所以本文首先使用第3章中的方法進(jìn)行CFF反混淆,但是額外引入污點(diǎn)分析方法對(duì)基本塊的類型進(jìn)行判斷。當(dāng)發(fā)生污點(diǎn)傳播時(shí),標(biāo)記當(dāng)前執(zhí)行的指令所在的基本塊含不透明謂詞;若當(dāng)前執(zhí)行的基本塊中含不透明謂詞,則執(zhí)行到塊中的TST指令時(shí)不再更改狀態(tài)寄存器。每條指令的處理如算法2所示。

算法2 綜合反混淆中的CFF反混淆算法

輸入:相關(guān)塊和返回塊的并集Rel={r1,r2,…,rn},當(dāng)前執(zhí)行的指令ins,上一個(gè)執(zhí)行的有用塊Last∈Rel,當(dāng)前執(zhí)行的有用塊Cur∈Rel,狀態(tài)變量是否被改變Status,當(dāng)前執(zhí)行的程序快照CurSnap,已執(zhí)行過(guò)的基本塊集合Exed。

輸出:有用塊之間的關(guān)系。

for each block∈Rel do

if ins的地址等于block的首地址 then

if ins not in Exed then

添加ins到Exed中

else

Exed←?

停止運(yùn)行當(dāng)前程序,避免陷入死循環(huán);從快照集合中取出一個(gè)快照運(yùn)行

return

end if

Last←Cur

Cur←block

if Last is none then

記錄當(dāng)前塊Cur為第一個(gè)執(zhí)行的有用塊

else if Last不為空,且Last中無(wú)TST指令 then

記錄Last的直接后繼為Cur

else if Last不為空,且Last中含TST指令 then

if Status then

記錄Last的條件滿足分支為Cur

else

記錄Last的條件不滿足分支為Cur

end if

end if

end if

end for

if ins為T(mén)ST指令,且指令所在的塊屬于Rel,且Cur中不含不透明謂詞 then

保存當(dāng)前程序快照、當(dāng)前地址、Last和Cur到快照集合中;結(jié)合之后條件執(zhí)行的數(shù)據(jù)傳送指令,計(jì)算狀態(tài)變量是否會(huì)被改變

if 狀態(tài)變量會(huì)被改變 then

Status←true

else

Status←1

end if

if 當(dāng)前地址等于CurSnap的起始地址 then

Status取反,并更改一次狀態(tài)寄存器相應(yīng)標(biāo)志位

end if

end if

在完成CFF反混淆后,本文再應(yīng)用一次第2章中提出的BCF反混淆方法,完成綜合反混淆,整個(gè)流程如圖5所示。圖4(a)樣例中部分基本塊完成綜合反混淆后的效果如圖4(b)所示,基本塊之間的拓?fù)潢P(guān)系被成功恢復(fù)。

5 實(shí)驗(yàn)和結(jié)果

實(shí)驗(yàn)所使用的操作系統(tǒng)為Ubuntu 20.04,混淆工具為OLLVM 4.0,反混淆原型工具基于Qiling 1.4.0實(shí)現(xiàn),混淆函數(shù)的控制流圖由IDA Pro 7.5導(dǎo)出。

5.1 數(shù)據(jù)集

為了驗(yàn)證方法的有效性,本文在C/C++混淆基準(zhǔn)測(cè)試數(shù)據(jù)集[19上進(jìn)行了測(cè)試,它包含了一些典型算法、哈希函數(shù)和小型程序,被廣泛用于安全評(píng)估中20,21

本文使用OLLVM對(duì)每個(gè)程序進(jìn)行混淆,并對(duì)混淆后的程序執(zhí)行反混淆測(cè)試。OLLVM可以通過(guò)參數(shù)-bcf_prob控制一個(gè)基本塊被BCF混淆的概率。為了便于準(zhǔn)確評(píng)估實(shí)驗(yàn)結(jié)果,本文使用-bcf_prob=100將BCF混淆概率調(diào)整為100%,其余選項(xiàng)使用默認(rèn)參數(shù)。

5.2 結(jié)果與分析

5.2.1 OLLVM反混淆

被BCF和CFF混淆后的程序,含有條件分支的基本塊數(shù)大量增加,因此本文通過(guò)對(duì)比反混淆前后含有條件分支的基本塊數(shù)量以及程序運(yùn)行結(jié)果是否一致來(lái)驗(yàn)證反混淆方法的有效性和準(zhǔn)確性。此外,本文未對(duì)InsSub進(jìn)行反混淆,但在實(shí)際應(yīng)用中組合使用多種混淆時(shí),有可能使得本文的反混淆方法失敗,因此本文也一并對(duì)此進(jìn)行了測(cè)試。

部分結(jié)果如表1所示,N1、N2和N3分別表示未混淆程序、混淆程序和反混淆程序的條件分支數(shù),R表示反混淆前后程序的運(yùn)行結(jié)果是否一致。

實(shí)驗(yàn)表明InsSub混淆并未引入新的混淆分支,本文的方法準(zhǔn)確消除了因混淆而產(chǎn)生的條件分支,并且反混淆后得到的程序其運(yùn)行結(jié)果與未混淆的程序保持一致,具有優(yōu)秀的反混淆效果。

5.2.2 Armariris反混淆

Armariris是另一個(gè)被廣泛使用的OLLVM變種,由上海交通大學(xué)密碼與計(jì)算機(jī)安全實(shí)驗(yàn)室設(shè)計(jì)實(shí)現(xiàn),增加了字符串加密(string encryption,SE)這一功能,但是移除了BCF混淆,保留了InsSub和CFF混淆。

本文同樣對(duì)Armariris進(jìn)行了實(shí)驗(yàn),部分結(jié)果如表2所示,其中N1、N2、N3和R的含義同表1。結(jié)果顯示,本文的CFF反混淆方法對(duì)Armariris同樣適用,且字符串加密對(duì)本文的反混淆方法并無(wú)影響,表明了本文方法具有一定的普適性。

6 結(jié)束語(yǔ)

本文提出了基于動(dòng)態(tài)分析的自動(dòng)化反混淆的方法,用于去除ARM架構(gòu)下經(jīng)OLLVM混淆的ELF格式可執(zhí)行程序,并且實(shí)驗(yàn)表明,本文方法能準(zhǔn)確識(shí)別和消除因混淆產(chǎn)生的條件分支。但是,本文在CFF反混淆中依賴了靜態(tài)分析提供的控制流圖,盡管在實(shí)驗(yàn)中并未出現(xiàn),但實(shí)際中仍有可能因控制流圖錯(cuò)誤而導(dǎo)致反混淆結(jié)果有誤。此外,由于ARM 64位的指令及寄存器有別于ARM 32位,所以本文的方法無(wú)法直接應(yīng)用于64位的ARM程序。在未來(lái),本文將繼續(xù)進(jìn)行改進(jìn)。

參考文獻(xiàn):

[1]Junod P,Rinaldini J,Wehrli J,et al.Obfuscator-LLVM-software protection for the masses[C]//Proc of the 1st IEEE/ACM International Workshop on Software Protection.Piscataway,NJ:IEEE Press,2015:3-9.

[2]GoSSIP.Armariris[EB/OL].(2019)[2022-05-13].https://github.com/GoSSIP-SJTU/Armariris.

[3]CVE.CVE-2014-3153[EB/OL].(2014-05-03)[2022-02-28].https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3153.

[4]Francis G.Deobfuscation:recovering an OLLVM-protected program[EB/OL].(2014-12-04)[2021-12-28].https://blog.quarkslab.com/deobfuscation-recovering-an-ollvm-protected-program.html.

[5]CEA IT Security.Miasm[EB/OL].(2022)[2022-05-13].https://github.com/cea-sec/miasm.

[6]Duboscq G,Wyurthinger T,Stadler L,et al.An intermediate representation for speculative optimizations in a dynamic compiler[C]//Proc of the 7th ACM workshop on Virtual Machines and Intermediate Languages.New York:ACM Press,2013:1-10.

[7]Dullien T,Porst S.REIL:a platform-independent intermediate representation of disassembled code for static code analysis[C]//Proc of CanSecWest.2009.

[8]肖順陶,周安民,劉亮,等.基于符號(hào)執(zhí)行的底層虛擬機(jī)混淆器反混淆框架[J].計(jì)算機(jī)應(yīng)用,2018,38(6):1745-1750.(Xiao Shuntao,Zhou Anming,Liu Liang,et al.Obfuscator low level virtual machine deobfuscation framework based on symbolic execution[J].Journal of Computer Applications,2018,38(6):1745-1750.)

[9]Wang F,Shoshitaishvili Y.Angr-the next generation of binary analysis[C]//Proc of IEEE Cybersecurity Development.Piscataway,NJ:IEEE Press,2017:8-9.

[10]Xu Hui,Zhou Yangfan,Kang Yu,et al.Manufacturing resilient biopaque predicates against symbolic execution[C]//Proc of the 48th Annual IEEE/IFIP International Conference on Dependable Systems and Networks.Piscataway,NJ:IEEE Press,2018:666-677.

[11]Tung Y J,Harris I G.Zero footprint opaque predicates:synthesizing opaque predicates from naturally occurring invariants[C]//Proc of International Conference on Detection of Intrusions and Malware,and Vulnerability Assessment.Berlin:Springer,2021:299-318.

[12]Lau K.Qiling[EB/OL].(2022)[2022-02-28].https://github.com/qilingframework/qiling.

[13]O’Neill R.Linux二進(jìn)制分析[M].棣琦,譯.北京:人民郵電出版社,2017:21.(O’Neill R.Learning Linux binary analysis[J].Di Qi,trans.Beijing:Post amp; Telecom Press,2017:21.)

[14]Zeng Junyuan,F(xiàn)u Yangchun,Miller K A,et al.Obfuscation resilient binary code reuse through trace-oriented programming[C]//Proc of ACM SIGSAC Conference on Computer amp; Communications Security.New York:ACM Press,2013:487-498.

[15]潘家曄,莊毅.一種改進(jìn)的基于在線解耦的輕量級(jí)動(dòng)態(tài)污點(diǎn)分析方法[J].小型微型計(jì)算機(jī)系統(tǒng),2021,42(2):431-436.(Pan Jiaye,Zhuang Yi.Improved lightweight decoupled online dynamic taint analysis method[J].Journal of Chinese Computer Systems,2021,42(2):431-436.)

[16]Banescu S,Valenzuela S,Guggenmos M,et al.Dynamic taint analysis versus obfuscated self-checking[C]//Proc of Annual Computer Security Applications Conference.New York:ACM Press,2021:182-193.

[17]郭軍,王蕾,湯戰(zhàn)勇,等.基于語(yǔ)義的二進(jìn)制代碼自動(dòng)化反混淆方法[J].華中科技大學(xué)學(xué)報(bào) :自然科學(xué)版,2016,44(3):55-59.(Guo Jun,Wang Lei,Tang Zhanyong,et al.Semantics-based binary code automated deobfuscation approach[J].Journal of Huazhong University of Science and Technology :Natural Science Edition,2016,44(3):55-59.)

[18]杜春雷.ARM體系結(jié)構(gòu)與編程[M].2 版.北京:清華大學(xué)出版社,2015.(Du Chunlei.ARM architecture and program[M].2nd ed.Beijing:Tsinghua University,2015.)

[19]Banescu S.Obfuscation benchmarks[EB/OL].(2018)[2021-11-15].https://github.com/tum-i4/obfuscation-benchmarks.

[20]Banescu S,Collberg C,Pretschner A.Predicting the resilience of obfuscated code against symbolic execution attacks via machine learning[C]//Proc of the 26th USENIX Security Symposium.[S.l.]:USENIX Association,2017:661-678.

[21]Downing E,Mirsky Y,Park K,et al.DeepReflect:discovering malicious functionality through binary reconstruction[C]//Proc of the 30th USENIX Security Symposium.[S.l.]:USENIX Association,2021:3469-3486.

主站蜘蛛池模板: 国产日本欧美亚洲精品视| V一区无码内射国产| 日韩AV手机在线观看蜜芽| 亚洲男人的天堂网| 亚洲视频无码| 亚洲永久精品ww47国产| 成人国产精品2021| 国产成人亚洲精品无码电影| 无码中文字幕精品推荐| 亚洲欧洲日本在线| www欧美在线观看| 午夜国产精品视频黄| 狠狠色婷婷丁香综合久久韩国| 午夜一级做a爰片久久毛片| 精品国产99久久| 亚洲最黄视频| 欧美成人午夜在线全部免费| 免费无码网站| 亚洲高清无码精品| 国产精品999在线| 97超碰精品成人国产| 久久久成年黄色视频| www中文字幕在线观看| 夜夜高潮夜夜爽国产伦精品| 国产美女自慰在线观看| 原味小视频在线www国产| 日本一区中文字幕最新在线| 美女视频黄又黄又免费高清| 激情综合网址| 九九热视频在线免费观看| 亚洲AV成人一区国产精品| 毛片免费观看视频| 中文字幕av无码不卡免费| 国产精品不卡片视频免费观看| 日韩国产亚洲一区二区在线观看| 亚洲黄色片免费看| 色综合国产| 久一在线视频| 精品国产网| 久久99精品久久久大学生| 国产精品无码AⅤ在线观看播放| 国产在线视频欧美亚综合| 午夜精品福利影院| A级毛片无码久久精品免费| 丰满人妻中出白浆| 色悠久久综合| 91 九色视频丝袜| 日本高清免费不卡视频| 精品無碼一區在線觀看 | 日本高清在线看免费观看| 久久精品国产亚洲麻豆| 伊人大杳蕉中文无码| 国产精品任我爽爆在线播放6080| 国产99热| 成年人国产网站| 日韩123欧美字幕| 亚洲成年人网| 日韩国产高清无码| 亚洲国产日韩视频观看| 国产理论精品| 亚洲日韩AV无码精品| 国产女人在线视频| 99久久婷婷国产综合精| 国内精自线i品一区202| 亚洲欧美日韩动漫| 久青草免费在线视频| 嫩草在线视频| 免费一级毛片在线播放傲雪网| 69视频国产| 国产成人免费手机在线观看视频 | www亚洲天堂| 久久国产高潮流白浆免费观看| a级毛片免费播放| 青青草原国产免费av观看| 91福利免费视频| 中文字幕在线永久在线视频2020| 精品撒尿视频一区二区三区| 色九九视频| 亚洲最大综合网| 欧美一区二区福利视频| 成人国产小视频| 国产一区二区福利|