前言 :
現在進入第三篇,這一篇我們重點講解怎樣使用 OllyDBG 中的函數參考(即名稱參考)功能. 而使用範例是我在Virus Training 第四天分析的第四支 Virus sample. 該 Virus sample 會在已感染的檔案裡做標記, 這樣下次就不會重複感染. 而我們這裡將利用設定函數參考的技巧來幫助我們分析組碼.
排除病毒自我檢查 :
由於事先的分析, 我們知道該病毒會透過 API:GetProcAddress 來得到 API:IsDebuggerPresent 函式的位置並知道自己是否在 Debugger 模式下執行藉以避免被分析或追蹤, 因此我們在反編譯視窗按右鍵並 Search for -> All intermodular calls, 並出現下面視窗, 接著鍵入 "GetProcAddress" 得到對應位置 :
接著選擇該行, 點擊右鍵並選擇 > 'Set breakpoint on every call to GetProcAddress' 後 double click 該行回到反編譯組碼視窗 :
回到反編譯組語視窗後, 按下 F9 讓程式繼續執行, 接著會發現 Ollydbg 停在我們剛剛設的斷點 :
接著我們來分析這段組語 :
由上面分析我們知道為了讓病毒相信目前並不是在 debugger 模式下, 我們要在呼叫 API:IsDebuggerPresent 後, 在 CMP EAX,1 時將暫存器 EAX 的值設為0. 所以請按 F8 一直執行到該行, 並在反編譯組碼視窗的右方 暫存器與旗標視窗 在 EAX 暫存器上點擊右鍵並選擇 Modify 修改其值為 0 :
到目前為止, 我們已經成功矇騙該病毒目前為 Debugger 模式, 但還有更精彩的在後面. 接著該病毒會去註冊碼檢查是否有安裝防毒軟體, 藉以逃避防毒軟體的掃描. 從此我們知道了下一步該如何著手了, 因為病毒必須透過函式 RegOpenKey 打開註冊碼, 所以我們必須要找到呼叫該函式的地方並設斷點進行分析. 透過剛剛介紹的技巧, 我們可以很快的找到呼叫 RegOpenKeyA 的位置, 並在呼叫之前設定斷點以便後續分析 :
接著我們來分析這一段的組碼 :
一樣為了欺騙病毒, 我們必須在每次呼叫完 RegOpenKey 後將 EAX 暫存器設為非零值 (註冊碼開啟失敗) 來讓病毒誤以為沒有裝防毒軟體來讓我們得以分析病毒的行為. 底下是執行過程的截圖, 可以看出病毒嘗試透過註冊碼去檢查電腦是否有安裝 Symantec :

病毒搜尋檔案與感染 :
接著病毒便會去 C:\WINDOWS, C:\WINDOWS\system32 目錄下去搜尋可執行檔 (.exe) 並將之感染, 並在該檔案記憶體偏移位置 0xc000 位置上留下 Mark, 以避免重複感染. 而後續的分析過程便不在此延續, 只要透過剛剛介紹如何尋找特殊函數的位置與對函數設斷點與適當的修改暫存器便可以很順利的分析出病毒的行為.
沒有留言:
張貼留言