如何有效地進行動態跟蹤分析

2021-05-12 19:47:48 字數 1566 閱讀 9186

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

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

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

二、靜態反彙編

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

三、動態跟蹤分析

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

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

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

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

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

1、對軟體進行粗跟蹤

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

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

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

如何有效地報告Bug?

simon首先列舉了一系列拙劣bug報告的例子,包括 接著,他點出了報告bug的目的 在bug報告裡,要設法搞清什麼是事實 例如 我在電腦旁 和 xx出現了 什麼是推測 例如 我想問題可能是出在 如果願意的話,您可以省去推測,但是千萬別省略事實。然後,simon針對bug報告的不同問題分別提出了自己...

如何有效地報告Bug?

作者 崔康 發布於 十月 08,2012 自由軟體開發者simon tatham針對如何有效地報告bug發表了自己的看法,他列舉了一系列拙劣bug報告的例子,並提出了改正建議。simon首先列舉了一系列拙劣bug報告的例子,包括 接著,他點出了報告bug的目的 在bug報告裡,要設法搞清什麼是事實 ...

如何有效地進行B S web系統黑客安全測試

時下,網際網路產品層出不窮,開發周期短 是大部分產品的特點,如何在短時間內保證測試的質量至關重要,尤其是網路安全方面的測試。本文概要闡述了一般b s架構系統安全測試要點與防範方法。安全性測試主要是測試系統在沒有授權的內部或者外部使用者對系統進行攻擊或者惡意破壞時如何進行處理,是否仍能保證資料和頁面的...