許多人將軟件逆向工程看做代碼逆向工程,然而軟件被看做是“軟件=代碼+數據”。那麼對等的就應存在“數據逆向工程”,雖然數據逆向工程與代碼逆向工程有交叉部分,但是它們各有側重。代碼逆向工程主要利用反彙編分析代碼的執行流程。數據逆向工程重點在於數據結構和數據內容。
二進制文件的數據可以逆向,卻不可能反彙編,因爲數據連續的靜靜地躺在棧區和數據段,但爲了分析數據,我們又不得不利用代碼反彙編,通過代碼意圖推理出數據結構。
分析方法
1. 黑盒分析:不通過分析代碼執行流向,直接觀察二進制文件,獲取數據結構分析,比如我們經常利用winhex,IDA等軟件觀察。
2.白盒分析:俗稱反彙編,我就不解釋了。
代碼和數據的區別
假設內存中有字節碼53H、56H、75H,若是當指令處理,則表示push ebx、push esi、push edi,當然作爲數據也是可以的。
至於如何區分呢?
一般來說通過動態反彙編是最爲準確的,當然也可以不必那麼複雜,如果你的經驗足夠豐富黑盒分析有時異常簡潔。靜態反彙編結合了強兩者的優點,但是想IDA這樣強大的靜態分析軟件,也不能100%保證分析正確