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

反調(diào)試技術(shù)綜述*

2019-09-17 00:39:58肖植燦
關(guān)鍵詞:進(jìn)程調(diào)試檢測(cè)

吳 極,王 逍,肖植燦

(云南大學(xué) 軟件學(xué)院,云南 昆明 650504)

0 引言

隨著計(jì)算機(jī)技術(shù)的廣泛應(yīng)用,軟件產(chǎn)業(yè)在人類日常生活、工業(yè)生產(chǎn)、科學(xué)研究等領(lǐng)域正在發(fā)揮著越發(fā)重要的作用。但是,在經(jīng)濟(jì)利益或純粹愛(ài)好的驅(qū)使下,非法用戶在未經(jīng)許可的情況下對(duì)軟件的非法復(fù)制和使用無(wú)疑破壞了軟件開發(fā)人員的利益。這種行為同時(shí)也會(huì)對(duì)全球軟件產(chǎn)業(yè)的健康發(fā)展造成不利影響。單純依靠法律和道德約束來(lái)保護(hù)軟件是不夠的,因此,軟件保護(hù)技術(shù)的開發(fā)是非常必要的,它可以保護(hù)軟件在技術(shù)層面上的安全。

可以應(yīng)用于軟件程序以保護(hù)它們免受惡意逆向工程的工作機(jī)制被稱為軟件保護(hù)[1-2]。目前關(guān)于反逆向工程的研究通常側(cè)重于混淆、虛擬機(jī)檢測(cè)、反拆卸和防篡改[3]。但毫無(wú)疑問(wèn),隨著軟件產(chǎn)業(yè)的快速發(fā)展,以反調(diào)試技術(shù)為中心的軟件保護(hù)已經(jīng)成為一個(gè)需要受到重視的問(wèn)題[4]。

本文將對(duì)現(xiàn)有的反調(diào)試技術(shù)進(jìn)行分類闡述,并在現(xiàn)有反調(diào)試技術(shù)的基礎(chǔ)上,對(duì)國(guó)內(nèi)外反調(diào)試技術(shù)和相關(guān)軟件保護(hù)技術(shù)的研究進(jìn)行深入分析,總結(jié)、歸納出應(yīng)用于軟件保護(hù)的反調(diào)試技術(shù)的研究現(xiàn)狀和發(fā)展趨勢(shì)。

1 反調(diào)試技術(shù)概述

反調(diào)試是“在計(jì)算機(jī)代碼中實(shí)現(xiàn)一種或多種技術(shù),它阻礙了對(duì)目標(biāo)進(jìn)程進(jìn)行逆向工程或調(diào)試的嘗試”[5]。反調(diào)試技術(shù)是反逆向工程中一種常見的反檢測(cè)技術(shù)。

軟件在運(yùn)行時(shí)如果通過(guò)反調(diào)試技術(shù)檢測(cè)到自身處于被調(diào)試狀態(tài),就會(huì)觸發(fā)預(yù)先設(shè)定好的反調(diào)試策略,來(lái)響應(yīng)并處理調(diào)試行為,若自身未被調(diào)試,則軟件程序繼續(xù)正常運(yùn)行。

文獻(xiàn)[6]從逆向分析人員的立場(chǎng)出發(fā),根據(jù)調(diào)試技術(shù)的破解方法將反調(diào)試技術(shù)分為靜態(tài)反調(diào)試和動(dòng)態(tài)反調(diào)試。靜態(tài)反調(diào)試是指在程序啟動(dòng)時(shí),系統(tǒng)會(huì)根據(jù)正常運(yùn)行和調(diào)試運(yùn)行分配不同的進(jìn)程環(huán)境,通過(guò)檢測(cè)進(jìn)程環(huán)境來(lái)檢測(cè)進(jìn)程是否處于調(diào)試狀態(tài)。許多靜態(tài)反調(diào)試技術(shù)對(duì)OS系統(tǒng)有較強(qiáng)的依賴性,這意味著有些靜態(tài)反調(diào)試技術(shù)在不同的平臺(tái)上可能會(huì)失效。動(dòng)態(tài)反調(diào)試是指在程序運(yùn)行時(shí),分析正在運(yùn)行的進(jìn)程的執(zhí)行流程和執(zhí)行狀態(tài)是否正常來(lái)檢測(cè)進(jìn)程是否處于調(diào)試狀態(tài)。例如,遇到異常時(shí),調(diào)試器會(huì)先接收異常事件而不是直接傳遞給進(jìn)程本身,所以可以利用異常處理機(jī)制來(lái)實(shí)現(xiàn)反調(diào)試[7]。反調(diào)試檢測(cè)流程如圖1所示。

圖1 反調(diào)試檢測(cè)流程圖

基于運(yùn)行環(huán)境檢測(cè)的靜態(tài)反調(diào)試技術(shù)是對(duì)整個(gè)程序的保護(hù),反調(diào)試手段相對(duì)“死板”,破解方式也比較簡(jiǎn)單。其實(shí)程序開發(fā)者只是想對(duì)程序的關(guān)鍵算法和核心數(shù)據(jù)進(jìn)行保護(hù)、避免逆向分析。動(dòng)態(tài)反調(diào)試則是基于執(zhí)行狀態(tài)來(lái)判斷調(diào)試器行為,使其無(wú)法正常跟蹤程序的執(zhí)行流程或加大其逆向分析難度。相比靜態(tài)反調(diào)試,動(dòng)態(tài)反調(diào)試隱蔽性較強(qiáng),技術(shù)難度更高,破解難度也更大。

2 反調(diào)試技術(shù)分類

2.1 基于直接檢測(cè)的反調(diào)試

此類別下的反調(diào)試方式通過(guò)直接觀察調(diào)試器及其相關(guān)信息來(lái)檢測(cè)調(diào)試器的存在。該類別存在的原因是調(diào)試器最初設(shè)計(jì)用于調(diào)試合法軟件。因此,并沒(méi)有被提供能使調(diào)試器隱身的對(duì)策。此外,通過(guò)調(diào)試工具分析程序時(shí),工具會(huì)在系統(tǒng)的不同級(jí)別留下大量痕跡[8-12],這些系統(tǒng)痕跡可以被用于檢查系統(tǒng)是否存在調(diào)試器工作。此類別可以基于讀取PEB過(guò)程環(huán)境塊、斷點(diǎn)、NtQuerySystemInformation()函數(shù)、查找系統(tǒng)痕跡、父進(jìn)程檢查等方式實(shí)現(xiàn)。

2.1.1 PEB環(huán)境塊字段

進(jìn)程環(huán)境塊(PEB)是系統(tǒng)中每個(gè)進(jìn)程存在的數(shù)據(jù)結(jié)構(gòu),包含有關(guān)該進(jìn)程的數(shù)據(jù)[12]。PEB的不同部分包含可由被直接探測(cè)以檢測(cè)調(diào)試器是否存在的信息??偟膩?lái)說(shuō),依靠PEB的反調(diào)試策略構(gòu)成了大部分被觀察到的反調(diào)試技術(shù)[13]。

對(duì)于讀取PEB過(guò)程環(huán)境塊,可以通過(guò)讀取此字段的特定API,即IsDebuggerPresent(),CheckRemoteDebuggerPresent()或通過(guò)檢測(cè)PEB其他稍微復(fù)雜的內(nèi)容NtGlobalFLags和ProcessHeap等方式來(lái)實(shí)現(xiàn)反調(diào)試?;贜tGlobalFlags實(shí)現(xiàn)反調(diào)試如圖2所示。LIMC等人在文獻(xiàn)[14]中提出了一種基于動(dòng)態(tài)二進(jìn)制分析的惡意軟件檢測(cè)方法,該方法采取對(duì)應(yīng)策略來(lái)破解惡意軟件的軟件保護(hù)。該方法分析了惡意軟件基于PEB環(huán)境塊實(shí)現(xiàn)反調(diào)試的過(guò)程以及對(duì)應(yīng)的破解方法,也說(shuō)明了單一反調(diào)試技術(shù)在軟件保護(hù)方面存在的局限性。

圖2 基于NtGlobalFLags實(shí)現(xiàn)反調(diào)試

2.1.2 斷點(diǎn)檢測(cè)

斷點(diǎn)是任何調(diào)試過(guò)程的重要部分,因此檢測(cè)斷點(diǎn)可以實(shí)現(xiàn)檢測(cè)并中斷調(diào)試器?;跀帱c(diǎn)檢測(cè)的反調(diào)試策略是最強(qiáng)大且難以繞過(guò)的策略之一。斷點(diǎn)檢測(cè)存在軟件斷點(diǎn)和硬件斷點(diǎn)兩種類型[4,9]。軟件斷點(diǎn)由調(diào)試器通過(guò)在代碼中寫入特殊操作碼0xCC(int 3h指令)來(lái)設(shè)置斷點(diǎn)。執(zhí)行此指令時(shí),將引發(fā)斷點(diǎn)異常并通過(guò)Windows傳遞給調(diào)試器。對(duì)于硬件斷點(diǎn),該類型使用特定的調(diào)試寄存器設(shè)置硬件斷點(diǎn):DR0-DR7。使用它們,開發(fā)人員可以中斷程序的執(zhí)行并將控制權(quán)轉(zhuǎn)移到調(diào)試器。

對(duì)于斷點(diǎn)檢測(cè),可以通過(guò)自掃描、完整性檢驗(yàn)、查找0xCC和使用函數(shù)GetThreadContext()檢查CPU寄存器等方式實(shí)現(xiàn)反調(diào)試。TORRUBIA A等人在文獻(xiàn)[15]中提出了一種通過(guò)編寫主動(dòng)使用所有可用于中斷的代碼(特別是硬件斷點(diǎn)和軟件斷點(diǎn)中斷)來(lái)實(shí)現(xiàn)反調(diào)試的方法。如圖3所示。

圖3 基于硬件斷點(diǎn)實(shí)現(xiàn)反調(diào)試

2.1.3 父進(jìn)程檢查

通常,應(yīng)用程序通過(guò)雙擊圖標(biāo)或通過(guò)命令行執(zhí)行時(shí),其父進(jìn)程名稱和對(duì)應(yīng)ID可相應(yīng)地檢索。如果檢查的父進(jìn)程名稱屬于調(diào)試器或父進(jìn)程名稱不為explorer.exe,那么它將是調(diào)試器存在的明顯標(biāo)志[16]。同時(shí),父進(jìn)程ID與explorer.exe的進(jìn)程ID如果不匹配,它也可能說(shuō)明調(diào)試器存在。但可能存在多個(gè)explorer.exe和對(duì)應(yīng)的PID導(dǎo)致匹配過(guò)程復(fù)雜化,所以基于父進(jìn)程檢查的反調(diào)試方式很少被使用[17]。

對(duì)于父進(jìn)程檢查,可以通過(guò)GetCurrentProcessId()、 CreateToolhelp32Snapshot(). (Process32First())、 Process32Next()等函數(shù)進(jìn)行父進(jìn)程名稱和ID的匹配以實(shí)現(xiàn)反調(diào)試?;贕etCurrentProcessId實(shí)現(xiàn)反調(diào)試如圖4所示。高兵等人在文獻(xiàn)[18]中提出了一種基于代碼自修改的軟件反跟蹤方法來(lái)實(shí)現(xiàn)軟件保護(hù),該方法使用了基于父進(jìn)程檢測(cè)的反調(diào)試方法來(lái)實(shí)現(xiàn)反加載模塊。

圖4 基于GetCurrentProcessId實(shí)現(xiàn)反調(diào)試

2.1.4 系統(tǒng)痕跡查找

從安裝到配置和執(zhí)行,調(diào)試器會(huì)在OS的不同級(jí)別留下痕跡,例如在文件系統(tǒng)、注冊(cè)表、進(jìn)程名稱等中留下系統(tǒng)痕跡。因此,可以通過(guò)跟蹤查找這些系統(tǒng)痕跡實(shí)現(xiàn)反調(diào)試[8-9]。

可以通過(guò)FindWindow()、FindProcess()、FindFirstFile()等API來(lái)檢測(cè)調(diào)試器痕跡從而判斷是否存在調(diào)試器。SHIELDS T在文獻(xiàn)[19]中對(duì)FindWindow()這一最常見的應(yīng)用于反調(diào)試的查找系統(tǒng)痕跡的API進(jìn)行了詳細(xì)介紹,并給出了實(shí)現(xiàn)過(guò)程,如圖5所示。

2.1.5 其他檢測(cè)方法

除了上述的主動(dòng)檢測(cè)方式,還有許多反調(diào)試方法基于使用系統(tǒng)信息直接檢測(cè)是否存在調(diào)試器,這也是最直接的檢測(cè)調(diào)試器的存在或操作的方法。

這些基于系統(tǒng)信息的檢測(cè)機(jī)制不直接訪問(wèn)內(nèi)存區(qū)域或內(nèi)存的索引部分,而是依賴于已記錄和未記錄的Microsoft API函數(shù)調(diào)用的功能,這些函數(shù)可以在各種.DLL和.SYS文件中導(dǎo)出[17]。大多數(shù)情況下,所提出的基于API的檢測(cè)機(jī)制將依賴于底層操作系統(tǒng)調(diào)用來(lái)直接訪問(wèn)存儲(chǔ)器。

對(duì)于可用于調(diào)試器檢測(cè)的系統(tǒng)信息,可以通過(guò).NtQueryInformationProcess()、NtQuerySystemInformation()、NtQueryObject()、ZwSetInformationThread()、DebugActiveProcessStop()等API函數(shù)來(lái)獲取并用來(lái)實(shí)現(xiàn)反調(diào)試?;贜tQuryInformationProcess 實(shí)現(xiàn)反調(diào)試如圖6所示。CHEN P等人在文獻(xiàn)[16]對(duì)這些可以訪問(wèn)系統(tǒng)信息以檢測(cè)調(diào)試器存在的函數(shù)進(jìn)行了列舉,對(duì)函數(shù)功能和實(shí)現(xiàn)反調(diào)試的方式進(jìn)行了說(shuō)明。

圖6 基于NtQueryInformationProcess實(shí)現(xiàn)反調(diào)試

2.2 基于間接推斷的反調(diào)試

此類別下的反調(diào)試方式不是直接觀察調(diào)試器及其相關(guān)信息,而是通過(guò)利用系統(tǒng)邏輯的相關(guān)信息來(lái)計(jì)算并評(píng)估推斷調(diào)試器存在的概率。此類別可以基于異常機(jī)制、時(shí)間差異檢測(cè)等方式實(shí)現(xiàn)。

2.2.1 異常機(jī)制

基于異常機(jī)制的反調(diào)試的原理是調(diào)試器捕獲某些異常后,可以不將異常正確地傳遞給內(nèi)部運(yùn)行的進(jìn)程,從而可以在進(jìn)程內(nèi)部的進(jìn)程異常處理機(jī)制中檢測(cè)到該異常,并對(duì)其進(jìn)行操作。

可以利用Windows在存在調(diào)試器的情況下使用異常處理機(jī)制(Structured Exception Handling,SEH)處理異常的特點(diǎn)來(lái)實(shí)現(xiàn)反調(diào)試。作為異常處理的內(nèi)部機(jī)制,SEH主要在系統(tǒng)級(jí)工作。因此,掌握SEH工作原理是基于SEH的軟件反調(diào)試技術(shù)研究的關(guān)鍵問(wèn)題[20]。

對(duì)于異常處理,可以通過(guò)int 2d、int 3引發(fā)中斷異常,通過(guò)陷阱標(biāo)志位或者ICEBP引發(fā)單步異常,通過(guò)RaiseException函數(shù)產(chǎn)生若干不同類型的異常等方式實(shí)現(xiàn)反調(diào)試?;趇nt 2d實(shí)現(xiàn)反調(diào)試如圖7所示。BING C等人在文獻(xiàn)[21]中提出了一種基于SEH處理機(jī)制的將單步異常和代碼提取相結(jié)合的反調(diào)試方法。該方法在存在調(diào)試器的情況下,會(huì)使得代碼中的異常將被調(diào)試器接管,則異常處理程序無(wú)法觸發(fā)相應(yīng)的跳轉(zhuǎn)執(zhí)行被提取的正常代碼的過(guò)程,從而使程序無(wú)法正常運(yùn)行以實(shí)現(xiàn)反調(diào)試。

圖7 基于int 2d實(shí)現(xiàn)反調(diào)試

2.2.2 時(shí)間差異

基于時(shí)間差異的反調(diào)試是通過(guò)計(jì)算程序運(yùn)行的時(shí)間差異來(lái)判斷進(jìn)程是否處于被調(diào)試狀態(tài)。在調(diào)試狀態(tài)下逐行跟蹤代碼比程序正常運(yùn)行耗費(fèi)的時(shí)間要長(zhǎng)很多,因此,如果程序運(yùn)行時(shí)間超過(guò)預(yù)先設(shè)定程序正常運(yùn)行的閾值,就可以推斷存在調(diào)試器。基于時(shí)間差異的反調(diào)試測(cè)試可以分為基于本地API和外部網(wǎng)絡(luò)資源兩種類型。但無(wú)論是利用本地時(shí)間還是外部資源,對(duì)抗基于時(shí)間差異的反調(diào)試仍然是一個(gè)懸而未決的問(wèn)題[22]。

對(duì)于時(shí)間差異,可以在本地通過(guò)利用本地API(GetTickCount(),QueryPerformanceCounter()等)或者利用CPU rdtsc(讀取時(shí)間戳計(jì)數(shù)器) 或者可以通過(guò)網(wǎng)絡(luò)查詢區(qū)別于本地的外部資源來(lái)進(jìn)行定時(shí)來(lái)實(shí)現(xiàn)反調(diào)試。基于rdtsc 實(shí)現(xiàn)反調(diào)試如圖8所示。KANZAKI Y等人在文獻(xiàn)[23]提出了一種通過(guò)將時(shí)間差異檢測(cè)的反調(diào)試方法和自修改代碼相結(jié)合來(lái)實(shí)現(xiàn)軟件保護(hù)的方法。該方法進(jìn)一步增加了軟件破解的難度和成本。自修改代碼是一種在正在運(yùn)行的程序中修改或生成代碼的機(jī)制[24],其廣泛用于運(yùn)行時(shí)的代碼生成、優(yōu)化技術(shù)和即時(shí)編譯器等。

圖8 基于rdtsc實(shí)現(xiàn)反調(diào)試

2.3 基于干擾調(diào)試器的反調(diào)試

此類別下的反調(diào)試方式是因?yàn)橛幸恍┘夹g(shù)可以被用于干擾調(diào)試器的正常運(yùn)行,這些技術(shù)當(dāng)且僅當(dāng)程序處于調(diào)試器控制時(shí)才會(huì)試圖擾亂程序的運(yùn)行。此類別可以通過(guò)流控制機(jī)制、鎖定策略、調(diào)試器漏洞等方式實(shí)現(xiàn)。

2.3.1 流控制

基于Windows系統(tǒng)的隱式流控制機(jī)制可用于實(shí)現(xiàn)反調(diào)試。此方式包括回調(diào)、直接隱藏、單線程操作、多線程操作和自調(diào)試等子類別。

回調(diào)操作常被隱式控制流用來(lái)實(shí)現(xiàn)反調(diào)試。當(dāng)調(diào)試器執(zhí)行一個(gè)回調(diào)操作時(shí),執(zhí)行流將被轉(zhuǎn)移到指定為其參數(shù)的函數(shù)[25]。它可以使用回調(diào)、枚舉函數(shù)、線程本地存儲(chǔ)(Thread Local Storage,TLS)等方式來(lái)實(shí)現(xiàn)“逃避調(diào)試器”的目標(biāo)。

單線程操作可以通過(guò)隱藏線程或暫停線程使調(diào)試器無(wú)法繼續(xù)調(diào)試,其中暫停線程只對(duì)用戶模式的調(diào)試器生效。單線程操作可以通過(guò)使用ETHREAD內(nèi)核結(jié)構(gòu)的NtSetInformationThread()函數(shù)設(shè)置字段ThreadHideFromDebugger()來(lái)實(shí)現(xiàn)隱藏線程,通過(guò)使用來(lái)自ntdll的SuspendThread()或NtSuspendThread()來(lái)實(shí)現(xiàn)暫停線程[8]?;赥hreadHideFromDebugger實(shí)現(xiàn)反調(diào)試如圖9所示。

圖9 基于ThreadHideFromDebugger實(shí)現(xiàn)反調(diào)試

多線程操作通過(guò)啟動(dòng)在調(diào)試器外部運(yùn)行的不同線程使得核心線程繞過(guò)調(diào)試器并繼續(xù)運(yùn)行來(lái)實(shí)現(xiàn)反調(diào)試。多線程操作可以通過(guò)CreateThread()來(lái)實(shí)現(xiàn)反調(diào)試。

自我調(diào)試可以防止調(diào)試器成功附加到軟件中[26]。默認(rèn)情況下,每個(gè)進(jìn)程只能連接到一個(gè)調(diào)試器。軟件利用這通過(guò)運(yùn)行自身的副本并作為調(diào)試器附加到軟件本身來(lái)阻止另一個(gè)調(diào)試器附加到軟件中。它可以通過(guò)DbgUiDebugActiveProcess()或NtDebugActiveProcess()來(lái)實(shí)現(xiàn)。ABRATH B等人在文獻(xiàn)[27]中提出了一種基于自調(diào)試的反調(diào)試方法,該方法通過(guò)將完整的代碼片段從應(yīng)用程序遷移到調(diào)試器,讓代碼處于自調(diào)試狀態(tài)從而實(shí)現(xiàn)反調(diào)試保護(hù)。而完整的代碼片遷移使調(diào)試器和主應(yīng)用程序之間的耦合過(guò)程更加緊密,使該反調(diào)試過(guò)程更加難以破解。

2.3.2 鎖定策略

在鎖定策略中,軟件調(diào)用系統(tǒng)API來(lái)鎖定調(diào)試者的鼠標(biāo)、鍵盤或屏幕。一旦鎖定成功后,鎖定效果將一直持續(xù)到軟件進(jìn)程退出。

基于鎖定策略的反調(diào)試可以選擇通過(guò)BlockInput()來(lái)阻止鼠標(biāo)和鍵盤輸入直到調(diào)試退出、通過(guò)SwitchDesktop()選擇讓調(diào)試工具運(yùn)行在不同的活動(dòng)桌面來(lái)實(shí)現(xiàn)反調(diào)試[13],如圖10所示。CAIVANO D等人在文獻(xiàn)[28]中對(duì)勒索軟件進(jìn)行了具體分析,部分勒索軟件使用SwitchDesktop()來(lái)鎖定桌面,在實(shí)現(xiàn)勒索目的同時(shí)防止其自身被調(diào)試。

圖10 基于BlockInput實(shí)現(xiàn)反調(diào)試

2.3.3 調(diào)試器漏洞

和所有的軟件一樣,調(diào)試器也存在軟件漏洞,這些漏洞是特定調(diào)試器獨(dú)有的,難發(fā)現(xiàn)而易攻擊。可以通過(guò)攻擊調(diào)試器的軟件漏洞實(shí)現(xiàn)反調(diào)試,但找到調(diào)試器漏洞是實(shí)現(xiàn)這一反調(diào)試方式的難點(diǎn)。

OllyDbg1.1存在格式化字符串漏洞,可以使用OutputDebugString()提供一個(gè)%S字符串的參數(shù),讓OllyDbg崩潰[29]。同時(shí),也可以通過(guò)OutputDebugString()的返回值來(lái)檢測(cè)調(diào)試器是否存在。SoftICE中可以通過(guò)其發(fā)生int 1中斷時(shí)會(huì)產(chǎn)生一個(gè)特定異常信息EXCEPTION_SINGLE_STEP (0x80000004)的特點(diǎn)實(shí)現(xiàn)反調(diào)試[30],如圖11所示BRANCO RR等人在文獻(xiàn)[31]中對(duì)惡意軟件使用的防止逆向分析的技術(shù)進(jìn)行了總結(jié),其中對(duì)基于調(diào)試器漏洞的反調(diào)試技術(shù)做出了具體的分析。

圖11 基于OutputDebugString實(shí)現(xiàn)反調(diào)試

2.3.4 反調(diào)試技術(shù)分類總結(jié)

總結(jié)歸納本文提到的反調(diào)試技術(shù)分類,所用反調(diào)試技術(shù)的策略,反調(diào)試技術(shù)的具體實(shí)現(xiàn)方法,反調(diào)試技術(shù)的實(shí)施難度,對(duì)抗反調(diào)試技術(shù)的難度和反調(diào)試技術(shù)的普遍性,如表1所示(見下頁(yè))。

3 反調(diào)試技術(shù)的發(fā)展趨勢(shì)

對(duì)于已有的反調(diào)試技術(shù),針對(duì)不同的反調(diào)試技術(shù)有不同的對(duì)抗方法,且存在相關(guān)研究提出實(shí)現(xiàn)反調(diào)試破解技術(shù)的方法。文獻(xiàn)[32]從調(diào)試器輔助技術(shù)和代碼檢查及修補(bǔ)兩個(gè)方面陳述了對(duì)抗部分反調(diào)試技術(shù)的相關(guān)策略。文獻(xiàn)[33]提出了一個(gè)基于規(guī)則的反反調(diào)試系統(tǒng),該系統(tǒng)分析和跟蹤通用寄存器的值,以確定是否存在反調(diào)試指令,并根據(jù)分析內(nèi)容總結(jié)出反抗調(diào)試規(guī)則集,可以避免二進(jìn)制文件中的反調(diào)試技術(shù)。文獻(xiàn)[34]提出了一個(gè)針對(duì)環(huán)境進(jìn)行分析的反調(diào)試程序自動(dòng)檢測(cè)方法,該方法使用調(diào)試器和模擬器,通過(guò)使用模擬器提取應(yīng)用程序接口(API)上的跟蹤信息以及執(zhí)行指令,檢查并比較提取的指令來(lái)自動(dòng)檢測(cè)可疑的反調(diào)試程序,且該方式不依賴于某種反調(diào)試方法,能對(duì)大多數(shù)常用反調(diào)試技術(shù)能進(jìn)行有效檢測(cè)。文獻(xiàn)[35]提出了一個(gè)基于系統(tǒng)管理模式(System Management Mode,SMM)的調(diào)試框架,該調(diào)試框架相對(duì)現(xiàn)有的調(diào)試器更加“透明化”,可以實(shí)現(xiàn)不被反調(diào)試技術(shù)發(fā)現(xiàn)的調(diào)試功能。文獻(xiàn)[36]提出了一種對(duì)混淆的反調(diào)試技術(shù)進(jìn)行自動(dòng)靜態(tài)檢測(cè)的檢測(cè)引擎。

面對(duì)越來(lái)越多的檢測(cè)和破解反調(diào)試技術(shù)的方法,單純的反調(diào)試技術(shù)很難保障軟件的安全性。近年來(lái)提出了將反調(diào)試和其他主流軟件保護(hù)技術(shù)結(jié)合以實(shí)現(xiàn)綜合型軟件保護(hù)方案。

文獻(xiàn)[37]將反調(diào)試技術(shù)與代碼混淆、迷宮加密等技術(shù)融合,實(shí)現(xiàn)了一種防反轉(zhuǎn),防篡改和防破解效果好的迷宮型軟件保護(hù)系統(tǒng)。文獻(xiàn)[38]中描述的用于軟件保護(hù)參考架構(gòu)將反調(diào)試、數(shù)據(jù)混淆、白盒加密、代碼隱藏、代碼混淆和其他軟件相關(guān)技術(shù)組合,共同實(shí)現(xiàn)對(duì)軟件應(yīng)用程序的保護(hù)。文獻(xiàn)[39]提出了一種將反調(diào)試和反跟蹤、基于安全令牌的加密技術(shù)、PE文件調(diào)用過(guò)程保護(hù)結(jié)合的打包程序,用于實(shí)現(xiàn)對(duì)PE文件機(jī)密性的保護(hù),防止PE文件被逆向分析。文獻(xiàn)[40]介紹了嵌入式系統(tǒng)軟件的二進(jìn)制保護(hù)框架,該框架通過(guò)反調(diào)試和應(yīng)用加密、軟件防篡改等不同機(jī)制的結(jié)合來(lái)確保嵌入式系統(tǒng)軟件的完整性并阻礙逆向工程。

表1 反調(diào)試技術(shù)對(duì)比表

同時(shí),隨著軟件安全技術(shù)的進(jìn)一步發(fā)展,針對(duì)軟件保護(hù)的逆向工程技術(shù)的研究也會(huì)越發(fā)深入,軟件保護(hù)要想在對(duì)抗逆向工程的過(guò)程中搶占先機(jī),如何比逆向工具運(yùn)行在系統(tǒng)的更底層無(wú)疑是實(shí)現(xiàn)軟件保護(hù)的關(guān)鍵點(diǎn)之一。

針對(duì)傳統(tǒng)的被限制運(yùn)行于Ring 0或以上層的反調(diào)試技術(shù),文獻(xiàn)[41]提出了一種基于硬件虛擬化技術(shù)的反調(diào)試框架:虛擬機(jī)監(jiān)視器(Virtual Machine Monitor,VMM),它擁有比Ring 0更高的權(quán)限級(jí)別從而可以禁用斷點(diǎn)異常以及阻止應(yīng)用程序由調(diào)試器等其他應(yīng)用程序外部訪問(wèn)而實(shí)現(xiàn)更加可靠的反調(diào)試目的。文獻(xiàn)[42]參考文獻(xiàn)[41]提出的反調(diào)試框架實(shí)現(xiàn)了一套基于硬件虛擬化技術(shù)進(jìn)行反調(diào)試軟件保護(hù)的框架,在實(shí)現(xiàn)VMM的基礎(chǔ)上,它還利用硬件虛擬化技術(shù)為該框架設(shè)計(jì)了自隱藏模塊來(lái)實(shí)現(xiàn)更加隱蔽、可靠且對(duì)系統(tǒng)性能影響較小的基于反調(diào)試的軟件保護(hù)方法。文獻(xiàn)[43]將進(jìn)程級(jí)虛擬機(jī)與反調(diào)試技術(shù)相結(jié)合,在運(yùn)行時(shí)將受保護(hù)程序和反調(diào)試代碼轉(zhuǎn)換為虛擬指令,當(dāng)虛擬機(jī)中的反調(diào)試技術(shù)未檢測(cè)到程序被調(diào)試時(shí)從虛擬機(jī)中調(diào)度程序,同時(shí)該方法結(jié)合防篡改技術(shù)保護(hù)虛擬指令來(lái)實(shí)現(xiàn)軟件保護(hù)。

4 結(jié)論

本文詳細(xì)介紹了反調(diào)試技術(shù),敘述了反調(diào)試的定義,闡述了現(xiàn)有反調(diào)試技術(shù)的分類,并在軟件保護(hù)技術(shù)的基礎(chǔ)上展開了對(duì)反調(diào)試技術(shù)的研究。毫無(wú)疑問(wèn),單一的軟件保護(hù)技術(shù)已經(jīng)很難實(shí)現(xiàn)軟件保護(hù)的目的,而反調(diào)試和代碼混淆、軟件加殼、軟件防篡改、虛擬化等其他主流軟件保護(hù)技術(shù)相結(jié)合能夠提供更加可靠的軟件保護(hù)。同時(shí),反調(diào)試與其他主流軟件保護(hù)技術(shù)的結(jié)合也會(huì)改變現(xiàn)有的反調(diào)試乃至軟件保護(hù)的實(shí)現(xiàn)方法,促進(jìn)軟件產(chǎn)業(yè)健康發(fā)展。

猜你喜歡
進(jìn)程調(diào)試檢測(cè)
“不等式”檢測(cè)題
“一元一次不等式”檢測(cè)題
“一元一次不等式組”檢測(cè)題
債券市場(chǎng)對(duì)外開放的進(jìn)程與展望
基于航拍無(wú)人機(jī)的設(shè)計(jì)與調(diào)試
電子制作(2018年12期)2018-08-01 00:47:44
FOCAS功能在機(jī)床調(diào)試中的開發(fā)與應(yīng)用
無(wú)線通信中頻線路窄帶臨界調(diào)試法及其應(yīng)用
電子制作(2017年19期)2017-02-02 07:08:38
小波變換在PCB缺陷檢測(cè)中的應(yīng)用
調(diào)壓柜的調(diào)試與試運(yùn)行探討
社會(huì)進(jìn)程中的新聞學(xué)探尋
主站蜘蛛池模板: 日韩欧美成人高清在线观看| 青青草原国产精品啪啪视频| 另类综合视频| 欧美日本视频在线观看| 在线看片中文字幕| 日韩第八页| 成年人国产视频| 亚洲国模精品一区| 在线观看免费人成视频色快速| 精品国产Av电影无码久久久| 超碰色了色| 欧美激情网址| 夜夜操国产| 国产欧美日韩精品综合在线| 亚洲午夜国产精品无卡| 日本中文字幕久久网站| 精品久久国产综合精麻豆| 欧美www在线观看| 国产男女免费完整版视频| 97免费在线观看视频| 国产午夜人做人免费视频| 亚洲国产综合自在线另类| 在线观看视频99| 亚洲成a人片在线观看88| 国产精品成人观看视频国产| 狠狠色成人综合首页| 人人91人人澡人人妻人人爽 | 亚洲永久视频| 国产综合亚洲欧洲区精品无码| 无码专区国产精品一区| 亚洲天堂视频在线观看| 国产在线一区视频| 国产性猛交XXXX免费看| 中文字幕人成乱码熟女免费| 国产在线麻豆波多野结衣| 高清不卡毛片| 精品久久香蕉国产线看观看gif| 免费国产小视频在线观看| 亚洲欧美天堂网| 亚洲综合在线最大成人| 欧美激情视频在线观看一区| 色偷偷男人的天堂亚洲av| 91精品国产一区自在线拍| 国产亚洲精久久久久久无码AV| 国产成人av一区二区三区| 亚洲国产精品美女| 极品国产在线| 欧美日韩国产成人高清视频| 大陆国产精品视频| 国产精品55夜色66夜色| 日韩欧美亚洲国产成人综合| 999精品在线视频| 国产91丝袜在线播放动漫| 好紧太爽了视频免费无码| 91国内在线观看| 伊在人亞洲香蕉精品區| 国产91精品久久| 精品1区2区3区| 黄色不卡视频| 免费大黄网站在线观看| 精品少妇人妻无码久久| 九九免费观看全部免费视频| 国产99免费视频| 亚洲人成在线免费观看| 日韩欧美网址| 日韩中文欧美| 高清国产在线| 日本三级黄在线观看| 97人人做人人爽香蕉精品| 国产在线无码av完整版在线观看| 日本精品影院| 亚洲一区二区三区在线视频| 麻豆精选在线| 久久精品国产精品青草app| 丝袜亚洲综合| 色综合中文字幕| 国产成人三级| 在线免费看片a| 一本色道久久88综合日韩精品| 欧美三级不卡在线观看视频| 嫩草国产在线| 免费无码AV片在线观看中文|