天天看點

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

ollydbg逆向分析并修改helloworld程式

  • 素材來源
  • 實驗内容
  • 步驟1:VS2017生成需逆向的檔案
  • 步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置
    • 方法一:通過字元串查找
    • 方法二:通過調用子產品查找
  • 步驟3:修改
    • 修改一:修改指令
    • 修改2:修改字元串

素材來源

來自于書籍《軟體逆向工程原理與實踐》。第一章的1.5節逆向分析并修改Hello World程式。本文主要是對自己走一遍該流程的記錄。

實驗内容

使用Ollydbg修改彙編指令,修改字元串。

步驟1:VS2017生成需逆向的檔案

visual studio2017建立工程檔案,編譯程式時選擇visual studio的Release模式,減少調試資訊。點選本地windows調試器進行編譯運作。

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

運作結果如下圖:

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

彙編代碼視窗可以檢視彙編指令,位址等相關資訊;我們接下來所做的尋找操作都是在彙編代碼視窗完成;

資料視窗可以進行資料修改,我們接下來所做的修改操作都是在資料視窗完成。

執行的修改都是在main函數中,比起一個一個運作。有兩種方法可以比較友善的尋找到main函數的主體。

方法一:通過字元串查找

在彙編代碼視窗點選右鍵,選擇查找->所有的參考文本字串(英文版中是Search for->All referenced text string)。在被引用的清單中選擇“www.xidian.edu.cn”或者是“Hello World!”輕按兩下字元串即可查找到這兩個字元串的push操作。過程如下::

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改
Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改
Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

方法二:通過調用子產品查找

在彙編代碼視窗點選右鍵,選擇查找->所有子產品間的調用(英文版是Search for->All intermodular calls),在子產品間調用API清單查找MessageBoxA()或MessageBoxW(),輕按兩下就可快速查找到對該函數的調用,進而找到main()函數。最後是MessageBoxA()或MessageBoxW()取決于程式設計的時候選擇的字元集是多位元組字元集還是Unicode字元集。過程如下圖所示:

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改
Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改
Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

步驟3:修改

修改一:修改指令

可以做的第一個修改是對調界面上的“www.xidian.edu.cn”和“Hello world!”這兩個字串的位置。簡單的作法是對這兩個字元串壓棧的PUSH指令,将兩條指令的位址互換。由圖可知,兩條push指令的位址分别是F8201B01和0C211B01。

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

在最左列可以看到,兩條指令的位址在011B002。所有的修改操作都在資料區域執行。

在資料區域快捷鍵Crtl+G,搜尋位址011B002,可以找到該位址,選中需要修改的區域,如下紫色部分。

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

快捷鍵Ctrl+E進入修改。

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

在編輯視窗修改該資料,将其修改為0C211B01,點選确定即可。如下圖可知,修改成功。

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

同樣的步驟對後面的0C211B01進行修改,修改為F8201B01。完成兩條指令的交換。修改後彙編代碼視窗可以觀察到兩者的變化。如下圖所示:

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

最後選擇被修改的區域,如下紫色部分,在資料區域右鍵->複制到可執行檔案(英文版是Copy to executable file -> All modifications)。在生成的檔案中右鍵->儲存檔案即可。

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改
Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

完成後獲得的新exe程式的運作如下,可知對調成功。

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

修改2:修改字元串

将原來的“Helloworld”界面上的“Hello world!”字元串,更改為“Hello Student!”,利用步驟二中的方法可以找到該字元串的位址,同樣在資料區域找到該位置,選擇該區域,當然,由于“Hello Student!”比“Hello world!”要長,是以需要選擇稍微大一點的區域,由于該條語句後面都是00,是以多選擇區域不會造成錯誤。Ctrl+E修改。

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

直接對ASCII進行操作即可改變彙編代碼指令。确定儲存。

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

同樣選擇被修改的區域,儲存成新的.exe檔案。執行效果如下,可知修改成功。

Ollydbg逆向分析并修改helloworld程式素材來源實驗内容步驟1:VS2017生成需逆向的檔案步驟2:ollydbg中打開該程式的exe檔案,找到需修改的位置步驟3:修改

繼續閱讀