1. 程式人生 > >逆向入門(一)

逆向入門(一)

本系列記錄學習逆向的過程,以便之後回顧,參考書籍《逆向工程核心原理》。

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 快速定位程式碼的幾種方法

  1. 字串檢索
    方法:滑鼠右鍵點選檢視-所有參考文字字串,找到在程式中出現的字串,雙擊字串,即可跳轉到程式呼叫的地方

參考文字字串

字串

字串定位

  1. API檢索
    方法:滑鼠右鍵點選查詢-所有模組間的呼叫,然後列出了所有的api,找到MessageBoxA,雙擊即可找到呼叫的地方。

所有模組間呼叫

所有模組間呼叫2

3、api程式碼上下斷點
方法:滑鼠右鍵-查詢-所有模組中的名稱,然後輸入MessageBoxA,找到use32中的函式然後雙擊,進入函式的實現程式碼,然後f2下斷點,f9執行程式,會在該斷點停下來。此時檢視右邊ESP指向的堆疊的值,即可找到程式的呼叫地址。
所有模組中的名稱

呼叫

0x03 簡單的程式修改

  • 直接修改字串快取
    找到字串儲存的地址:41f01c

字串儲存地址

選中字串,然後ctrl+E,即可修改字串

字串修改

修改後,f9繼續執行程式,即可看到修改後的程式。

該方式只是暫時的,無法儲存字串,如果要儲存字串則需要儲存為另外一個程式。
選擇剛才修改的字串,然後點選右鍵,選擇複製到可執行檔案,在彈出的hex對話方塊,右鍵選擇,儲存檔案,即可儲存修改後的檔案。
複製到可執行檔案

  • 在其他記憶體區域新建字串並傳遞給訊息函式
    找到程式中由NULL填充的區域記憶體,修改字串,並記住地址。
    找到messagebox中的push引數的地方,修改push地址,即可呼叫到修改後的地址

NULL

修改push