首页
社区
课程
招聘
[原创]win10 内核中遍历内核模块
2023-11-20 22:38 5079

[原创]win10 内核中遍历内核模块

2023-11-20 22:38
5079

//新人贴,只供自己学习 学习过了的就不要浪费时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <ntifs.h>
LONGLONG mGetModuleBaseByName(PDRIVER_OBJECT pDriver, UNICODE_STRING moduleName)
{
    UNREFERENCED_PARAMETER(moduleName);
    PLDR_DATA_TABLE_ENTRY pLdr = NULL;
    PLIST_ENTRY pListEntry = NULL;
    PLIST_ENTRY pCurrentListEntry = NULL;
 
    PLDR_DATA_TABLE_ENTRY pCurrentModule = NULL;
    pLdr = (PLDR_DATA_TABLE_ENTRY)pDriver->DriverSection;
    pListEntry = pLdr->InLoadOrderLinks.Flink;
    pCurrentListEntry = pListEntry->Flink;
 
    while (pCurrentListEntry != pListEntry)
    {
        //获取PLDR_DATA_TABLE_ENTRY结构
        pCurrentModule = CONTAINING_RECORD(pCurrentListEntry, LDR_DATA_TABLE_ENTRY, InLoadOrderLinks);
        if (pCurrentModule->BaseDllName.Buffer != nullptr)
        {
 
            DbgPrintEx(0, 77, "ModuleName:%wZ", pCurrentModule->BaseDllName);
         
            //比较模块名
            if (RtlCompareUnicodeString(&pCurrentModule->BaseDllName, &moduleName, true) == 0)
            {
                return (LONGLONG)pCurrentModule->DllBase;
            }
 
        }
        pCurrentListEntry = pCurrentListEntry->Flink;
    }
    return 0;
}
 
void UnDriverLoad(DRIVER_OBJECT* pDriver)
{
    UNREFERENCED_PARAMETER(pDriver);
}
 
extern "C" NTSTATUS DriverEntry(DRIVER_OBJECT * pDriver, UNICODE_STRING * pRegistryPath)
{
    UNREFERENCED_PARAMETER(pRegistryPath);
    pDriver->DriverUnload = UnDriverLoad;   
    UNICODE_STRING mName= RTL_CONSTANT_STRING(L"");
    mGetModuleBaseByName(pDriver, mName);
    return STATUS_SUCCESS;
}

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

最后于 2023-11-20 22:45 被foxkinglxq编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 19759
活跃值: (29377)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-11-21 09:33
2
1
感谢分享
游客
登录 | 注册 方可回帖
返回