逆向工程,調試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) 指令,打開一個“輸入跟蹤表達式”的對話框。
在文本框中輸入“位址”。
光标自動定位到該位址處,執行F4指令,讓調試流運到此處,然後從該處調試。
可以設定BP(Break Point,斷點) (快捷鍵F2)
設定斷點後,運作到斷點處就會暫停。
可以打開Breakpoints框(ATL+B)檢視設定的斷點。
輕按兩下某個斷點會直接跳轉到相應位置。
按鍵盤上的“;”可以添加注釋
同時也可以查找到他。
我們也可以通過标簽提供的功能在指定位址
比如在00401BF0中設定标簽,main func
因為00401385處調用00401BF0的函數,是以就會顯示,main func
标簽和注釋一樣也可以檢索
調試代碼時,main()函數并不直接位于可執行檔案的EP位置上,出現在此的是開發工具生成的啟動函數。
(EP是windows可執行檔案(EXE,DLL,SYS等)的代碼入口點,是執行應用程式時最先執行的代碼的起始位置,它依賴于CPU。)
逐條執行指令來查找需要查找的位置。代碼執行法僅使用于被調試的代碼量不大、且程式功能明确的情況。
直接查找字元串。
尋找所需要的字元串,然後輕按兩下。
查找->所有子產品間的調用
檢視調用了那些函數
打開“所有子產品中的名稱”并敲下MessageBox,光标會直接定位。
我在搜尋的時候,發現注釋hello world的地方更改沒有用。
找到主函數後,設定斷點。
然後按F4,進行調試。
在右下方站視窗找到ASCII碼“hello world”。
然後輕按兩下檢視,進入資料視窗,去更改緩存區。
去更改,hello world 改成 hello rever
盡量不要用更長的字元串,覆寫原字元串,這樣會使資料遭到破壞。
改完之後,去運作程式,之後就會彈出視窗。
我們發現以前的hello world 變成了 hello rever。
上面的調試中,我們通過修改字元串緩沖區更改了程式顯示的消息内容,但是這種更改隻是暫時的,我們終止調試的時候。程式中的原字元串沒有改變。如果想儲存下來,就要把更改後的程式儲存一個可執行檔案。
- 在左下資料視窗中,選中更改後的字元串,點選滑鼠右鍵,在彈出的菜單中選擇“複制到可執行檔案”,然後點選“備份”——>“儲存到資料檔案”然後輸入檔案名儲存為exe檔案。
當我們打開這個已經儲存好的檔案的時候,彈出的字元串變成了“hello rever”。
更新中。。。。