首页
社区
课程
招聘
[原创]分享一个超简单的PDB解析库EasyPdb
发表于: 2022-7-23 20:15 9635

[原创]分享一个超简单的PDB解析库EasyPdb

2022-7-23 20:15
9635

github:
https://github.com/Kwansy98/EasyPdb

 

最近在写ARK工具,有使用未导出函数,访问某些内核结构的需求。github上有不少相关的库,如raw_pdb, pdbex等,但是里面很多功能我用不到,所以我自己封装了一个精简版的PDB解析库,可以很方便地下载PDB,获取全局变量和函数的RVA,以及获取结构体字段偏移。

 

图片描述

 

用法也是非常简单的,几个API看参数就能知道是干什么的:

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
48
49
50
51
52
53
int test2()
{
    EZPDB pdb = { 0 };
 
#ifndef _AMD64_
    PVOID OldValue = NULL;
    Wow64DisableWow64FsRedirection(&OldValue);
#endif
 
    // "http://msdl.blackint3.com:88/download/symbols/"
    DWORD dwError = EzInitPdb(&pdb, "C:\\Windows\\System32\\", "ntoskrnl.exe", TRUE, NULL, "D:\\symboldownload");
 
#ifndef _AMD64_
    Wow64RevertWow64FsRedirection(&OldValue);
#endif
 
    if (dwError != 0)
    {
        printf("init pdb error: %x\n", dwError);
        return dwError;
    }
 
    dwError = EzLoadPdb(&pdb);
    if (dwError != 0)
    {
        printf("load pdb error: %x\n", dwError);
        return dwError;
    }
    DWORD rva = 0;
    DWORD Offset = 0;
    if (EzGetRva(&pdb, "KeServiceDescriptorTable", &rva))
    {
        printf("KeServiceDescriptorTable: %x\n", rva);
    }
 
    if (EzGetRva(&pdb, "PspTerminateThreadByPointer", &rva))
    {
        printf("PspTerminateThreadByPointer: %x\n", rva);
    }
 
    if (EzGetOffset(&pdb, "_EPROCESS", L"ActiveProcessLinks", &Offset))
    {
        printf("_EPROCESS.ActiveProcessLinks: %x\n", Offset);
    }
    if (EzGetOffset(&pdb, "_ETHREAD", L"ThreadListEntry", &Offset))
    {
        printf("_ETHREAD.ThreadListEntry: %x\n", Offset);
    }
 
    EzPdbUnload(&pdb);
 
    return 0;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 3
支持
分享
最新回复 (9)
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
菜鸟路过 为啥地址不是 PspCreateProcessNotifyRoutine FFFFF80004038500 这样的 而是 000000000021B500 这样的
2023-1-16 08:38
0
雪    币: 2141
活跃值: (5173)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
ThanatosKer 菜鸟路过 为啥地址不是 PspCreateProcessNotifyRoutine FFFFF80004038500 这样的 而是 000000000021B500 这样的[em_16]
加上Ntoskrnel的基质
2023-1-16 08:42
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
Oxygen1a1 加上Ntoskrnel的基质
谢谢 我现在试一试
2023-1-16 16:58
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
ntoskrnel+pdb 函数地址PspCreateProcessNotifyRoutine FFFFF80014085780
真实地址 PspCreateProcessNotifyRoutine FFFFF80004085780
咋办 大佬
2023-1-16 18:04
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
Oxygen1a1 加上Ntoskrnel的基质
搞定了 谢谢
2023-1-17 17:12
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
为啥我这没有EZPDB这个结构体呀
2023-12-6 23:01
0
雪    币: 183
活跃值: (2576)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
wx_ㅤ_863 为啥我这没有EZPDB这个结构体呀
我改了,可以参考github上面的demo
2023-12-8 09:47
0
雪    币: 2141
活跃值: (5173)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
hambaga 我改了,可以参考github上面的demo
上班摸鱼是吧
2023-12-8 09:50
0
雪    币: 183
活跃值: (2576)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
Oxygen1a1 上班摸鱼是吧[em_47]
2023-12-13 13:04
0
游客
登录 | 注册 方可回帖
返回
//