Posted on 2009-10-25 17:03
S.l.e!ep.¢% 阅读(277)
评论(0) 编辑 收藏 引用 所属分类:
RootKit
关于进程枚举2009-10-18 14:30使用QuerySystemInformation的效果是下面的调用ProcessInformation->ExpGetProcessInformation-> PEB中的ActiveProcess双向链表
昨天的PspCidTable在不同版本的HANDLE_TABLE结构体相差非常大,不过在内核模式中使用ExEnumHandleTable也许能避免这一差异,还没有式
也就是说如果进程断链,NtQuerySystemInformation就失败了,并且断链很不好收拾。
所以还是恢复正常的函数调用后,for(){openProcess(i)}稍微好一点
附上某彪悍解决方案:
进程遍历:
1.native api获得进程表a
2.通过activelist获得进程表b
3.通过pspCidTable获得进程表c
4.通过handletablelisthead获得进程表d
5.通过csrss的handletable用2种方法枚举获得进程表e和f
6.通过扫描当前进程的handletable获得进程表g
7.遍历表c的每一个进程的SessionProcessLinks获得进程表h
8.遍历表c的每一个进程Vm.WorkingSetExpansionLinks获得进程表i
9.通过Typelist分别取process和thread的表j和表k
10.通过表k得到进程表l
11.搜索内存中的threadobject和processobject得到进程表m
12.通过Wait/Dispatch得到进程表n
13.如果系统是Win2003以上遍历表c的每一个进程的MmProcessLinks得到表o
14.综合上面的进程表得到表p
15.对表p每一个进程做HandleTable,Vm.WorkXX,MmProcessXX,SessionProcessList扫描得到表q
16.枚举HWNDHandle得到进程表r
17.枚举JobObject得到表s
18.综合得表t,此时枚举结束~~
动态部分:
KiReadyThread
和KiSwapContext的钩子
还有KiService钩子
还有CreateProcessNotifyRoutine和CreateThreadNotifyRoutine
NtCreateThread钩子
动态维护一张表,静态枚举结束后综合两表~