天天看點

逆向工程,調試Hello World !程式(更新中)

逆向工程,調試Hello,World ! 程式(更新中)

  • ​​逆向分析法​​
  • 靜态分析法
  • 動态分析法
  • ​​調試hello world 程式​​
  • 代碼
  • ​​開始調試​​
  • OllyDbg 基本指令 (适用于代碼視窗)
  • 設定斷點的四種方法
  • 1.goto 指令
  • 2.設定斷點
  • 3.注釋
  • 4.标簽
  • 快速查找指定代碼的四種方法
  • 1. 代碼執行法
  • 2.字元串檢索法
  • 3.在調試代碼中設定斷點
  • 4.在API代碼中設定斷點
  • 使用“打更新檔”方式修改“hello world!”字元串
  • 修改字元的兩種方法
  • 1.直接修改緩沖區
  • 儲存更改到可執行檔案
  • 2.在其他記憶體區域建立字元串并傳遞給消息函數
  • ​​更新中。。。。​​

逆向分析法

是在不執行代碼檔案的情形下,對代碼進行靜态分析的一種方法。并不執行代碼,而是觀察代碼檔案的外部特征,擷取檔案的類型,大小,PE頭資訊,内部字元串,是否運作時解壓縮等。

是在程式檔案的執行過程中對代碼進行動态分析的一種方法,它通過調試來分析代碼流,獲得記憶體的狀态等。

雖然代碼調試過程在代碼逆向分析過程中占據很大比重,但它隻是代碼逆向分析的一個從屬概念

調試hello world 程式

#include "windows.h"
#include "tchar.h"

int _tmain(int argc, TCHAR * argv[])
{
MessageBox(NULL,"Hello World!","張軒瑞",MB_OK);
return 0;
}

      

開始調試

用OllyDbg調試工具打開程式

左上 代碼視窗

  • 預設用于顯示反彙編代碼,還用于顯示各種注釋、标簽,分析代碼時顯示循環、跳轉位置等資訊。

右上 寄存器視窗

  • 實時顯示CPU寄存器的值,可用于修改特定的寄存器。

左下 資料視窗

  • 以Hex/ASCII/Unicode值的形式顯示程序的記憶體位址,也可在修改記憶體位址。

右下 棧視窗

  • 實時顯示ESP寄存器指向的程序棧記憶體,并修改。
    逆向工程,調試Hello World !程式(更新中)

項目 Value 含義
Restart Ctrl+F2 重新開始調試
Step Into F7 執行一句OP code (操作碼),若遇到調用指令(CALL),将進入函數代碼内部
Step Over F8 執行一句OP code (操作碼),若遇到調用指令(CALL),僅執行函數自身,不跟随進入
Execute till Return Ctrl+F9 一直在函數代碼内部運作,直到遇到RETN指令,跳出函數

執行Go to(Ctrl + G) 指令,打開一個“輸入跟蹤表達式”的對話框。

在文本框中輸入“位址”。

逆向工程,調試Hello World !程式(更新中)

光标自動定位到該位址處,執行F4指令,讓調試流運到此處,然後從該處調試。

可以設定BP(Break Point,斷點) (快捷鍵F2)

逆向工程,調試Hello World !程式(更新中)

設定斷點後,運作到斷點處就會暫停。

可以打開Breakpoints框(ATL+B)檢視設定的斷點。

逆向工程,調試Hello World !程式(更新中)

輕按兩下某個斷點會直接跳轉到相應位置。

按鍵盤上的“;”可以添加注釋

逆向工程,調試Hello World !程式(更新中)

同時也可以查找到他。

逆向工程,調試Hello World !程式(更新中)

我們也可以通過标簽提供的功能在指定位址

逆向工程,調試Hello World !程式(更新中)

比如在00401BF0中設定标簽,main func

因為00401385處調用00401BF0的函數,是以就會顯示,main func

逆向工程,調試Hello World !程式(更新中)

标簽和注釋一樣也可以檢索

調試代碼時,main()函數并不直接位于可執行檔案的EP位置上,出現在此的是開發工具生成的啟動函數。

(EP是windows可執行檔案(EXE,DLL,SYS等)的代碼入口點,是執行應用程式時最先執行的代碼的起始位置,它依賴于CPU。)

逐條執行指令來查找需要查找的位置。代碼執行法僅使用于被調試的代碼量不大、且程式功能明确的情況。

直接查找字元串。

尋找所需要的字元串,然後輕按兩下。

查找->所有子產品間的調用

檢視調用了那些函數

打開“所有子產品中的名稱”并敲下MessageBox,光标會直接定位。

逆向工程,調試Hello World !程式(更新中)

我在搜尋的時候,發現注釋hello world的地方更改沒有用。

找到主函數後,設定斷點。

然後按F4,進行調試。

在右下方站視窗找到ASCII碼“hello world”。

逆向工程,調試Hello World !程式(更新中)

然後輕按兩下檢視,進入資料視窗,去更改緩存區。

逆向工程,調試Hello World !程式(更新中)

去更改,hello world 改成 hello rever

盡量不要用更長的字元串,覆寫原字元串,這樣會使資料遭到破壞。

改完之後,去運作程式,之後就會彈出視窗。

逆向工程,調試Hello World !程式(更新中)

我們發現以前的hello world 變成了 hello rever。

上面的調試中,我們通過修改字元串緩沖區更改了程式顯示的消息内容,但是這種更改隻是暫時的,我們終止調試的時候。程式中的原字元串沒有改變。如果想儲存下來,就要把更改後的程式儲存一個可執行檔案。

  • 在左下資料視窗中,選中更改後的字元串,點選滑鼠右鍵,在彈出的菜單中選擇“複制到可執行檔案”,然後點選“備份”——>“儲存到資料檔案”然後輸入檔案名儲存為exe檔案。

當我們打開這個已經儲存好的檔案的時候,彈出的字元串變成了“hello rever”。

逆向工程,調試Hello World !程式(更新中)

更新中。。。。

更多内容詳見微信公衆号:Python測試和開發

逆向工程,調試Hello World !程式(更新中)