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

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

2022-7-23 20:15
8438

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期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

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