原創】初識exe程序反匯編小感
一、工作環境:
1、查殼工具:PEiD用於初步確定exe程序是否加殼以及使用何種開發軟件編寫);
2、反編譯工具:DeDe經過查殼工具檢查,將要被反匯編的程序是用“BorlandC++
3、反匯編動態調試工具:OllyICE即,OD;用於動態反匯編調試程序的相關代碼邏輯);
4、開發環境:VS.NET 2005;
5、其他工具:EditPlus、記事本、計算器等若干;
二、基礎知識:
1、匯編程序設計:主要深入了解程序數據存放、堆棧使用、子程序調用等技巧;不同類型數據的地址跳轉規則一般都是跳轉該類型長度個位置);
2、c++程序設計:基本語法結構;指針、數據類型的使用和控制;
3、相關工具軟件的基本使用方法;
三、工作過程:
我的反匯編大概過程是:
查殼->脫殼、判斷開發程序使用的環境->反編譯->初步定位主要功能模塊或函數的匯編指令起始、終止地址->反匯編准備->查找程序中的特征字符串或特征值,進一步確定需要反匯編的代碼邏輯的位置->開始反匯編調試運行,分析需要反匯編的代碼邏輯的具體過程->將分析出來的邏輯流程使用c++語言實現。
1、 查殼:
運行PeiD,打開要反匯編的exe程序,在這裡姑且稱之為:test.exe吧。
如示意圖1:
“多項掃描”上面那行“Microsoft Visual C++ 7.0 Dll Method
接下來電擊窗口右下角的“>>”按鈕,再來看看該程序是否加殼,如示意圖2:
分別點擊“熵值”、“EP校驗”、“快速校驗”這三行最右側的“-”按鈕,就可以看到是否加殼的提示了。
哈哈,test.exe程序太干淨了。沒有任何加殼,可以選用相應的反編譯工具進行下一步啦。 ^_^
2、 反編譯:
“1、”中只是示意圖,我實際反編譯的程序是由“BorlandC++
示意圖3:
3、 初步定位主要模塊、函數對應的匯編指令地址:
根據反編譯出來的部分類和方法的代碼框架,確定了兩組可疑的匯編指令地址段。
如示意圖4:
注意選擇“過程”按鈕,如上圖所示。然後雙擊右下側列表中的Button3Click,就可以查看該方法對應的函數體了。當然,這樣看到的函數體不會是我們一般意義上的函數體,這函數體只有一個框架是高級語言的樣子,函數體內部都是匯編代碼,不過這已經足夠了,後面我們還要進行詳細的反匯編調試分析呢。嘿嘿。函數體示意圖5如下:
好,記下這段函數的首地址、尾地址,開始嘗試反匯編操作。
4、 反匯編准備:
使用ODOllyICE)打開test.exe程序,如示意圖6:
找到剛才記錄下的首地址、尾地址。如上圖中兩個黑圓點處的紅條,分別是首地址:00401EC4、尾地址:00401EF5。
5、 反匯編調試:
根據步驟4中定位的匯編指令地址,再結合示意圖6中[ASCII”Hello OD”]、[ASCII”this is OllyDbg DeAsm”]等關鍵字符串,進行所有匹配字符串的檢索,就可以開始使用OD進行調試了。具體使用方法請參閱OD自帶的help文件。
逐句分析所需部分的匯編代碼邏輯流程。其間可以用其他一些輔助工具來幫助記錄動態分析過程中的數值傳遞軌跡及變換方法。
6、 C++實現:
根據分析出的匯編代碼邏輯,使用C++實現同樣的功能。
備注:在定位反匯編所需的代碼位置時,除了一些ASCII字符串的定位方法,還能通過程序中聲明的一些常量字符串、映射控制矩陣、計數器等常量來進行更為精確的定位。
本文出自 “空中的魚” 博客,請務必保留此出處http://airfish.blog.51cto.com/358752/264819