<input id="0qass"><u id="0qass"></u></input>
  • <input id="0qass"><u id="0qass"></u></input>
  • <menu id="0qass"><u id="0qass"></u></menu>

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

    逆向分析法

    靜態分析法

    是在不執行代碼文件的情形下,對代碼進行靜態分析的一種方法。并不執行代碼,而是觀察代碼文件的外部特征,獲取文件的類型,大小,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寄存器指向的進程棧內存,并修改。
      在這里插入圖片描述

    OllyDbg 基本指令 (適用于代碼窗口)

    項目Value含義
    RestartCtrl+F2重新開始調試
    Step IntoF7執行一句OP code (操作碼),若遇到調用命令(CALL),將進入函數代碼內部
    Step OverF8執行一句OP code (操作碼),若遇到調用命令(CALL),僅執行函數自身,不跟隨進入
    Execute till ReturnCtrl+F9一直在函數代碼內部運行,直到遇到RETN命令,跳出函數

    設置斷點的四種方法

    1.goto 命令

    執行Go to(Ctrl + G) 命令,打開一個“輸入跟蹤表達式”的對話框。
    在文本框中輸入“地址”。
    在這里插入圖片描述
    光標自動定位到該地址處,執行F4命令,讓調試流運到此處,然后從該處調試。

    2.設置斷點

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

    在這里插入圖片描述
    設置斷點后,運行到斷點處就會暫停。
    可以打開Breakpoints框(ATL+B)查看設置的斷點。
    在這里插入圖片描述
    雙擊某個斷點會直接跳轉到相應位置。

    3.注釋

    按鍵盤上的“;”可以添加注釋
    在這里插入圖片描述
    同時也可以查找到他。
    在這里插入圖片描述

    4.標簽

    我們也可以通過標簽提供的功能在指定地址
    在這里插入圖片描述
    比如在00401BF0中設置標簽,main func
    因為00401385處調用00401BF0的函數,所以就會顯示,main func

    在這里插入圖片描述
    標簽和注釋一樣也可以檢索

    快速查找指定代碼的四種方法

    調試代碼時,main()函數并不直接位于可執行文件的EP位置上,出現在此的是開發工具生成的啟動函數。
    (EP是windows可執行文件(EXE,DLL,SYS等)的代碼入口點,是執行應用程序時最先執行的代碼的起始位置,它依賴于CPU。)

    1. 代碼執行法

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

    2.字符串檢索法

    直接查找字符串。
    尋找所需要的字符串,然后雙擊。

    3.在調試代碼中設置斷點

    查找->所有模塊間的調用
    查看調用了那些函數

    4.在API代碼中設置斷點

    打開“所有模塊中的名稱”并敲下MessageBox,光標會直接定位。
    在這里插入圖片描述

    使用“打補丁”方式修改“hello world!”字符串

    修改字符的兩種方法

    1.直接修改緩沖區

    我在搜索的時候,發現注釋hello world的地方更改沒有用。
    找到主函數后,設置斷點。
    然后按F4,進行調試。
    在右下方站窗口找到ASCII碼“hello world”。
    在這里插入圖片描述
    然后雙擊查看,進入數據窗口,去更改緩存區。
    在這里插入圖片描述
    去更改,hello world 改成 hello rever
    盡量不要用更長的字符串,覆蓋原字符串,這樣會使數據遭到破壞。
    改完之后,去運行程序,之后就會彈出窗口。
    在這里插入圖片描述
    我們發現以前的hello world 變成了 hello rever。

    保存更改到可執行文件

    上面的調試中,我們通過修改字符串緩沖區更改了程序顯示的消息內容,但是這種更改只是暫時的,我們終止調試的時候。程序中的原字符串沒有改變。如果想保存下來,就要把更改后的程序保存一個可執行文件。

    • 在左下數據窗口中,選中更改后的字符串,點擊鼠標右鍵,在彈出的菜單中選擇“復制到可執行文件”,然后點擊“備份”——>“保存到數據文件”然后輸入文件名保存為exe文件。

    當我們打開這個已經保存好的文件的時候,彈出的字符串變成了“hello rever”。
    在這里插入圖片描述

    2.在其他內存區域新建字符串并傳遞給消息函數

    更新中。。。。

    ??2020 CSDN 皮膚主題: 游動-白 設計師:上身試試 返回首頁
    多乐彩