1. 程式人生 > >OD 實驗(十五) - 對一個程序的逆向

OD 實驗(十五) - 對一個程序的逆向

write 不顯示 一次 空白 測試 過程 條件 下一個 找到

程序:

技術分享圖片

打開程序

技術分享圖片

出現一個 NAG 窗口

技術分享圖片

這是主界面

點擊 Exit

技術分享圖片

程序出現 NAG 窗口,然後退出

用 PEiD 看一下

技術分享圖片

是用 VC++ 6.0 寫的程序

逆向:

用 OD 載入程序

跑一下程序

出現 NAG 窗口時暫停

技術分享圖片

按 Alt+K 顯示調用堆棧

技術分享圖片

這個是 MFC 的對話框,雙擊來到它所在的地方

技術分享圖片

下一個斷點,重新跑一下程序

技術分享圖片

OD 停在了斷點處

按 F8 往下走一步

技術分享圖片

NAG 窗口出現了

過了幾秒就往下走了一步了

技術分享圖片

按 F9 運行

技術分享圖片

程序又停在了這個斷點處

按一下 F8

技術分享圖片

主窗口出現了

點擊 Exit

技術分享圖片

OD 往下走了一步

按 F9 運行

技術分享圖片

OD 又停在了斷點處

按一下 F8

技術分享圖片

程序關閉的 NAG 窗口出現了

說明這個斷點是三個窗口出現的地方

技術分享圖片

這個 call 語句上面有個 je 跳轉指令,如果執行跳轉的話,將跳過這個 call 語句

如果這個 je 跳轉指令第一次執行跳轉,第二次不執行跳轉,第三次執行跳轉,就會只顯示主界面不顯示 NAG 窗口

可以用到條件判斷,設一個變量 i,如果 i 等於 2 的話就不執行跳轉,i 等於 1 或 3 的話就執行跳轉

按 Alt+M 顯示內存窗口,查看程序的 PE 頭結構

技術分享圖片

雙擊進入 data 段

技術分享圖片

找到一塊沒數據的地方

先測試一下這塊地方在程序運行的時候會不會被影響到

技術分享圖片

右鍵 -> 斷點 -> 硬件訪問 -> Byte,關註這一個字節

重新跑一下程序,程序運行過程中沒有停在該斷點處,說明程序運行過程中沒有對該字節區域造成影響

接下來在代碼塊區域找一個空白的地方

技術分享圖片

接下來使用 OD 的一個插件 NonaWrite 進行修改

技術分享圖片

在 NonaWrite 上寫匯編代碼

技術分享圖片

0x437D6E 為要修改的地址

下面為要修改的語句

寫完之後點擊“匯編”

技術分享圖片

然後把 je 跳轉指令改為 jmp

技術分享圖片

保存文件,運行程序

技術分享圖片

沒有了 NAG 窗口,只有主窗口

OD 實驗(十五) - 對一個程序的逆向