首页
社区
课程
招聘
[原创]query-pdb: PDB文件在线解析服务
2023-2-20 21:39 19191

[原创]query-pdb: PDB文件在线解析服务

2023-2-20 21:39
19191

git链接:https://github.com/zouxianyu/query-pdb

 

详细的使用方法请见git仓库中的README文件,下面进行简要介绍。

 

query-pdb是一个用于在服务端解析PDB文件的工具,客户端只需要向服务端发送要查询程序文件的版本信息和所需的全局变量、函数名称、结构体属性名,即可得到对应的偏移量。

 

design

简介

PDB文件是Windows平台上的调试符号文件,其中记录着可执行文件的调试符号信息,包括全局变量、函数、结构体(联合体)、枚举等信息。微软为Windows平台上的一些可执行程序提供了PDB文件,例如ntdll.dll,ntoskrnl.exe和win32k.sys等。

 

一些系统级的安全软件需要定位操作系统内核中未公开的全局变量、函数名称、结构体属性偏移,这些偏移量可能随着系统的版本变化而变化,因此这些软件需要根据当前操作系统的版本决定其使用的偏移量。

 

目前主要有以下几种方案:

  1. 在内核中通过特征码定位到关键代码片段,再通过反汇编引擎解析。
  2. 针对不同版本号记录对应的偏移量。
  3. 在客户端下载PDB文件,本地解析。

第一种方案由于不同版本系统的特征码可能会有所变化,因此较难做到全系统适配。第二种方案同样需要在前期进行大量工作。第三种方案需要下载PDB文件(通常大于10M),有较大的网络流量开销。

 

上面的方法看起来都不够优雅,因此我编写了这个PDB在线解析工具。

服务端

服务端使用C++进行开发,不依赖于微软的DIA SDK,因此具有跨平台的特性,可以部署在Windows、Linux服务器上。

客户端

客户端同样使用C++进行开发,包含用户态和内核态的两个demo,也就是说,你可以在应用层发送请求,然后再将偏移量传输给内核驱动,这也是比较标准的做法。除此之外,你还可以在内核态直接向服务器发送请求获得偏移量。

使用方式简介

客户端发送如下请求:

1
2
3
4
5
6
7
8
9
10
{
    "name": "ntkrnlmp.pdb",
    "guid": "8F0F3D677778391600F4EB2301FFC7A5",
    "age": 1,
    "query": [
        "KdpStub",
        "MmAccessFault",
        "xxxxxx"
    ]
}

服务端响应如下:

1
2
3
4
5
{
    "KdpStub": 3773768,
    "MmAccessFault": 2454256,
    "xxxxxx": -1
}

运行演示

服务端日志

1
2
3
4
5
6
7
[2023-02-20 20:19:14.638] [info] create downloader, path: save, server: https://msdl.microsoft.com/download/symbols/
[2023-02-20 20:19:46.007] [info] symbol request: {"age":1,"guid":"152D2E35E673E842C282B1EDB82FD060","name":"ntkrnlmp.pdb
","query":["KdpStub"]}
[2023-02-20 20:19:46.009] [info] lookup pdb, path: ntkrnlmp.pdb/152D2E35E673E842C282B1EDB82FD0601/ntkrnlmp.pdb
[2023-02-20 20:19:46.010] [info] pdb already exists, path: ntkrnlmp.pdb/152D2E35E673E842C282B1EDB82FD0601/ntkrnlmp.pdb
[2023-02-20 20:19:48.638] [info] symbol request: {"age":1,"guid":"152D2E35E673E842C282B1EDB82FD060","name":"ntkrnlmp.pdb
","query":["KdpStub","MmAccessFault"]}

应用程序

 

client-user

 

驱动

 

client-kernel


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞15
打赏
分享
最新回复 (5)
雪    币: 264
活跃值: (654)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lainswork 2023-2-21 09:07
2
0
不错啊,以前写过类似的玩具版本,想不到有老哥专门搞了这种需求的服务架构,牛牛牛
雪    币: 2378
活跃值: (9195)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
TkBinary 5 2023-2-21 10:05
3
0
牛牛牛
雪    币: 149
活跃值: (1998)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
saloyun 2023-2-21 11:49
4
0
牛牛牛,思路打开。
雪    币: 229
活跃值: (213252)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
shinratensei 1 2023-2-21 19:14
5
0
tql
雪    币: 231
活跃值: (2256)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hambaga 2023-3-3 18:11
6
0
好东西
游客
登录 | 注册 方可回帖
返回