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

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

2023-11-20 22:38
4623

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

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;
}

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

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