OllyDBG - 第十四章 | 反匯編練習 (四) 下
前面幾篇都是使用NOP
法,或是jmp
跳轉法,再不然就是透過分析找到計算的方式來做暴破和破解。
在這邊要特別提一個比較特別方法,是根據分析函數的特性來做的修改。
檔案下載
相關的目的程式和使用的工具,請直接至OllyDBG - 第十三章 | 反匯編練習 (四) 上,這邊下載
補充知識
- GetModuleHandleA函數:檢索指定模組的模組句柄。該模組必須已由調用進程加載。
- MessageBoxA函數:顯示模式對話框,其中包含系統圖標,一組按鈕和簡要的特定於應用程序的消息,例如狀態或錯誤訊息。消息框返回一個整數值,指示用戶單擊的按鈕。
注意:第一個參數HWND:要建立的消息框的所有者窗口的句柄。如果此參數為NULL,則消息框沒有所有者窗口。
- 所有
call
調用的函數,最後都是將回傳儲存在eax
裡面
使用OllyDBG分析
- 啟動
OllyDBG
- 按下快捷鍵
F3
- 選擇
RegisterMe.Oops.fixPE.exe
- 在入口點地址後面加上註解 (良好的註解有助於分析)
- 看到分別兩個的
Nag
視窗的代碼,傳入的第一個參數push 0
表示,在MessageBoxA
函數中hOwner
是傳送NULL
說明:該訊息視窗不屬於任何視窗
- 我們需要做的就是傳入一個不存在的視窗地址
- MessageBoxA函數,在找不到父視窗的狀態下,就不會產生訊息視窗
- 修改完畢
F8
一步一步觀察 - 恭喜兩個
Nag
視窗都沒有在跳出
總結
這邊的修改是針對函數的一個了解進行修改,所以在做反匯編的時候,函數的Documentation,是不可獲缺的。
然後在反匯編的過程中,看到任何函數調用,建議都可以去看看該函數的Documentation說明,多看多學。
註:我這邊提供一些可以參考的文章
CSDN billvsme的专栏 的 OllyDbg 使用笔记 (四)