惡意代碼隐藏之程序僞裝
介紹
通常情況下,為了永久駐留在使用者計算機上面,木馬程式會披上厚厚的僞裝,來躲過使用者的常識判斷和一些殺軟的檢測。很多病毒都需要巧妙地隐藏手段來讓自己和一個正常的程式一樣正大光明的運作在作業系統上。隐藏的手段多種多樣,有些是利用較為隐蔽的自啟動和植入技術,不需要額外僞裝也能起到免殺的效果。
程序僞裝
當一個惡意程式将自己的名稱改為和系統自帶的一些程式名稱相同,有時就能騙過使用者和殺軟的“眼睛”,即使和被冒充的那個程序資訊相同,但是内部執行的代碼确實我們自己定義的,通過修改指定程序的
PEB
中的路徑和指令行資訊來實作僞裝。
- 一些系統程序的作用
程序名稱 | 作用描述 |
---|---|
| 會話管理(Session Manager) |
| 子系統伺服器程序 |
| 管理使用者登入 |
| 包含很多系統服務 |
| 包含很多系統服務,從 中運作的服務的通用主機名稱 |
| 将檔案加載到記憶體中以便之後列印 |
| 資料總管 |
- 函數介紹
函數
NtQueryInformationProcess
:擷取指定程序的資訊

- 實作原理
程序僞裝的關鍵在于程序環境塊的擷取,可由上述函數
NtQueryInformationProcess()
來擷取指定程序的
PEB
位址,擷取之後通過調用函數
ReadProcessMemory()
和
WriteProcessMemory()
來讀寫目标程序記憶體。具體實作流程如下:
- 根據
打開指定程序PID
- 從
中擷取ntdll.dll
函數的導出位址NtQueryInformationProcess()
- 使用
函數擷取指定的程序基本資訊NtQueryInformationProcess
并從中擷取指定程序的PROCESS_BASIC_INFORMATION
PEB
- 最後,就可以根據程序環境塊中的
來擷取指定程序的ProcessParameters
資訊,這是因為RTL_USER_PROCESS_PARAMETERS
的路徑資訊、指令行資訊存儲在這個結構體 中。調用PEB
和WriteProcessMemory()
函數可以修改ReadProcessMemory()
中的路徑資訊、指令行資訊等,進而 實作程序僞裝。PEB
注意:在實作的時候要注意系統的版本是32位還是64位