《軟體除錯分析技術》學習筆記(一)

2021-06-03 10:06:31 字數 3068 閱讀 6680

今天開始寫寫一些心得體驗。

《軟體除錯分析技術》是好友monster的**作品。作為一直以的好夥伴,他是我看著長大的,(*^__^*) 嘻嘻……之所以有今天這樣的成績,是與他的努力和天賦脫不了關係的。他大方地給了我pdf版的,我也大方的給了我們全班。但我們班有同學說,「這是撒子呦,看不看不懂」。我決心寫一些學習筆記,和我班的同學一起來多交流,讓更多熱愛次行業的人都進入軟體除錯這個神殿。

好了,閒話不說。

1)逆向工程(reverse engineering)簡介

逆向工程是通過對現有的二進位制可執行檔案進過反彙編、反編譯、除錯模擬程式執行等手段,分析出程式的執行流程、資料結構等。

逆向工程不是簡單的複製和模仿,而是運用相關手段對產品進行分析再設計等創新處理,從而使程式表現出更加優良的效能、縮短新程式的開發周期、提高設計開發效率。

2)學習前提

建議在學習逆向分析技術之前有一定的程式設計功底。具有一定的**邏輯能力,最好還做過一些windows應用程式,了解一些常用的api,pe檔案格式、com原理、windows的訊息處理機制、異常處理機制等。需要和二程序**打交道,所以一定要掌握好組合語言(更重要的是反彙編)

由此可以看出來,同學們不是智商不夠,而是基礎知識比較薄弱

3)常用工具

除錯工具ollydbg、softice、windbg、syser debugger,分析工具peid、exeinfo、fi、ffi…… 等,常見的pe工具有:loadpe、petools、stud_pe、peditor等,常見的反彙編工具有:ida pro、w32dasm、c32asm等。

m運用了很多篇幅簡單介紹了各個工具的使用,我認為,這些工具的使用要在平常實戰中漸漸熟悉,所以沒必要將此章目看的過細。本人也只用過ollydbg。

4)windows訊息處理機制

5)pe檔案格式

pe 的意思就是

portable executable

(可移植的執行體)。它是

win32

環境自身所帶的執行體檔案格式。它的一些特性繼承自

unix

的coff (common object file format)

檔案格式。pe

檔案格式給了我們洞悉

windows

結構的良機。

dos mz header

dos stub

pe header

section table

section 1

section 2

section ...

section n

上圖是

pe檔案結構的總體層次分布。所有pe檔案(

甚至32

位的dlls)

必須以乙個簡單的

dos mz header

開始。我們通常對此結構沒有太大興趣。有了它,一旦程式在

dos下執行,

dos就能識別出這是有效的執行體,然後執行緊隨

mz header

之後的dos stub

。dos stub

實際上是個有效的

exe,在不支援

pe檔案格式的作業系統中,它將簡單顯示乙個錯誤提示,類似於字串

"this program requires windows"

或者程式設計師可根據自己的意圖實現完整的

dos**。通常我們也不對

dos stub

太感興趣

:因為大多數情況下它是由彙編器

/編譯器自動生成。通常,它簡單呼叫中斷

21h服務

9來顯示字串

"this program cannot run in dos mode"

。緊接著

dos stub

的是pe header

pe header 是pe

相關結構

image_nt_headers

的簡稱,其中包含了許多

pe裝載器用到的重要域。當我們更加深入研究

pe檔案格式後,將對這些重要域耳目能詳。執行體在支援

pe檔案結構的作業系統中執行時,

pe裝載器將從

dos mz header

中找到pe header

的起始偏移量。因而跳過了

dos stub

直接定位到真正的檔案頭

pe header

。pe檔案的真正內容劃分成塊,稱之為

sections(節)。每節是一塊擁有共同屬性的資料,比如**

/資料、讀

/寫等。我們可以把

pe檔案想象成一邏輯磁碟,

pe header

是磁碟的

boot

扇區,而

sections

就是各種檔案,每種檔案自然就有不同屬性如唯讀、系統、隱藏、文件等等。

上述為摘抄,翻譯的不是很好

pe檔案最前面緊隨dos mz檔案頭的是乙個dos可執行檔案(stub)。這使得pe檔案成為乙個合法的ms-dos可執行檔案。dos  mz檔案頭後面是乙個32位的pe檔案標誌0x50450000(image_nt_signature),即pe00。接下來的是pe的映像檔案頭,包含的資訊有該程式的執行平台,有多少個節,檔案鏈結的時間,檔案命名格式,後面還緊跟乙個可選映像頭,包含pe檔案的邏輯分布資訊,程式載入資訊,開始位址,保留的堆疊數量,資料段大小等。可選頭還有乙個重要的域,稱為「資料目錄表」的陣列,表的每一項都是指向某一節的指標。可選映像頭後面緊跟的是節表和節。節通過節表來實現索引。實際上,節的內容才是真正執行的資料和程式。每乙個節都有相關的標誌。每乙個節會被乙個或多個目錄表指向,目錄錶可通過可選頭的「資料目錄表」的入口找到。就像輸出函式表或基址重定位表。也存在沒有目錄表指向的節。

具體pe還有很多,這裡只是乙個初步的**,如果想深入,網上找資料。

《軟體除錯分析技術》學習筆記(二)

1.暫存器 暫存器m講的比較透徹。暫存器是 處理器cpu的組成部分,是有限存貯容量的高速存貯部件,它們可用來暫存指 令 資料和位址,是記憶體階層中的最頂端,也是系統獲得操作資料的最快速途徑。1.1資料暫存器 資料暫存器主要用來儲存運算元和運算結果等資訊,從而節省讀取運算元所需占用匯流排和訪問 儲存器...

《軟體除錯分析技術》學習筆記(三)

m給出乙個c程式 include include int a int main 這段 定義了乙個整型全域性變數a,在主函式main 中定義了乙個整型區域性變數b和乙個整形指標變數c,然後呼叫malloc 函式申請大小為1個整形變數的記憶體並把申請到的記憶體位址賦值給指標變數c,再依次給變數a b和c...

《軟體除錯分析技術》學習筆記(十)

函式呼叫 許多程式語言中,可以將一段經常需要使用的 封裝起來,在需要使用時可以直接呼叫,這就是程式中的函式 也被稱為過程 其實程式中的函式和數學中所說的函式是很相似的,都是通過輸入自變數 有些函式可能不需要自變數 然後經過一系列的運算,最後得出函式的值。在組合語言中對於函式的呼叫一般用乙個call指...