1. 程式人生 > >惡意程式碼分析實戰Lab1204

惡意程式碼分析實戰Lab1204

GetModuleBaseName:獲取檔案程序完整路徑

EnumProcesses:檢索程序中的每一個程序識別符號。帶三個引數,DWORD 型別的陣列指標 lpidProcess;該陣列的大小尺寸 cb;以及一個指向 DWORD 的指標 pBytesRrturned,它接收返回資料的長度。DWORD 陣列用於儲存當前執行的程序 IDs。pBytesRrturned 返回陣列所用的記憶體大小

這裡就需要根據main中的分析,以及函式呼叫規則來判斷40312C的值了,eax是GetProcAddress的返回值,GetProcAddress是一個計算機函式,功能是檢索指定的動態連結庫(DLL)中的輸出庫函式地址。lpProcName引數能夠識別DLL中的函式。

所以,dword_40312C的值是EnumProcessModules的地址

同樣的,403128的值是GetModuleBaseNameA的地址

這樣就可以理解這樣的函式呼叫了:


函式用法舉例如下:

  1. char szPath[MAX_PATH] = { 0 };  
  2. 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引數的值來啟動