OD 實驗(十五) - 對一個程序的逆向
程序:
打開程序
出現一個 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 實驗(十五) - 對一個程序的逆向