惡意程式碼分析實戰Lab1204
GetModuleBaseName:獲取檔案程序完整路徑
EnumProcesses:檢索程序中的每一個程序識別符號。帶三個引數,DWORD 型別的陣列指標 lpidProcess;該陣列的大小尺寸 cb;以及一個指向 DWORD 的指標 pBytesRrturned,它接收返回資料的長度。DWORD 陣列用於儲存當前執行的程序 IDs。pBytesRrturned 返回陣列所用的記憶體大小
這裡就需要根據main中的分析,以及函式呼叫規則來判斷40312C的值了,eax是GetProcAddress的返回值,GetProcAddress是一個計算機函式,功能是檢索指定的動態連結庫(DLL)中的輸出庫函式地址。lpProcName引數能夠識別DLL中的函式。
所以,dword_40312C的值是EnumProcessModules的地址
同樣的,403128的值是GetModuleBaseNameA的地址
這樣就可以理解這樣的函式呼叫了:
函式用法舉例如下:
- char szPath[MAX_PATH] = { 0 };
- GetModuleBaseName(GetCurrentProcess(), NULL, szPath, sizeof(szPath));
所以401000函式功能是:使用GetModuleBaseName,獲得模組PID的基本名稱,嘗試匹配winlogon.exe
猜測惡意程式碼功能與winlogon.exe有關
在401174中,需要尋找sfc_os.dll:
在4011FC中:
執行了一個新程序
再次拿出Resource Hacker看一眼
有標準的MZ,嘗試儲存執行,雙擊~:和動態執行lab1204一樣的效果
分析這個在資源節的檔案:
看下修改時間
這個資料夾開啟之後,發現也需要學習一下
動態執行exe檔案:
和雙擊wupdmgr.exe一個效果~~~
問題1:401000的功能
猜測是加入啟動項
問題2:程式碼注入了哪個程序
注入的程序是wupdmgr.exe問題3:LoadLibrary載入了哪個dll
利用Imports
問題4:CreateRemoteThread的引數
返回的是一個地址(細節沒弄清楚)
問題5:釋放的惡意程式碼以及功能
釋放了winup.exe,位於Prefetch資料夾下,功能是下載惡意檔案
PLUS:
看了書後wp,才知道自己完全把程式碼邏輯理解錯了,細節完全不對,只是在大面上的分析和函式功能的猜測對了點
學習細節記錄一下
函式401174:
這裡彙編是這樣的奇怪姿勢:
函式的call呼叫考慮堆疊平衡,函式需要幾個引數,就是往上數幾個push,所以4011A1的push 2是GetProcAddress的第二個引數,也就是IDA的F5大法顯示的那個樣子
sfc_ds.dll已經載入到winlogon.exe,在新建立的執行緒中不需要載入這個DLL,所以沒有WriteProcessMemory的呼叫
在XP下,wupdmgr.exe被用作WIN系統的更新
為了隱藏視窗用0或者SW_HIDE作為uCmdShow引數的值來啟動