进程的源头------>_EPEOCESS结构:
1.(仅限于内核模式)调用PsGetCurrentProcess取得一个指向当前进程的_EPROCESS指针.遍历其中的LIST_ENTRY成员即可获得当前运行的进程.
2.用户模式下可以调用原生模式的API函数,比如使用SystemProcessInformation类调用NtQuerySystemInformation函数,
3.直接使用win32 PAI比如CreateToolHelp32Snapshot.或者EnumProcess.
以上只是最基本的方法.如果从LIST_ENTRY中摘除某个_EPROCESS,以上方法全部失效.
Volatility中pslist正是使用遍历双向链表的方法检测进程(检测强度不够).
Vol中提供了不同方式的搜索机制.集成到了psxview中:
1.遍历_EPROCESS中的LIST_ENTRY.(pslsit)
2.遍历CSRSS进程中的process列表.(cssrss_list目前已经集成到psxview中)
3.通过PspCidTable中的handle检测进程.(google PspCidTable)
4.内存暴力搜索_EPROCESS对象.(在内存中搜索特征符合_EPROCESS的内存区域)
运行效果如下:
1_doc_RCData_61用pslist检测不出来.但是使用其他方式就暴露了它的存在.