Posted on 2009-10-25 17:03
S.l.e!ep.¢% 閱讀(281)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
RootKit
關(guān)于進(jìn)程枚舉2009-10-18 14:30使用QuerySystemInformation的效果是下面的調(diào)用ProcessInformation->ExpGetProcessInformation-> PEB中的ActiveProcess雙向鏈表
昨天的PspCidTable在不同版本的HANDLE_TABLE結(jié)構(gòu)體相差非常大,不過(guò)在內(nèi)核模式中使用ExEnumHandleTable也許能避免這一差異,還沒(méi)有式
也就是說(shuō)如果進(jìn)程斷鏈,NtQuerySystemInformation就失敗了,并且斷鏈很不好收拾。
所以還是恢復(fù)正常的函數(shù)調(diào)用后,for(){openProcess(i)}稍微好一點(diǎn)
附上某彪悍解決方案:
進(jìn)程遍歷:
1.native api獲得進(jìn)程表a
2.通過(guò)activelist獲得進(jìn)程表b
3.通過(guò)pspCidTable獲得進(jìn)程表c
4.通過(guò)handletablelisthead獲得進(jìn)程表d
5.通過(guò)csrss的handletable用2種方法枚舉獲得進(jìn)程表e和f
6.通過(guò)掃描當(dāng)前進(jìn)程的handletable獲得進(jìn)程表g
7.遍歷表c的每一個(gè)進(jìn)程的SessionProcessLinks獲得進(jìn)程表h
8.遍歷表c的每一個(gè)進(jìn)程Vm.WorkingSetExpansionLinks獲得進(jìn)程表i
9.通過(guò)Typelist分別取process和thread的表j和表k
10.通過(guò)表k得到進(jìn)程表l
11.搜索內(nèi)存中的threadobject和processobject得到進(jìn)程表m
12.通過(guò)Wait/Dispatch得到進(jìn)程表n
13.如果系統(tǒng)是Win2003以上遍歷表c的每一個(gè)進(jìn)程的MmProcessLinks得到表o
14.綜合上面的進(jìn)程表得到表p
15.對(duì)表p每一個(gè)進(jìn)程做HandleTable,Vm.WorkXX,MmProcessXX,SessionProcessList掃描得到表q
16.枚舉HWNDHandle得到進(jìn)程表r
17.枚舉JobObject得到表s
18.綜合得表t,此時(shí)枚舉結(jié)束~~
動(dòng)態(tài)部分:
KiReadyThread
和KiSwapContext的鉤子
還有KiService鉤子
還有CreateProcessNotifyRoutine和CreateThreadNotifyRoutine
NtCreateThread鉤子
動(dòng)態(tài)維護(hù)一張表,靜態(tài)枚舉結(jié)束后綜合兩表~
?