驅(qū)動-進(jìn)程隱藏
進(jìn)程概念
在接觸x86匯編以及Win32時,書中會提到進(jìn)程擁有獨(dú)?的4GB的虛擬內(nèi)存空間(x86下每個 進(jìn)程線性地址00000000h · 0FFFFFFFFh),由此可以看出進(jìn)程是空間上的概念(如果沒有線 程執(zhí)?進(jìn)程內(nèi)的數(shù)據(jù),猶如?潭死?,同時如果?個進(jìn)程內(nèi)所有線程都結(jié)束,那么操作系統(tǒng) 會釋放進(jìn)程)。
進(jìn)程的本質(zhì)只是決定了需要使?哪些相關(guān)的物理?。以及通過CR3來訪問這些數(shù)據(jù)。
當(dāng)我們在使?API OpenProcess 來打開?個進(jìn)程時,得到的返回值是?個HANDLE(句 柄),在內(nèi)核中通過此句柄值可以在當(dāng)前進(jìn)程私有句柄表中找到打開進(jìn)程對應(yīng)的內(nèi)核結(jié)構(gòu)體 (EPROCESS)。
內(nèi)核結(jié)構(gòu)體
測試環(huán)境為:Win7 x86 (2-9-9-12)
KPROCESS


EPROCESS



ActiveProcessLinks
ActiveProcessLinks該成員為雙向循環(huán)鏈表,指向了當(dāng)前正在運(yùn)?的進(jìn)程。
1. Windbg 輸?dt _EPROCESS 進(jìn)程結(jié)構(gòu)地址

2. 此結(jié)構(gòu)掛在EPROCESS + 0xB8位置,如果要獲得進(jìn)程結(jié)構(gòu)體需要減去對應(yīng)偏移.

3. 此雙向鏈表結(jié)構(gòu)圖如下

此處進(jìn)?斷鏈,部分API會失效同時任務(wù)管理器也不會顯?。?
斷鏈后程序可以正常運(yùn)?,因?yàn)镃PU的執(zhí)?和調(diào)度是基于線程的。
代碼?例
驅(qū)動代碼



遍歷代碼


驅(qū)動加載前:

驅(qū)動加載后:

目標(biāo)進(jìn)程不能被進(jìn)程快照查看!
????????????????????????????????????????????????????????????????????????---------------------Ferry學(xué)院