TW202008152A - 上下文相關之資料結構逆向工程系統及其方法 - Google Patents
上下文相關之資料結構逆向工程系統及其方法 Download PDFInfo
- Publication number
- TW202008152A TW202008152A TW107127100A TW107127100A TW202008152A TW 202008152 A TW202008152 A TW 202008152A TW 107127100 A TW107127100 A TW 107127100A TW 107127100 A TW107127100 A TW 107127100A TW 202008152 A TW202008152 A TW 202008152A
- Authority
- TW
- Taiwan
- Prior art keywords
- variable
- program
- type
- under test
- command
- Prior art date
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本發明揭露一種上下文相關之資料結構逆向工程系統及其方法。該方法包括:追蹤程式之程式執行追蹤資訊;依據程式執行追蹤資訊與程式之上下文關係識別出指令之變數;依據指令與上下文關係對變數執行類型解析、類型傳遞、基本指標分析或堆積追蹤以還原出指令之變數類型與語法;判斷堆疊、暫存器、直接定址或堆積之組合語言以對應還原出堆疊變數、暫存器變數、全域變數或堆積變數,進而分析指令之記憶體存取模式以還原出多重資料結構;以及藉由呼叫上下文關係識別出在不同執行條件下程式之多重型態資料欄位被解析之變數類型。
Description
本發明係關於一種資料結構逆向工程技術,特別是指一種上下文相關之資料結構逆向工程系統及其方法。
在程式或資料結構之逆向工程領域中,例如資訊安全為每個企業或組織中最不可或缺的需求,不論產業或學界致力於更深入的惡意程式分析技巧。在進行惡意程式之反組譯分析的流程中,將程式中所定義的資料結構與變數的類型給還原出來是非常重要的,特別是在沒有原始碼的情況下。
再者,在程式或資料結構之逆向工程系統或方法中,現有技術可藉由重組電腦的最小單位(如位元),將資料結構還原出來。或者,藉由使用組合語言取得列存資料結構與關聯資料叢集兩者,並辨識出兩者的不同,再藉由兩者的資料進行資料更新與移除不一致資料。然而,前述現有技術無法利用上下文關係還原程式之變數類型與語法、資料結構等資訊。
因此,如何解決上述現有技術之缺點,實已成為本領域技術人員之一大課題。
本發明提供一種上下文相關之資料結構逆向工程系統及其方法,係可利用上下文關係還原程式之變數類型與語法、資料結構等資訊。
本發明上下文相關之資料結構逆向工程系統,包括:一程式執行追蹤模組,係追蹤待測程式於執行時之程式執行追蹤資訊;一變數識別模組,係依據程式執行追蹤模組之程式執行追蹤資訊與待測程式之上下文關係識別出待測程式之指令之變數;一變數類型與語法還原模組,係依據來自變數識別模組之待測程式之指令與待測程式之上下文關係,對指令之變數執行類型解析、類型傳遞、基本指標分析及堆積追蹤之至少一者,以還原出指令之變數類型與語法;一資料結構還原模組,係判斷指令之堆疊、暫存器、直接定址或堆積之組合語言以對應還原出指令之堆疊變數、暫存器變數、全域變數或堆積變數,進而分析指令之記憶體存取模式以還原出待測程式之多重資料結構;以及一呼叫上下文萃取模組,係藉由待測程式於執行時之呼叫上下文關係識別出在不同執行條件下,待測程式之多重型態資料欄位被解析之變數類型。
本發明上下文相關之資料結構逆向工程方法,包括:追蹤待測程式於執行時之程式執行追蹤資訊;依據程式執行追蹤資訊與待測程式之上下文關係識別出待測程式之指 令之變數;依據待測程式之指令與待測程式之上下文關係對指令之變數執行類型解析、類型傳遞、基本指標分析及堆積追蹤之至少一者,以還原出指令之變數類型與語法;判斷指令之堆疊、暫存器、直接定址或堆積之組合語言以對應還原出指令之堆疊變數、暫存器變數、全域變數或堆積變數,進而分析指令之記憶體存取模式以還原出待測程式之多重資料結構;以及藉由待測程式於執行時之呼叫上下文關係識別出在不同執行條件下,待測程式之多重型態資料欄位被解析之變數類型。
為讓本發明上述特徵與優點能更明顯易懂,下文特舉實施例,並配合所附圖式作詳細說明。在以下描述內容中將部分闡述本發明之額外特徵及優點,且此等特徵及優點將部分自所述描述內容顯而易見,或可藉由對本發明之實踐習得。本發明之特徵及優點借助於在申請專利範圍中特別指出的元件及組合來認識到並達到。應理解,前文一般描述與以下詳細描述兩者均僅為例示性及解釋性的,且不欲約束本發明所主張之範圍。
1‧‧‧資料結構逆向工程系統
10‧‧‧程式執行追蹤模組
20‧‧‧類型接收資訊模組
30‧‧‧變數識別模組
40‧‧‧變數類型與語法還原模組
50‧‧‧資料結構還原模組
60‧‧‧呼叫上下文萃取模組
70‧‧‧資料庫
S11至S23‧‧‧步驟
第1圖為本發明上下文相關之資料結構逆向工程系統之示意架構圖;以及第2圖為本發明上下文相關之資料結構逆向工程方法之示意流程圖。
以下藉由特定的具體實施形態說明本發明之實施方 式,熟悉此技術之人士可由本說明書所揭示之內容輕易地了解本發明之其他優點與功效,亦可藉由其他不同的具體實施形態加以施行或應用。
本發明係揭露一種上下文相關之資料結構逆向工程系統及其方法,利用呼叫上下文(Calling Context)之資訊,將程式的多重型態資料欄位依據不同的程式行為進行區分,且被解析出來的變數類型皆具有呼叫上下文之資訊。如果變數會依據不同的程式行為而改變類型,則對應到的程式碼區段必定不同。因此,藉由執行待測程式時期之呼叫上下文關係,能夠正確指出不同行為下多重型態資料欄位會被解析成何種變數類型,以識別出配置在資料結構中變數類型、大小與語意都可能改變的多重型態資料欄位(Multi-represented Data Field)。
第1圖為本發明上下文相關之資料結構逆向工程系統1之示意架構圖。如圖所示,資料結構逆向工程系統1可包括互相傳遞程式之指令、變數、資料等之一程式執行追蹤(Progtam Execution Trace)模組10、一類型接收資訊(Type Sink Information)模組20、一變數識別(Variable Identification)模組30、一變數類型與語法還原(Variable Types and Semantics Reconstruction)模組40、一資料結構還原(Data Structure Reconstruction)模組50、一呼叫上下文萃取(Calling Context Extraction)模組60、一資料庫70等,以使資料結構逆向工程系統1能夠正確識別出待測程式在不同執行條件及行為下,多重型態資料欄位會被解析 成何種變數類型。同時,資料結構逆向工程系統1可用於具有處理器、記憶體、作業系統之電子裝置(圖未示)中,且電子裝置可例如為電腦、伺服器、智慧手機等。但是,本發明不以此為限。
第2圖為本發明上下文相關之資料結構逆向工程方法之示意流程圖,請一併參考上述第1圖。
如第1圖與第2圖所示,呼叫上下文萃取模組60可於程式執行追蹤模組10、類型接收資訊模組20、變數識別模組30、變數類型與語法還原模組40、資料結構還原模組50所執行之每個步驟中,皆利用呼叫上下文進行相關資訊之萃取。
如第1圖與第2圖之步驟S11所示,程式執行追蹤模組10可追蹤待測程式於執行時之程式執行追蹤資訊,且程式執行追蹤資訊可包括第2圖之步驟S12所示[1]指令追蹤記錄、[2]記憶體位址與記憶體存取指令取消引用值的記錄(簡稱記憶體取消記錄)、以及[3]堆疊指針暫存器的更新變動記錄(簡稱堆疊指針記錄)。
如第1圖與第2圖之步驟S13所示,類型接收資訊模組20可接收或取得關於待測程式之資料類型接收資訊,包括應用程式介面(Application Programming.Interface;API)的規範及其存放於運行系統中的記憶體位址,例如第2圖之步驟S14所示關於待測程式之函數庫(Library Functions)資訊與系統呼叫(System Calls)資訊,且應用程式介面的規範包括資料類型與變數語法資訊,可用於還原資料結構的 重構。
如第1圖與第2圖之步驟S15所示,變數識別模組30可接收來自程式執行追蹤模組10之程式執行追蹤資訊(見步驟S12)與來自類型接收資訊模組20之資料類型接收資訊(見步驟S14),並引入待測程式於執行時之上下文關係作為第2圖之步驟S16所示變數識別之依據,以據此識別出待測程式之指令的變數。
在第2圖之步驟S15中,變數識別模組30可將輸入之程式執行追蹤資訊中之指令追蹤記錄,一次一個地依次分析程式執行追蹤資訊之指令。
在第2圖之步驟S16中,變數識別模組30先識別待測程式之每個指令要存取的變數,並利用待測程式於執行時之上下文關係的資訊萃取,對於可能重覆使用記憶體位址的變數進行識別。例如,為了表示特定的堆疊變數,變數識別模組30可使用堆疊框架(Stack Frame)之功能對所使用的記憶體位址進行命名,故即使變數在堆疊空間(Stack Space)中具有相同的位址,也可以唯一地識別不同功能的堆疊變數。
變數識別模組30可將待測程式之變數標識符指定為識別每個指令訪問之變數,並將變數唯一地解析為其目標程序所屬之資料結構。變數可能儲存在暫存器(Register)、堆疊(Stack)、堆積(Heap)或全域空間(Global)之記憶體位址中,故為了區分不同變數,變數識別模組30將不同變數分為[1]暫存器變數(RegVar)、[2]堆疊變數(StackVar)、[3]堆 積變數(HeapVar)、[4]全域變數(GlobalVar)等類型,並使用相應方式對該些變數進行識別。
[1]暫存器變數:表示儲存在通用暫存器(如eax、ecx)中的變數,且變數識別模組30可以通過對指令的暫存器行為解碼來識別暫存器變數。
[2]堆疊變數:表示儲存在堆疊空間中的變數,如函數區域變數。為了識別堆疊變數,變數識別模組30會區分不同功能的變數與相同功能的變數的作用,且堆疊暫存器之記憶體區間會成為被調用函數的區域記憶體區間。變數識別模組30給定執行追踪的堆疊指標記錄,並以標識符號檢查變數是否位於特定區域之記憶體中作為堆疊變數。同時,變數識別模組30將調用堆疊靜態地模擬,使得標識符號具有識別堆疊變數所屬的功能。由於函數的區域變數通常使用對所屬堆疊基底的相應偏移來引用,故變數識別模組30可使用偏移來識別函數的每個唯一變數。
[3]堆積變數:表示儲存在堆積空間中的變數。當變數類型與語法還原模組40追蹤堆積變數在記憶體之配置時,可對分配器與解除分配器的指令調用行為,並從給定的記憶體解除引用日誌中提取(拆分)分配的堆積位址,且分配器與解除分配器的調用配對可用以標識堆積變數的生存期。因此,變數識別模組30可以區分重覆使用相同堆積空間的不同變數,且所識別的堆積位址與堆積變數的生命週期都被儲存到資料庫70中,並由資料庫70回饋給予後續分析的變數標識符。
[4]全域變數:表示儲存在全域空間中的變數。變數識別模組30可透過反參考(dereferencing)固定記憶體位址來存取全域變數,並將作為由指令反參考的資料區間位址的直接數值識別為全域變數。基於效能考量,標識符直接將未分類為前三個類型(即暫存器變數、堆疊變數、堆積變數)的變數視為全域變數。
舉例而言,針對第2圖之步驟S16關於變數識別之程式例子,變數識別模組30可將程式之變數標識符指定為識別每個指令訪問的變數,並對下列每個指令進行變數識別。
push eax mov ecx, 1 add ecx,eax pop eax
關於類型解析、類型傳遞、基本指標分析、堆積追蹤之程式例子如下:
[1]暫存器變數:
mov ecx,eax;前述ecx與eax皆為暫存器變數。
[2]堆疊變數:
push eax;表示呼叫堆疊存入資料。
pop eax;表示呼叫堆疊取出資料。
[3]堆積變數:
call malloc;表示呼叫分配器(即堆積分配器)。
call free;表示呼叫解除分配器(即堆積解除分配器)。
[4]全域變數:
mov ecx,i;前述i表示全域變數。
如第1圖與第2圖之步驟S17所示,變數類型與語法還原模組40接收來自變數識別模組30(步驟26)之變數識別之資料,利用程式執行追蹤資訊與待測程式於執行時之上下文關係的資訊識別出不同的指令以進行指令分派。
變數類型與語法還原模組40可依據來自變數識別模組30之待測程式之指令與待測程式之上下文關係對指令之變數進行類型解析、類型傳遞、基本指標分析及堆積追蹤之至少一者,以還原出指令之變數類型與語法。
如第1圖與第2圖之步驟S18所示,變數類型與語法還原模組40可依據所分派之指令的指令類型判斷是否呼叫分配器,以將指令分派到第2圖之步驟S19中對應的指令處理程序。若否(無需呼叫分配器),即變數的記憶體之配置未調用堆積的配置API(應用程式介面),表示該變數為非堆積變數,則變數類型與語法還原模組40執行步驟S19之類型解析(Type Reslover)、類型傳遞(Type Propagator)、基本指標分析(Base Pointer Analyzer)。反之,若是(需呼叫分配器),即變數的記憶體之配置有調用堆積的配置API(應用程式介面),表示該變數為堆積變數,則變數類型與語法還原模組40執行步驟S19之堆積追蹤(Heap Tracker)。
[1]類型解析:變數類型與語法還原模組40可將資料類型接收資訊分為系統調用規範、公用API(應用程式介面)定義、類型顯示指令等三類。系統調用規範與公共API(應 用程式介面)定義是系統的輸入,如類型接收包括系統API(應用程式介面)或公用API(應用程式介面)函數,則使用相關的應用程式介面的規範來重構執行功能的變數資料類型與語法。類型顯示指令可指示操作變數的類型,如浮點指令(FADD、FLD、FSTP等),表示所操作變數是一個浮點變數。間接暫存器的存取指令,如“mov[eax],ebx”,表示目標操作變數中的值是一個指針。為了區分不同行為的多資料欄位,變數類型與語法還原模組40可將解析的類型或語義資訊與藉由呼叫上下文進行綁定。
[2]類型傳遞:變數類型與語法還原模組40可利用在資料流中進行傳播的已解析資訊進行變數的識別,因為對相關的變數進行算術或分配操作時,表示相關的變數共享相同的資料類型與語義。
[3]基本指標分析:變數類型與語法還原模組40可對變數的基底位址進行分析與識別,且每個變數都有一個基底位址來指示變數的訪問方式,該些信息可以供重構資料結構的佈局。
[4]堆積追蹤:變數類型與語法還原模組40對分配器與解除分配器的調用配對可以標識堆積變數的生存期,據此區分重覆使用相同堆積空間的不同變數。同時,變數類型與語法還原模組40將所識別的堆積位址與堆積變數的生命週期儲存到資料庫70中,並透過資料庫70回饋給予後續分析的變數標識符。
變數類型與語法還原模組40之指令處理程序可構建 或更新在資料庫70中已解析之資料結構,且變數類型與語法還原模組40可將資料庫70中已經解決的資訊進一步回饋至指令處理程序以供後續的分析,並從資料庫70中的資訊產生主體程序的資料結構規範。
舉例而言,針對第2圖之步驟S19關於指令處理程序之程式例子,變數類型與語法還原模組40可對待測程式進行類型解析、類型傳遞、基本指標分析、堆積追蹤。
[1]類型解析:
fadd st(n),st;前述fadd指令代表其操作為浮點運算。
[2]類型傳遞:
mov cx, ax add cx, 1
上述指令cx之數值可進行加1動作,表示cx所指向的變數為integer(數字類型)。
stringtext db ‘stringtext’ pop eax mov eax, stringtext
上述指令將全域字串賦予eax,表示eax所指向的變
數為字串型態。
[3]基本指標分析:
mov al,[ebx]
上述暫存器al為8位元(bits)大小,[ebx]變數值可賦予al,表示[ebx]變數可能為一個8位元大小的char變數型態。
[4]堆積追蹤:
mov eax,8000 call malloc mov [array_pointer], eax push eax call free pop eax ret
上述call malloc為呼叫分配器(即堆疊分配器),call free為呼叫解除分配器(即堆疊解除分配器),在程式中為成對出現。
如第1圖與第2圖之步驟S20至步驟S21所示,資料結構還原模組50可分析指令之記憶體存取模式以推導出資料之依賴關係,並找出分別儲存在堆疊、暫存器、全域空間或堆積之記憶體位址中的堆疊變數、暫存器變數、全域變數或堆積變數等變數。同時,資料結構還原模組50可判斷記憶體之相對位置以取得資料結構的輪廓,再藉由判斷組合語言以還原資料結構。
例如,在第2圖之步驟S20中,資料結構還原模組50可藉由判斷操作指令之堆疊之組合語言還原出儲存在堆疊中的變數(堆疊變數),藉由判斷操作指令之暫存器之組合語言還原出儲存在暫存器中的變數(暫存器變數),並藉由判斷指令之直接定址之組合語言還原出儲存在全域空間中的變數(全域變數)。在第2圖之步驟S21中,資料結構還 原模組50可藉由判斷操作指令之堆積之組合語言還原出儲存在堆積中的變數(堆積變數)。
如第1圖與第2圖之步驟S22中,資料結構還原模組50可分析指令之記憶體存取模式以推導出指令之資料之依賴關係,進而自動地還原待測程式之多重資料結構。
如第1圖與第2圖之步驟S23中,當一個指令或變數進行一次追蹤後,自步驟S22返回變數識別模組30之變數識別程序,由變數識別模組30判斷是否已完成指令追蹤。若是(已完成指令追蹤),則結束指令追蹤。若否(未完成指令追蹤或多重資料結構之變數存在尚未識別的變數),需再進一步向下追蹤,則再次執行步驟S15至步驟S23,直到完成指令追蹤。
舉例而言,針對第2圖之步驟S20至S21關於還原資料結構之程式例子,資料結構還原模組50可利用變數之位元組大小進行判別。
例如,變數之位元組為1位元組(byte),則變數之型態可能為char;而變數之位元組為4位元組(byte),則變數之型態可能為int。
呼叫上下文萃取模組60可利用執行追蹤中的確定性位址識別資料類型與語法,並藉由待測程式於執行時之呼叫上下文關係識別出在不同執行條件下,待測程式之多重型態資料欄位被解析之變數類型。當調用待測程式之上下文並綁定到每個已解析之變數時,呼叫上下文萃取模組60可將作為多資料欄位的變數保存多於一組調用上下文、資 料類型與語法,每個集合都可通過調用上下文綁定來唯一標識,以區分多資料欄位的變數。
舉例而言,針對第2圖關於呼叫上下文萃取之程式例子,如下所示。
mov eax,[esi+8] push offset Mode push eax lea ecx, [sep+8Ch+File] push ecx call _fopen_s
由上述指令藉由上下文關係,可以由最後的指令call_fopen_s得知這是一個_fopen_s API的呼叫進行開啟檔案的行為。_fopen_s API需輸入(1)File handle、Filename、Mode等三個參數,依據API呼叫是使用堆疊的做法,可以得知第二個進行push的參數是檔案名稱,所以追朔第二次進行push指令得知是將eax的參數放入堆疊,再向上追朔eax參數可得知是其位址之位置是[esi+8],因此可以得知[esi+8]之位址所指的參數是開檔的檔名,而其型態會是字串。
綜上,本發明上下文相關之資料結構逆向工程系統及其方法可具有下列特色、優點或技術功效:
一、本發明藉由記錄待測程式執行待測程式時的三種資料,包括[1]指令追蹤記錄、[2]記憶體位址與記憶體存取指令取消引用值的記錄(簡稱記憶體取消記錄)、[3]堆疊指 針暫存器的更新變動記錄(簡稱堆疊指針記錄),共同組成可用於還原資料結構重構的資訊。
二、本發明引入待測程式於執行時之上下文關係作為變數識別的依據,以識別可能重覆使用記憶體位址的變數。
三、本發明藉由將解析的類型或語義資訊與藉由呼叫上下文進行綁定,以區分不同行為的多資料欄位。
四、本發明利用在資料流中進行傳播的已解析資訊進行變數的識別。
五、本發明利用分配器與解除分配器的調用配對可用以標識堆積變數的生存期,以區分重覆使用相同堆積空間的不同變數。
六、本發明經判斷記憶體之相對位置取得資料結構的輪廓,再藉由判斷組合語言以還原資料結構。
七、本發明之呼叫上下文萃取模組可藉由執行待測程式時期之呼叫上下文關係,正確指出或識別出在不同執行條件或行為下,待測程式之多重型態資料欄位會被解析成何種變數類型。
上述實施形態僅例示性說明本發明之原理、特點及其功效,並非用以限制本發明之可實施範疇,任何熟習此項技藝之人士均可在不違背本發明之精神及範疇下,對上述實施形態進行修飾與改變。任何運用本發明所揭示內容而完成之等效改變及修飾,均仍應為申請專利範圍所涵蓋。因此,本發明之權利保護範圍,應如申請專利範圍所列。
1‧‧‧資料結構逆向工程系統
10‧‧‧程式執行追蹤模組
20‧‧‧類型接收資訊模組
30‧‧‧變數識別模組
40‧‧‧變數類型與語法還原模組
50‧‧‧資料結構還原模組
60‧‧‧呼叫上下文萃取模組
70‧‧‧資料庫
Claims (20)
- 一種上下文相關之資料結構逆向工程系統,包括:一程式執行追蹤模組,係追蹤待測程式於執行時之程式執行追蹤資訊;一變數識別模組,係依據該程式執行追蹤模組之程式執行追蹤資訊與該待測程式之上下文關係識別出該待測程式之指令之變數;一變數類型與語法還原模組,係依據來自該變數識別模組之該待測程式之指令與該待測程式之上下文關係,對該指令之變數執行類型解析、類型傳遞、基本指標分析及堆積追蹤之至少一者,以還原出該指令之變數類型與語法;一資料結構還原模組,係判斷該指令之堆疊、暫存器、直接定址或堆積之組合語言以對應還原出該指令之堆疊變數、暫存器變數、全域變數或堆積變數,進而分析該指令之記憶體存取模式以還原出該待測程式之多重資料結構;以及一呼叫上下文萃取模組,係藉由該待測程式於執行時之呼叫上下文關係識別出在不同執行條件下,該待測程式之多重型態資料欄位被解析之變數類型。
- 如申請專利範圍第1項所述之系統,其中,該程式執行追蹤資訊係包括指令追蹤記錄、記憶體位址與記憶體存取指令取消引用值的記錄、以及堆疊指針暫存器的更新變動記錄。
- 如申請專利範圍第1項所述之系統,更包括一類型接收資訊模組,係取得關於該待測程式之資料類型接收資訊,且該資料類型接收資訊包括關於該待測程式之函數庫資訊與系統呼叫資訊。
- 如申請專利範圍第1項所述之系統,其中,該變數識別模組更將該程式執行追蹤資訊中之指令追蹤記錄,一次一個地依次分析該程式執行追蹤資訊之指令。
- 如申請專利範圍第1項所述之系統,其中,該變數識別模組更識別該待測程式之每個指令的變數,並利用該待測程式之上下文關係的資訊萃取對於可能重覆使用記憶體位址之變數進行識別,且該變數識別模組使用堆疊框架之功能對該記憶體位址進行命名以唯一地識別不同功能的堆疊變數。
- 如申請專利範圍第1項所述之系統,其中,該變數識別模組更將該待測程式之變數標識符指定為識別每個指令訪問之變數,並將該變數唯一地解析為該變數之目標程序所屬之資料結構。
- 如申請專利範圍第1項所述之系統,其中,該變數類型與語法還原模組更接收該變數識別模組之變數識別之資料,並利用該程式執行追蹤資訊與該待測程式於執行時之上下文關係識別出不同的指令以進行指令分派。
- 如申請專利範圍第1項所述之系統,其中,該變數類型與語法還原模組更依據所分派之指令的指令類型判 斷是否需呼叫分配器,若無需呼叫該分配器,則該變數類型與語法還原模組執行該類型解析、類型傳遞及基本指標分析,反之若需呼叫該分配器,則該變數類型與語法還原模組執行該堆積追蹤。
- 如申請專利範圍第1項所述之系統,更包括一資料庫,且該變數類型與語法還原模組構建或更新在該資料庫中已解析之資料結構,並從該資料庫中的資訊產生主體程序的資料結構規範。
- 如申請專利範圍第1項所述之系統,其中,當調用該待測程式之上下文並綁定到每個已解析之變數時,該呼叫上下文萃取模組將作為多資料欄位的變數保存多於一組調用上下文、資料類型與語法,再將該待測程式之每個集合通過調用上下文綁定來唯一標識以區分多資料欄位的變數。
- 一種上下文相關之資料結構逆向工程方法,包括:追蹤待測程式於執行時之程式執行追蹤資訊;依據該程式執行追蹤資訊與該待測程式之上下文關係識別出該待測程式之指令之變數;依據該待測程式之指令與該待測程式之上下文關係對該指令之變數執行類型解析、類型傳遞、基本指標分析及堆積追蹤之至少一者,以還原出該指令之變數類型與語法;判斷該指令之堆疊、暫存器、直接定址或堆積之組合語言以對應還原出該指令之堆疊變數、暫存器變 數、全域變數或堆積變數,進而分析該指令之記憶體存取模式以還原出該待測程式之多重資料結構;以及藉由該待測程式於執行時之呼叫上下文關係識別出在不同執行條件下,該待測程式之多重型態資料欄位被解析之變數類型。
- 如申請專利範圍第11項所述之方法,其中,該程式執行追蹤資訊係包括指令追蹤記錄、記憶體位址與記憶體存取指令取消引用值的記錄、以及堆疊指針暫存器的更新變動記錄。
- 如申請專利範圍第11項所述之方法,更包括取得關於該待測程式之資料類型接收資訊,且該資料類型接收資訊包括關於該待測程式之函數庫資訊與系統呼叫資訊。
- 如申請專利範圍第11項所述之方法,更包括將該程式執行追蹤資訊中之指令追蹤記錄,一次一個地依次分析該程式執行追蹤資訊之指令。
- 如申請專利範圍第11項所述之方法,更包括識別該待測程式之每個指令的變數,並利用該待測程式之上下文關係的資訊萃取對於可能重覆使用記憶體位址之變數進行識別,且使用堆疊框架之功能對該記憶體位址進行命名以唯一地識別不同功能的堆疊變數。
- 如申請專利範圍第11項所述之方法,更包括將該待測程式之變數標識符指定為識別每個指令訪問之變數,並將該變數唯一地解析為該變數之目標程序所屬之資 料結構。
- 如申請專利範圍第11項所述之方法,更包括接收該變數識別之資料,並利用該程式執行追蹤資訊與該待測程式於執行時之上下文關係識別出不同的指令以進行指令分派。
- 如申請專利範圍第11項所述之方法,更包括依據所分派之指令的指令類型判斷是否需呼叫分配器,若無需呼叫該分配器,則執行該類型解析、類型傳遞及基本指標分析,反之若需呼叫該分配器,則執行該堆積追蹤。
- 如申請專利範圍第11項所述之方法,更包括構建或更新在資料庫中已解析之資料結構,並從該資料庫中的資訊產生主體程序的資料結構規範。
- 如申請專利範圍第11項所述之方法,更包括當調用該待測程式之上下文並綁定到每個已解析之變數時,將作為多資料欄位的變數保存多於一組調用上下文、資料類型與語法,再將該待測程式之每個集合通過調用上下文綁定來唯一標識以區分多資料欄位的變數。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW107127100A TWI661355B (zh) | 2018-08-03 | 2018-08-03 | 上下文相關之資料結構逆向工程系統及其方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW107127100A TWI661355B (zh) | 2018-08-03 | 2018-08-03 | 上下文相關之資料結構逆向工程系統及其方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
TWI661355B TWI661355B (zh) | 2019-06-01 |
TW202008152A true TW202008152A (zh) | 2020-02-16 |
Family
ID=67764066
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW107127100A TWI661355B (zh) | 2018-08-03 | 2018-08-03 | 上下文相關之資料結構逆向工程系統及其方法 |
Country Status (1)
Country | Link |
---|---|
TW (1) | TWI661355B (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6061513A (en) * | 1997-08-18 | 2000-05-09 | Scandura; Joseph M. | Automated methods for constructing language specific systems for reverse engineering source code into abstract syntax trees with attributes in a form that can more easily be displayed, understood and/or modified |
TW475151B (en) * | 1999-12-15 | 2002-02-01 | Inventec Corp | Interpreting method of AML interpreter |
US7051322B2 (en) * | 2002-12-06 | 2006-05-23 | @Stake, Inc. | Software analysis framework |
US7747942B2 (en) * | 2005-12-20 | 2010-06-29 | American Express Travel Related Services Company, Inc. | System and method for obtaining a markup language template through reversing engineering |
CN104391706A (zh) * | 2014-12-02 | 2015-03-04 | 南京大学 | 一种基于逆向工程的模型库构造方法 |
TWI611349B (zh) * | 2015-12-11 | 2018-01-11 | 財團法人資訊工業策進會 | 檢測系統及其方法 |
-
2018
- 2018-08-03 TW TW107127100A patent/TWI661355B/zh active
Also Published As
Publication number | Publication date |
---|---|
TWI661355B (zh) | 2019-06-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Lin et al. | Automated forensic analysis of mobile applications on Android devices | |
US10394694B2 (en) | Unexplored branch search in hybrid fuzz testing of software binaries | |
US8578339B2 (en) | Automatically adding bytecode to a software application to determine database access information | |
US20180260312A1 (en) | Test selection for application commit | |
CN112015491B (zh) | 实现函数跳转的方法、装置及计算机存储介质 | |
US10664383B2 (en) | Automated software program repair of similar code snippets | |
US20080313208A1 (en) | Apparatus, system, and method for automated context-sensitive message organization | |
CN109783346B (zh) | 基于关键字驱动的自动化测试方法、装置及终端设备 | |
US10990515B2 (en) | Automated unit testing in a mainframe environment | |
Kirbas et al. | The relationship between evolutionary coupling and defects in large industrial software | |
US20120054727A1 (en) | System and method for updating hard-coded dependencies | |
CN101853200A (zh) | 一种高效动态软件漏洞挖掘方法 | |
US20200143061A1 (en) | Method and apparatus for tracking location of input data that causes binary vulnerability | |
US7908596B2 (en) | Automatic inspection of compiled code | |
CN111475150B (zh) | 一种跨语言绑定方法、装置、设备及存储介质 | |
CN115705250A (zh) | 监测堆栈使用量以优化程序 | |
CN108469997B (zh) | 一种基于动态特征的自定义堆管理函数的自动识别方法 | |
CN111240728A (zh) | 应用程序更新方法、装置、设备和存储介质 | |
CN115795489B (zh) | 一种基于硬件级进程跟踪的软件漏洞静态分析方法及装置 | |
CN114816772B (zh) | 基于兼容层运行的应用的排错方法、排错系统及计算设备 | |
US20130152053A1 (en) | Computer memory access monitoring and error checking | |
TW202008152A (zh) | 上下文相關之資料結構逆向工程系統及其方法 | |
CN114443418A (zh) | 一种基于硬件虚拟化的riscv内存溢出漏洞检测方法及装置 | |
CN114780409A (zh) | 基于程序运行进程的断点设置方法、电子设备和存储介质 | |
US20120144371A1 (en) | Using exception information |