逆向入門(一)
阿新 • • 發佈:2019-01-01
本系列記錄學習逆向的過程,以便之後回顧,參考書籍《逆向工程核心原理》。
0x00 基本環境
vc++ 6.0、吾愛破解工具包、xp
0x01 od的基本使用
入門程式使用的是最簡單的helloword的c++程式碼,messagebox彈個框,原始碼如下:
#include "windows.h"
#include "tchar.h"
int _tmain(int argc, TCHAR *argv[])
{
MessageBox(NULL,
"Hello World!",
"www.reversecore.com" ,
MB_OK);
return 0;
}
od基本使用快捷鍵如下:
快捷鍵 | 含義 |
---|---|
ctrl+f2 | 程式跑飛後重新開始除錯 |
F7 | 單步步入 |
F8 | 單步步過 |
ctrl+F9 | 程式碼執行到RETN命令 |
ctrl+G | 查詢指定地址 |
F2 | 取消or設定斷電 |
F9 | 繼續執行程式 |
空格 | 修改對應彙編指令 |
ALT+B | 開啟breakpoint對話方塊 |
0x02 快速定位程式碼的幾種方法
- 字串檢索
方法:滑鼠右鍵點選檢視-所有參考文字字串,找到在程式中出現的字串,雙擊字串,即可跳轉到程式呼叫的地方
- API檢索
方法:滑鼠右鍵點選查詢-所有模組間的呼叫,然後列出了所有的api,找到MessageBoxA,雙擊即可找到呼叫的地方。
3、api程式碼上下斷點
方法:滑鼠右鍵-查詢-所有模組中的名稱,然後輸入MessageBoxA,找到use32中的函式然後雙擊,進入函式的實現程式碼,然後f2下斷點,f9執行程式,會在該斷點停下來。此時檢視右邊ESP指向的堆疊的值,即可找到程式的呼叫地址。
0x03 簡單的程式修改
- 直接修改字串快取
找到字串儲存的地址:41f01c
選中字串,然後ctrl+E,即可修改字串
修改後,f9繼續執行程式,即可看到修改後的程式。
該方式只是暫時的,無法儲存字串,如果要儲存字串則需要儲存為另外一個程式。
選擇剛才修改的字串,然後點選右鍵,選擇複製到可執行檔案,在彈出的hex對話方塊,右鍵選擇,儲存檔案,即可儲存修改後的檔案。
- 在其他記憶體區域新建字串並傳遞給訊息函式
找到程式中由NULL填充的區域記憶體,修改字串,並記住地址。
找到messagebox中的push引數的地方,修改push地址,即可呼叫到修改後的地址