windows任務(wù)管理器中隱藏進程的方法
在WinNT下 "真正隱藏進程 "這一說法,可以講是根本不可能實現(xiàn),只要我們的程序是以進程內(nèi)核的形式運行,都是不可能逃離CTRL+ALT+DEL的法眼。那么奇怪了,這豈不是與我們的標題《WinNT & Win2K下實現(xiàn)進程的完全隱藏》相矛盾嗎?是的,實際上應(yīng)該是:以非進程方式執(zhí)行目標代碼,而逃避進程查看器的檢查,從而達到 "進程隱藏 "的目的。
我們這里用的,是在宿主進程中,以線程的方式執(zhí)行我們的代碼。實現(xiàn)起來非常簡單。首先,我們先建立一個不執(zhí)行任何語句的線程
DWORD stdcall ThreadProc(LPVOID *lpVoid){
return 0;
}
然后,將線程代碼拷備至宿主進程所能夠執(zhí)行的任何地方(即頁面屬性為PAGGE_EXECUTE_READWRITE),如:共享內(nèi)存影射區(qū)、宿主進程內(nèi)。這里我們選擇宿主進程,拷備的時侯,我們需要先在宿主進程中使用VirtualAllocEx函數(shù)申請一段內(nèi)存,然后再使用WriteProcessMemory將線程體寫入宿主進程中。
以上工作完成后,我們便可CreateRemoteThread函數(shù)激活其執(zhí)行。下面給出一個完整的例子
//遠程線程執(zhí)行體
DWORD __stdcall ThreadProc (void *lpPara){
return 0;
}
int main(int argc, char* argv[]){
const DWORD THREADSIZE=1024*4;//暫定線程體大小為4K,實際上沒這么大,稍后我將會介紹
DWORD byte_write;
//獲得指定進程ID句柄,并設(shè)其權(quán)限為PROCESS_ALL_ACCESS,992是宿進程的ID號,獲取ID號的方法這里我就不多講了
HANDLE hWnd = ::OpenProcess (PROCESS_ALL_ACCESS,FALSE,992);
if(!hWnd)return 0;
void *pRemoteThread =::VirtualAllocEx(hWnd,0,THREADSIZE,MEM_COMMIT| MEM_RESERVE,PAGE_EXECUTE_READWRITE);//申請
if(!pRemoteThread)return 0;
if(!::WriteProcessMemory(hWnd,pRemoteThread,&ThreadProc,THREADSIZE,0))//寫入進程
return 0;
//啟動線程
HANDLE hThread = ::CreateRemoteThread (hWnd ,0,0,(DWORD (__stdcall *)(void *))pRemoteThread ,NULL,0,&byte_write);
if(!hThread){ //還有內(nèi)存分配未釋放
return 0;
}
return 0;
}
到這里,對于隱藏的方法就算告一段落,相信看過的朋友對這個思路有個非常明確的概念了吧。
在理解隱藏的方法后,我們著重開始寫線程的執(zhí)行部分了。如下:
DWORD __stdcall ThreadProc(void *lpPara){
MessageBox(NULL, "hello ", "hello ",0);
return 0;
}
編譯執(zhí)行后,你會發(fā)現(xiàn)出現(xiàn)一個非法操作錯誤,為什么呢?在我們以段頁式內(nèi)存管理的win2K操作系統(tǒng)中,編譯時會把所有的常量編譯在PE文件的.data節(jié)中,而代碼段則在.text中,所以,我們拷備到宿主進程中的代碼是在.text中的代碼,MessageBox(NULL,(char *)指針,p,0);所指向的地址是本進程的內(nèi)存虛擬地址。而在宿主進程中是無法訪問的。解決的方法很簡單,按舊照搬的將 "hello "也拷備到目標進程中,然后再引用。同理,MessageBox函數(shù)地址編譯時,也是保存在.Import中,寫過Win2k病毒的朋友都知道,所有常量與函數(shù)入口地址都需在代碼段定義與得出,我們這里也與他有點類似。言歸正傳,同樣情況我們也把函數(shù)的入口地址一起寫入目標進程中。
//先定義參數(shù)結(jié)構(gòu)
typedef struct _RemotePara{//參數(shù)結(jié)構(gòu)
char pMessageBox[12];
DWORD dwMessageBox;
}RemotePara;
//付值
RemotePara myRemotePara;
::ZeroMemory(&myRemotePara,sizeof(RemotePara));
HINSTANCE hUser32 = ::LoadLibrary ( "user32.dll ");
myRemotePara.dwMessageBox =(DWORD) ::GetProcAddress (hUser32 , "MessageBoxA ");
strcat(myRemotePara.pMessageBox, "hello\0 ");
相關(guān)文章

網(wǎng)絡(luò)工程師必備的6款配置文件編輯神器:替代Notepad++!
本期文章介紹了六種網(wǎng)工必備工具,這些工具是網(wǎng)絡(luò)工程師日常工作中必不可少的,也是那些立志成為網(wǎng)絡(luò)工程師的人應(yīng)該熟悉的2026-04-13
首個版本v1.111已上線! VS Code開啟周更狂飆模式
026年3月10日,微軟宣布將Visual Studio Code(VS Code)更新節(jié)奏從月更提速至周更,并發(fā)布首個周更版本v1.1112026-03-11
AI直接調(diào)試瀏覽器! VS Code重大更新發(fā)布
還在手動打開瀏覽器、點擊按鈕、檢查控制臺報錯?太累了!現(xiàn)在,最新的VS Code 1.110中AI可以直接調(diào)試瀏覽器2026-03-10
今天帶大家來共同學(xué)習VC++6.0無法正常運行怎么辦?下面就是詳細完整的操作步驟,快跟小編一起來學(xué)習一下2026-02-27
vscode調(diào)試c代碼始終找不到exe可執(zhí)行文件的詳細及解決辦法
在 VS Code 中調(diào)試 C++ 項目時,常見報錯:“無法啟動調(diào)試會話:找不到可執(zhí)行文件”,這個問題問題通常是由于環(huán)境配置不當、缺少編譯步驟、路徑設(shè)置錯誤、或是launch.json2026-02-27
vscode入門! 小白都能看懂的VS Code保姆級級使用教程
相對于其它前端工具來說,VSCode顯得更加的流暢,今天就將我的學(xué)習經(jīng)歷和大家分享一下,希望可以幫助到有需要的人2026-02-27
2026年真正值得裝、用得上、不雞肋的 VSCode 插件,其實沒那么多——挑10個“神級”不難,但得是每天打開就用、關(guān)掉就難受的那種2026-02-10
VS Code 和 VSCodium怎么選? vscode 和 vscodium之間的區(qū)別
咱們今天就來聊聊 Visual Studio Code (VS Code) 和 VSCodium的相似與區(qū)別,詳細請看下文介紹2026-01-10
如何啟用.NET Framework3.5? 一鍵安裝net3.5解決軟件依賴問題
你是否曾在安裝某些軟件時遇到過“需要.NET Framework 3.5”的提示?實,只需要幾步簡單的操作,你就可以輕松解決這個問題2025-10-28
VS Code中Java擴展代碼重構(gòu)功能的使用詳解
在軟件開發(fā)過程中,重構(gòu)是一個非常重要的環(huán)節(jié),重構(gòu)可以提高代碼的可讀性、可維護性和可擴展性,使代碼更加健壯和易于理解,本文將介紹如何使用 VSCode 進行 Java 代碼重構(gòu)2025-09-20





