首页
社区
课程
招聘
[分享] 全版本 ntoskrnl 任意函数 offset 打包提取/工具
发表于: 3天前 1324

[分享] 全版本 ntoskrnl 任意函数 offset 打包提取/工具

3天前
1324

kphtools 是一套自动化工具链,能从 Microsoft 符号服务器自动下载各版本 ntoskrnl.exe 及其 PDB,解析符号、提取结构体偏移与函数地址,最终一键导出为 SystemInformer 的 kphdyn.xml


Why not 联网查询?

来你给我个能查询全版本未导出函数RVA的网站

Why not signature?

如果你用过 Windows 内核的某些未导出函数/变量/结构,一定深有体会:

手动维护特征码,会出现某些版本特征码失效的情况,有时候想稳定在全版本windows上定位一个函数甚至需要114514个特征码,这谁受得了。

kphtools 直接一劳永逸地为每一个版本的ntos维护一个offset合集

Microsoft Symbol Server
        ↓  自动下载 PE + PDB
   符号解析(YAML 中间产物)
        ↓  结构体偏移 / 函数RVA / 变量RVA
   导出 kphdyn.xml
        ↓
   喂给SystemInformer工具链 或者 一↑秒钟写一段代码之:帮我写一个函数,从kphdyn.xml中根据当前ntoskrnl.exe版本加载特定的offset

Why SystemInformer / why kph?

谁爱造轮子谁造,我反正不造,有开源的生态不用白不用


核心能力一览

能力 说明
自动下载 PE & PDB 从 Microsoft 符号服务器按 kphdyn.xml 中的条目,批量下载指定架构、指定版本的 ntoskrnl 二进制及符号文件
符号解析 & YAML 导出 将 PDB 符号解析为结构化 YAML,方便后续使用
LLM 辅助反编译 支持接入大模型,辅助分析未导出函数逻辑,自动提取未命名的函数调用/全局变量。结构体偏移
IDA Pro 集成 联动 IDA(通过 idalib-mcp)生成参考反汇编,函数 VA、反编译伪代码一并归档
一键导出 XML update_symbols.py 将 YAML 产物合并导出为标准 kphdyn.xml,缺失项自动填 0xffff / 0xffffffff
上传服务器 内置 HTTP 服务器,支持从用户那里搜集 ntoskrnl 文件,自动校验 PE 签名、自动归档存储
CI/CD 友好 提供完整 Jenkins Pipeline / Github Actino Runner 参考,首次运行约数小时,后续增量更新仅需约 10 分钟图片描述

快速上手

# 1. 获取上游最新的 kphdyn.xml
wget 9e9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6J5j5i4N6Q4x3X3g2Y4K9i4c8Z5N6h3u0#2M7$3g2J5j5$3!0F1N6r3g2F1N6q4)9J5k6h3y4G2L8g2)9J5c8Y4N6A6L8Y4y4A6k6r3g2J5M7%4y4Q4x3V1k6K6P5i4y4@1k6h3#2A6L8X3k6G2M7X3#2W2M7W2)9J5c8Y4u0W2k6Y4y4Q4x3V1k6Z5k6h3q4V1M7#2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8X3E0H3K9r3I4A6j5W2)9J5c8X3E0H3K9r3c8&6L8W2)9J5k6i4S2E0L8l9`.`.

# 2. 将本地的symboldir里的游离ntoskrnl同步到kphdyn.xml里 (可选)
uv run update_symbols.py [-xml="kphdyn.xml"] [-symboldir="path/to/symbols"] [-configyaml="config.yaml"] -syncfile

# 3. 下载符号文件(首次耗时较长)
uv run download_symbols.py [-xml="kphdyn.xml"] -[symboldir="path/to/symbols"] [-fast]

# 4. 从exe/pdb里提取必要信息,并输出到YAML
uv run dump_symbols.py [-symboldir="path/to/symbols"] [-configyaml="config.yaml"] [-debug]

# 5. 导出 kphdyn.xml
uv run update_symbols.py [-xml="kphdyn.xml"] [-symboldir="path/to/symbols"] [-configyaml="config.yaml"]

LLM 加持:让 AI 自动逆向

对于未导出的内核函数,传统做法是扔进 IDA 人肉逆向——现在你可以:

uv run python dump_symbols.py \
  -llm_model=gpt-5.4 \
  -llm_apikey=your-key \
  -llm_baseurl=327K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2M7r3W2Q4x3X3g2W2P5r3q4E0M7r3I4W2i4K6u0W2j5$3!0E0i4K6u0r3N6U0p5`.

对于从用户那儿搜刮来的不带pdb的ntoskrnl.exe,LLM 会自动分析反编译代码,输出:

  • found_call —— 函数调用关系
  • found_gv —— 全局变量引用
  • found_struct_offset —— 结构体成员偏移

当然,有pdb的直接从pdb里拿信息就好了。


上传服务器:收集全版本 ntoskrnl

项目还内置了一个轻量 HTTP 服务器,方便你从用户那儿收集 ntoskrnl.exe:

uv run upload_server.py [-symboldir="path/to/symbols"] -port=8000

特性:

  • 自动校验 PE 文件(FileDescription 必须为 NT Kernel & System
  • 验证 Authenticode 数字签名
  • 自动识别架构(x86 / amd64 / arm64)
  • {arch}/{filename}.{fileversion}/{sha256}/ 目录结构归档
  • 支持 gzip 压缩上传
  • 去重检查(已存在的文件不会覆盖)
  • HTTP Client代码就不提供了。把upload_server.py整个扔给AI让AI自己写个对应的 POST Upload 代码就完事
  • 至于HTTPS,自己在上面挂一层nginx或者CDN回源吧

项目地址

a2fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6t1e0p5&6p5x3W2c8Q4x3V1k6C8M7r3S2@1L8$3!0D9M7H3`.`.

Star ⭐ 是对作者最好的鼓励,欢迎试用、反馈、提 PR!


[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

最后于 1天前 被hzqst编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (8)
雪    币: 3687
活跃值: (6587)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
2
前排支持
3天前
1
雪    币: 114
活跃值: (280)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
点个赞
3天前
0
雪    币: 6607
活跃值: (6285)
能力值: ( LV9,RANK:143 )
在线值:
发帖
回帖
粉丝
4
好人一生平安
3天前
1
雪    币: 3687
活跃值: (6587)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
5
wx_御史神风 好人一生平安
我知道明天要上班了,可是也没必要睡这么早吧(逃
3天前
0
雪    币: 3685
活跃值: (2228)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
6
强烈支持
3天前
1
雪    币: 242
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
强烈支持
3天前
0
雪    币: 69
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
支持
3天前
0
雪    币: 6048
活跃值: (7422)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
SystemInformer  是啥  ai工具吗?
2天前
0
游客
登录 | 注册 方可回帖
返回