首页
社区
课程
招聘
求内核枚举驱动模块的代码和函数,跟贴有分
发表于: 2012-8-27 20:52 7047

求内核枚举驱动模块的代码和函数,跟贴有分

2012-8-27 20:52
7047
收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 1895
活跃值: (1642)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
我也喝多了才进来的。
2012-8-27 22:23
0
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
typedef struct _LDR_DATA_TABLE_ENTRY
{
        LIST_ENTRY      InLoadOrderLinks;
        LIST_ENTRY      InMemoryOrderLinks;
        LIST_ENTRY      InInitializationOrderLinks;
        PVOID           DllBase;
        PVOID           EntryPoint;
        ULONG           SizeOfImage;
        UNICODE_STRING  FullDllName;
        UNICODE_STRING  BaseDllName;

}LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
2012-8-27 22:42
0
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
/************************************************************************/
/* 枚举所有驱动模块
/* strDvrNameArray 为数组,保存每一个驱动模块的名称
/* uMaxCount 为 strDvrNameArray 的最大长度
/* 返回数组中元素的实际数目
/************************************************************************/
ULONG EnumDriverModule(PUNICODE_STRING strDvrNameArray, ULONG uMaxCount)
{
        /* 每一个驱动的 DriverObject->DriverSection 是一个指向 LDR_DATA_TABLE_ENTRY 的指针 */
        PLDR_DATA_TABLE_ENTRY pLDREntry = (PLDR_DATA_TABLE_ENTRY)pDrvObj->DriverSection;
        PLIST_ENTRY pEntry = pLDREntry->InLoadOrderLinks.Blink;

        ULONG uCount = 0;
        UNICODE_STRING wStrTmp;

        while(TRUE)
        {
                PLDR_DATA_TABLE_ENTRY pTmpPLDREntry = (PLDR_DATA_TABLE_ENTRY)pEntry;

                if(uCount >= uMaxCount)
                {
                        break;
                }

                if (pTmpPLDREntry == pLDREntry)
                {
                        break;
                }

                pEntry = pTmpPLDREntry->InLoadOrderLinks.Blink;                               

                if (pTmpPLDREntry->DllBase != 0 && pTmpPLDREntry->SizeOfImage > 0)
                {
                        strDvrNameArray[uCount] = pTmpPLDREntry->BaseDllName;
                        uCount++;
                }
        }

        return uCount;
}
2012-8-27 22:43
0
雪    币: 1625
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好懒啊,一句解说也没有,比我还懒
2012-8-27 22:54
0
雪    币: 1625
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
只得到了驱动模块的名称啊, 模块基址在哪里呢,请再说一下, 或者加点代码
2012-8-27 23:02
0
雪    币: 130
活跃值: (1005)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
typedef struct _SYSTEM_MODULE_INFORMATION  // Information Class 11
{
        ULONG  Reserved[2];  
        PVOID  Base;         
        ULONG  Size;        
        ULONG  Flags;      
        USHORT Index;        
        USHORT Unknown;     
        USHORT LoadCount;   
        USHORT ModuleNameOffset;
        CHAR   ImageName[256];  
} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;

BOOLEAN GetModuInfor(PULONG uBase,PULONG uSize,char *szModuleName)
{
        BOOLEAN b=FALSE;
        ULONG size,index;
        PULONG buf;
        PSYSTEM_MODULE_INFORMATION module;
        NTSTATUS status;
        ZwQuerySystemInformation(11,0, 0, &size); //获取大小
        if (size == NULL)
        {
                KdPrint(("size == NULL\n"));
                return 0;
        }
        buf = (PULONG)ExAllocatePool(PagedPool, size); //分配内存
        if(NULL==buf)
        {
                DbgPrint("failed alloc memory failed  \n");
                return 0;
        }
        status=ZwQuerySystemInformation(11,buf, size , 0);//获取模块信息
        if(!NT_SUCCESS( status ))
        {
                DbgPrint("failed  query\n");
                return 0;
        }
        module = (PSYSTEM_MODULE_INFORMATION)(( PULONG )buf + 1);
        for (index=0;index <*buf ;index++ )
        {
                if (_stricmp(module[index].ImageName + module[index].ModuleNameOffset, szModuleName) == 0) //判断
                {
                        *uBase = (ULONG)module[index].Base;
                        *uSize = (ULONG)module[index].Size;
                        b=TRUE;
                        break;
                }
        }
        ExFreePool(buf);
        return b;
}
if(GetModuInfor(&g_SysBase,&g_SysSize,"dump_wmimmc.sys"))

留意LZ和飞天大虾很久了 嘿嘿
最近飞天大虾好像失踪了
2012-8-27 23:45
0
雪    币: 1625
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
留意LZ和飞天大虾很久了 嘿嘿
最近飞天大虾好像失踪了

为啥留意小弟
2012-8-27 23:57
0
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
正好最近手头紧,接分买邀请码送人。
2012-8-28 00:15
0
雪    币: 77
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mark
2014-4-24 18:02
0
雪    币: 57
活跃值: (791)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
动态加载的驱动模块也能枚举到么?
2014-5-29 11:33
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
动态加载的驱动模块也能枚举到么?
2014-8-7 14:43
0
游客
登录 | 注册 方可回帖
返回
//