初識exe程序反彙編小感

【原創】初識exe程序反彙編小感
 
 
近期因爲一個項目的須要,我初步接觸了exe程序反彙編。折騰了好幾天終於見到了那個程序中急需的算法的真面目了。回顧整個過程,小有感悟。爲紀念初識程序反彙編的心路歷程,特記錄下對程序反彙編過程的粗淺感覺。

1、工做環境:
  1查殼工具:PEiD(用於初步肯定exe程序是否加殼以及使用何種開發軟件編寫);
  2反編譯工具:DeDe(通過查殼工具檢查,將要被反彙編的程序是用「BorlandC++ 1999」 編寫的,因此選用專門反編譯Delphi程序的DeDe;用於初步肯定程序模塊、函數方法劃分對應exe程序相應彙編指令地址的位置);
  3反彙編動態調試工具:OllyICE(即,OD;用於動態反彙編調試程序的相關代碼邏輯);
  4開發環境:VS.NET 2005
  5其餘工具:EditPlus、記事本、計算器等若干;
 
2、基礎知識:
  1彙編程序設計:主要深刻了解程序數據存放、堆棧使用、子程序調用等技巧;不一樣類型數據的地址跳轉規則(通常都是跳轉該類型長度個位置);
  2c++程序設計:基本語法結構;指針、數據類型的使用和控制;
  3相關工具軟件的基本使用方法;
 
3、工做過程:
  個人反彙編大概過程是:
查殼->脫殼、判斷開發程序使用的環境->反編譯->初步定位主要功能模塊或函數的彙編指令起始、終止地址->反彙編準備->查找程序中的特徵字符串或特徵值,進一步肯定須要反彙編的代碼邏輯的位置->開始反彙編調試運行,分析須要反彙編的代碼邏輯的具體過程->將分析出來的邏輯流程使用c++語言實現
 
1 查殼:
運行PeiD,打開要反彙編的exe程序,在這裏姑且稱之爲:test.exe吧。
如示意圖1

多項掃描上面那行「Microsoft Visual C++ 7.0 Dll Method 3」 就是該程序的開發環境了。
接下來電擊窗口右下角的「>>」按鈕,再來看看該程序是否加殼,如示意圖2

分別點擊熵值「EP校驗快速校驗這三行最右側的「-」按鈕,就能夠看到是否加殼的提示了。
哈哈,test.exe程序太乾淨了。沒有任何加殼,能夠選用相應的反編譯工具進行下一步啦。  ^_^
 
2 反編譯:
「1中只是示意圖,我實際反編譯的程序是由「BorlandC++ 1999」 編寫的,因此選擇DeDe 3.5做爲反編譯工具;DeDe3.5的具體使用方法,請自行在網上查閱。
示意圖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字符串的定位方法,還能經過程序中聲明的一些常量字符串、映射控制矩陣、計數器等常量來進行更爲精確的定位。
 
 
 以上就是我初識程序反彙編主要過程的記錄。注意:因爲「保密協議」的限制,在此不便過多討論項目代碼細節。還望你們敬請原諒。寫的很粗淺,但願有反彙編經驗的前輩不吝指教,在此,先謝過啦。哈哈 ^_^
相關文章
相關標籤/搜索