我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_91久久青青青国产免费

您的位置:網(wǎng)站首頁 > CAD新聞

源代碼逆向分析過程中的語法分析

時(shí)間:2011-02-26 10:04:25 來源:

  語法分析是編譯過程的一個(gè)邏輯階段,傳統(tǒng)應(yīng)用中它的主要任務(wù)是在詞法分析的基礎(chǔ)上將單詞符號(hào)序列組合成各類語法短語,如“程序”、“語句”、“表達(dá)式”等。語句分析程序判斷源程序在結(jié)構(gòu)上是否正確,源程序的結(jié)構(gòu)由上下文無關(guān)文法描述。

  隨著軟件工程領(lǐng)域的不斷發(fā)展,對(duì)現(xiàn)有軟件系統(tǒng)進(jìn)行維護(hù)、重構(gòu)的需求大量增加,逆向工程作為一種軟件工程方法在市場(chǎng)需求下孕育而生,因此,對(duì)程序源代碼進(jìn)行逆向分析從中獲取關(guān)鍵信息成為逆向工程的基礎(chǔ),語法分析有了非傳統(tǒng)意義的運(yùn)用,成為軟件逆向工程中必不可少的一部分。文中語法分析模塊主要包括:命令行語句的定義、分類、編碼、識(shí)別、信息標(biāo)注及存儲(chǔ)結(jié)構(gòu)。

  1 語法分析在逆向分析中的應(yīng)用

  語法分析的解析對(duì)象是詞法分析的結(jié)果——經(jīng)過信息標(biāo)注的粗粒度單詞符號(hào)序列,其主要任務(wù)是基于詞法分析的輸出結(jié)果識(shí)別符合自定義規(guī)則的合法語法單位——命令行語句,并將這些命令行語句的信息利用編碼等方式進(jìn)行標(biāo)注,獲得含有信息標(biāo)注的命令行語句序列。

  1.1命令行語句的分類編碼

  依據(jù)Microsoft Visual Studio.NET 2003文檔,深入研究c#的語法規(guī)范及特點(diǎn),遵循C#語法定義的命令語句的原則——可單個(gè)執(zhí)行的命令,針對(duì)源代碼逆向分析獲取信息的需求,自定義了一套命令行語句規(guī)則,其分類編碼如圖l所示。

   

  圖1命令行語句的分類編碼

  1.2命令行語句的識(shí)別

  逆向分析的源代碼,來自不同的程序員,而每個(gè)程序員都擁有各自獨(dú)有的編碼風(fēng)格。為了簡(jiǎn)化命令行語句的識(shí)別及信息提取的過程,在分析識(shí)別前首先需要對(duì)源代碼進(jìn)行整形處理,將不同風(fēng)格的源代碼統(tǒng)一為便于分析識(shí)別的格式,避免在語句識(shí)別或信息提取過程中多樣化源代碼格式帶來的困擾。源代碼整形處理主要包括兩部分:

  (1)命令行語句劃分

  命令行語句劃分的主要任務(wù)是將不同編碼風(fēng)格的源代碼從命令行的角度統(tǒng)一化,設(shè)計(jì)一種統(tǒng)一的程序代碼行規(guī)則。在逆向分析過程中,源代碼是可運(yùn)行的,默認(rèn)為語法無誤,那么,對(duì)不要求檢查語法錯(cuò)誤的逆向分析來說,本文對(duì)命令行語句的劃分采用界限符的劃分方式。當(dāng)然沒有絕對(duì)的簡(jiǎn)單,運(yùn)用此方法必須要排除一些很特殊的情況,但是這些情況都是可以通過一些的前期工作來解決。

  (2)命令行語句行內(nèi)格式整理

  命令行語句行內(nèi)格式整理的主要任務(wù)是定義命令行內(nèi)單詞符號(hào)間的間距格式規(guī)范,并按照這樣的規(guī)范去掉命令行內(nèi)不必要的空格字符、制表字符等,以達(dá)到統(tǒng)一命令行內(nèi)的編碼格式。

  據(jù)統(tǒng)計(jì),需要進(jìn)行行內(nèi)格式整理的命令行語句中涉及到的單詞符號(hào)可分6類,分別為:關(guān)鍵字、標(biāo)識(shí)符、運(yùn)算符、常數(shù)、字符串、字符。需要逐個(gè)統(tǒng)計(jì)該6類單詞符號(hào)的相鄰情況,定義它們相鄰的間距格式,具體如下表l單詞符號(hào)間間距格式。矩陣中灰色表示兩者無相鄰情況,“O”表示兩類單詞符號(hào)間間距一個(gè)空格,“X”表示兩類單詞符號(hào)之間無空格間距。

  表1單詞符號(hào)間間距格式

   

  對(duì)于命令行語句的識(shí)別,分為三類:第一類,注釋語句、{語句}、語句、特殊指令語句,這一類語句類型的識(shí)別通過單詞符號(hào)內(nèi)部表示的類別信息完成;第二類,類型聲明語句、異常處理語句、訪問器語句、不安全代碼語句、控制語句、功能語句、外部文件引入語句,這一類命令語句的類型識(shí)別通過語句中固定的C#關(guān)鍵字判定識(shí)別;第三類,方法聲明語句、字段聲明語句、變量聲明語句、賦值語句、類方法調(diào)用語句,它們是一類特殊的命令語句,沒有固定的C#關(guān)鍵字作為識(shí)別標(biāo)識(shí),這一類語句類型通過它們自獨(dú)有的語句特征來識(shí)別。

  1.3命令行語句的信息標(biāo)注及信息結(jié)構(gòu)

  語法分析模塊的主要功能是按照自定義的命令行語句規(guī)則進(jìn)行命令行語句的劃分識(shí)別,最終以包含信息標(biāo)注的命令行語句序列的形式輸出,并以一種固定的結(jié)構(gòu)形式存儲(chǔ),方便信息檢索。本文涉及的命令行語句信息及其信息存儲(chǔ)結(jié)構(gòu)如表2所示。

  表2命令行語句信息結(jié)構(gòu)

   

  從表2可以知道,命令行語句信息結(jié)構(gòu)包含5部分內(nèi)容:命令行語句序號(hào),記錄命令行語句在命令行語句序列文件中的位置;命令行語句編碼,表標(biāo)注命令行語句的編碼信息;起始單詞序號(hào),標(biāo)注命令行語句的首單詞符號(hào)在細(xì)粒度單詞符號(hào)序列中的位置;終止單詞序號(hào),標(biāo)注命令行語句的尾單詞符號(hào)在細(xì)粒度單詞符號(hào)序列中的位置;語句塊結(jié)束語句序號(hào),針對(duì)命令行后面有語句塊的語句,標(biāo)注該命令行語句的語句塊結(jié)束位置。其中對(duì)命令行語句的內(nèi)容采用記錄命令行語句首尾單詞符號(hào)在細(xì)粒度單詞符號(hào)序列中的位置的方式,既方便回溯到命令行在源代碼流文件中的位置,又能減少文本的儲(chǔ)存量。并且記錄了命令行語句的語句塊結(jié)束位置,方便定位信息搜索范圍。

  2 結(jié)束語

  語法分析方法作為編譯系統(tǒng)中不可缺少的過程,對(duì)程序分析有著至關(guān)重要的作用。在深入分析、研究其工作原理的基礎(chǔ)上,將其運(yùn)用于軟件逆向分析的源代碼的解析過程,并詳細(xì)介紹了語法分析方法在該過程中的具體應(yīng)用以及該過程中涉及到的各類技術(shù)方法。隨著軟件工程的不斷發(fā)展,語法分析方法將隨著高級(jí)語言的發(fā)展應(yīng)用到更多的領(lǐng)域。