今天開始寫寫一些心得體驗。
《軟體除錯分析技術》是好友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指...