枚举PspCidTable利用API

转载 2011年01月19日 10:32:00

看Windows内核情景分析的时候看到讲PspCidTable中会保存每个进程和线程的CID,就在想可以通过这个表来获取到每个进程的PID及相关信息,然后网上一搜,已经有N多人通过这种方法来获取进程列表了,Iceword也是有这种方法来枚举进程的。Anyway,还是自己实现一遍吧。当然也借鉴了别人的代码。

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
    HANDLE h;
   
    DbgPrint("DriverEntry/n");
    DriverObject->DriverUnload = DrvUnload;
   
   
    ExEnumHandleTable = (EXENUMHANDLETABLE)GetFunctionAddr(L"ExEnumHandleTable");
    if(ExEnumHandleTable == NULL )
    {
        DbgPrint("Get ExEnumHandleTable Address Error/n");
        return STATUS_SUCCESS;
    }
    DbgPrint("Address of ExEnumHandleTable:%x/n", ExEnumHandleTable);
   
    GetPspCidTable();
    DbgPrint("CidTable:%x/n", pPspCidTable);
   
    ExEnumHandleTable(pPspCidTable, ExEnumHandleCallBack, NULL, &h);
   
    return STATUS_SUCCESS;
}void GetPspCidTable( )
{
    PUCHAR cPtr;
    DWORD PsAddr = GetFunctionAddr(L"PsLookupProcessByProcessId");
   
    for(cPtr = (PUCHAR)PsAddr;
        cPtr < (PUCHAR)PsAddr + PAGE_SIZE; cPtr++)
    {
        if(*(PUSHORT)cPtr == 0x35FF)
        {
            pPspCidTable = **(PVOID**)(cPtr+2);
            break;
        }
    }
}BOOLEAN ExEnumHandleCallBack(PHANDLE_TABLE_ENTRY HandleTableEntry, HANDLE Handle, PVOID EnumParameter)
{
    NTSTATUS ntStatus;
    HANDLE Cid;
    PEPROCESS Process;
    ULONG uTableCount;
    ULONG uTablePage = 0;
   
    if(EnumParameter == HandleTableEntry)
    {
        return TRUE;
    }
    else
    {
        for(uTableCount = 0; uTableCount < 0x1000; uTableCount++)
        {
            if(HandleTableEntry->Object)
            {
                Cid = (HANDLE)((1024*uTablePage)+(uTableCount<<2));
                if(Cid > (PVOID)4)
                {
                    ntStatus = PsLookupProcessByProcessId(Cid, &Process);
                    if(NT_SUCCESS(ntStatus))
                    {
                        DbgPrint("PID:%4d/tProcess Name:%-16s/n",
                            Cid, ((PUCHAR)Process+EPROC_NAME_OFFSET));
                        ObDereferenceObject(Process);
                    }
                }
                else
                {
                    if(Cid == 0)
                    {
                        DbgPrint("PID:%4d/tProcess Name:Idle/n", 0);
                    }
                    else
                    {
                        DbgPrint("PID:%4d/tProcess Name:System/n", 4);
                    }
                }
            }
        }
        uTablePage++;
        return TRUE;
    }
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/strongxu/archive/2009/12/07/4959757.aspx

PspCidTable进程枚举

-------------------------------------这是分割线--------------------------------------- Windows句柄表格式 ...
  • rongwenbin
  • rongwenbin
  • 2014年02月25日 15:44
  • 891

【原创】remove some info from pspcidtable WIN7X64

不废话 直接防码  补充代码有网了:【分享】x64 antidebug 不触发PG http://bbs.pediy.com/showthread.php?p=1385028#post1385028 ...
  • qq_18942885
  • qq_18942885
  • 2015年08月27日 09:03
  • 874

PspCidTable

PspCidTable也是一个句柄表,其格式与普通的句柄表是完全一样的.但它与每 个进程私有的句柄表有以下不同: 1.PspCidTable中存放的对象是系统中所有的进线程对象,其索引就是PID和TI...
  • qiaoli278141408
  • qiaoli278141408
  • 2015年03月12日 15:02
  • 1188

x64通过PspCidTable遍历进程

PspCidTable可以在PsLookupProcessByProcessId下寻找 我这硬编码了 只适用于win7 x64 其它版本需要自己改下特征码 #include exte...
  • zhuhuibeishadiao
  • zhuhuibeishadiao
  • 2016年06月05日 03:10
  • 1136

PspCidTable 完全解读

PspCidTable 完全解读 by sysdog 2009.5.1 Whu -----------------------------------------------------------...
  • whatday
  • whatday
  • 2013年12月07日 17:01
  • 1479

关于PspCidTable

PspCidTable为一个全局变量,其格式与普通的句柄表是完全一样的. 但它与每个进程私有的句柄表有以下不同:  1.PspCidTable中存放的对象是系统中所有的进线程对象指针,其索引就是P...
  • zfdyq0
  • zfdyq0
  • 2014年10月20日 00:36
  • 537

pspCidTable

一.                        pspCidTable概念及内核调试-----------------------------------------------------psp...
  • cmdhack
  • cmdhack
  • 2010年10月14日 20:32
  • 713

利用按位取反(~)从复合枚举值里清除枚举值

以 C# 中的 System.Drawing.FontStyle 为例。   如果需要同时有多种效果, 如:“粗体”和“下划线”的效果,可以用按位或(|) FontStyle style =...
  • hchaoh
  • hchaoh
  • 2017年04月06日 15:50
  • 617

用于枚举出ftp下所有文件的工具

参考网上代码写出的,有问题请在该git里修改 localftp = LocalFTP('192.168.70.100','210','anonymous','pas') #localftp...
  • anzhuangguai
  • anzhuangguai
  • 2016年10月09日 16:32
  • 194

句柄表和pspcidtable

首先要先BS一下自己.一直以为进程的句柄表和PspCidTable是一样的.结果因为概念上的理解错误导致偶浪费了不少时间.多亏好心的FC的耐心指导算是明白一些.总结一下FC教偶的: PspCidTab...
  • yaneng
  • yaneng
  • 2009年06月18日 15:59
  • 637
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:枚举PspCidTable利用API
举报原因:
原因补充:

(最多只允许输入30个字)