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

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

2023-2-20 21:39
21652

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

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

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

design

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

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

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

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

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

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

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

客户端发送如下请求:

服务端响应如下:

服务端日志

应用程序

client-user

驱动

client-kernel

 
 
 
 
 
 
{
    "name": "ntkrnlmp.pdb",
    "guid": "8F0F3D677778391600F4EB2301FFC7A5",
    "age": 1,
    "query": [
        "KdpStub",
        "MmAccessFault",
        "xxxxxx"
    ]
}
{
    "name": "ntkrnlmp.pdb",
    "guid": "8F0F3D677778391600F4EB2301FFC7A5",
    "age": 1,
    "query": [

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 15
支持
分享
最新回复 (5)
雪    币: 264
活跃值: (654)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错啊,以前写过类似的玩具版本,想不到有老哥专门搞了这种需求的服务架构,牛牛牛
2023-2-21 09:07
0
雪    币: 871
活跃值: (9841)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
3
牛牛牛
2023-2-21 10:05
0
雪    币: 436
活跃值: (2668)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
牛牛牛,思路打开。
2023-2-21 11:49
0
雪    币: 1671
活跃值: (215832)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
tql
2023-2-21 19:14
0
雪    币: 183
活跃值: (2576)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
好东西
2023-3-3 18:11
0
游客
登录 | 注册 方可回帖
返回
//