分析技術

看雪資料發表於2015-11-15

 

分析技術

 

  在進行軟體的破解、解密以及計算機病毒分析工作中,一個首要的問題是對軟體及病毒進行分析。這些軟體都是機器程式碼程式,對於它們分析必須使用靜態或動態除錯工具,分析跟蹤其彙編程式碼。

一、從軟體使用說明和操作中分析軟體

  欲破解一軟體,首先應該先用用這軟體,瞭解一下功能是否有限制,最好閱讀一下軟體的說明或手冊,特別是自己所關心的關鍵部分的使用說明,這樣也許能夠找點線索。

二、靜態反彙編

 所謂靜態分析即從反彙編出來的程式清單上分析,從提示資訊入手進行分析。目前,大多數軟體在設計時,都採用了人機對話方式。所謂人機對話,即在軟體執行過程中,需要由使用者選擇的地方,軟體即顯示相應的提示資訊,並等待使用者按鍵選擇。而在執行完某一段程式之後,便顯示一串提示資訊,以反映該段程式執行後的狀態,是正常執行,還是出現錯誤,或者提示使用者進行下一步工作的幫助資訊。為此,如果我們對靜態反彙編出來的程式清單進行閱讀,可瞭解軟體的程式設計思路,以便順利破解。 常用的靜態分析工具是W32DASM、IDA和HIEW等。

三、動態跟蹤分析

 雖然從靜態上可以瞭解程式的思路,但是並不可能真正瞭解地瞭解軟體的細節,如靜態分析找不出線索,就要動態分析程式,另外,碰到壓縮程式,靜態分析也無能為力了,只能動態分析了。所謂動態分析是利用SOFTICE或TRW2000一步一步地單步執行軟體。為什麼要對軟體進行動態分析呢?這主要是因為:

1、許多軟體在整體上完成的功能,一般要分解成若干模組來完成,而且後一模組在執行時,往往需要使用其前一模組處理的結果,這一結果我們把它叫中間結果。如果我們只對軟體本身進行靜態地分析,一般是很難分析出這些中間結果的。而只有透過跟蹤執行前一模組,才能看到這些結果。另外,在程式的執行過程中,往往會在某一地方出現許多分支和轉移,不同的分支和轉移往往需要不同的條件,而這些條件一般是由執行該分支之前的程式來產生的。如果想知道程式執行到該分支的地方時,去底走向哪一分支,不進行動態地跟蹤和分析是不得而知的。

2、有許多軟體在執行時,其最初執行的一段程式往往需要對該軟體的後面各個模組進行一些初始始化工作,而沒有依賴系統的重定位。

3、有許多加密程式為了阻止非法跟蹤和閱讀,對執行程式碼的大部分內容進行了加密變換,而只有很短的一段程式是明文。加密程式執行時,採用了逐塊解密,逐塊執行和方法,首先執行最初的一段明文程式,該程式在執行過程中,不僅要完成阻止跟蹤的任務,而且還要負責對下一塊密碼進行解密。顯然僅對該軟體的密碼部分進行反彙編,不對該軟體動態跟蹤分析,是根本不可能進行解密的。

由於上述原因,在對軟體靜態分析不行的條件下,就要進行動態分析了。哪麼如何有效地進行動態跟蹤分析呢?一般來說有如下幾點:

1、對軟體進行粗跟蹤
所謂粗跟蹤,即在跟蹤時要大塊大塊地跟蹤,也就是說每次遇到呼叫CALL指令、重複操作指令REP.迴圈操作LOOP指令以及中斷呼叫INT指令等,一般不要跟蹤進去,而是根據執行結果分析該段程式的功能。

2、對關鍵部分進行細跟蹤

 對軟體進行了一定程度的粗跟蹤之後,便可以獲取軟體中我們所關心的模組或程式段,這樣就可以針對性地對該模組進行具體而詳細地跟蹤分析。一般情況下,對關鍵程式碼的跟蹤可能要反覆進行若干次才能讀懂該程式,每次要把比較關鍵的中間結果或指令地址記錄下來,這樣會對下一次分析有很大的幫助。軟體分析是一種比較複雜和艱苦的工作,上面的幾點分析方法,只是提供了一種基本的分析方法。要積累軟體分析的經驗需要在實踐中不斷地探索和總結。

相關文章