-
-
[分享] 全版本 ntoskrnl 任意函数 offset 打包提取/工具
-
-
[分享] 全版本 ntoskrnl 任意函数 offset 打包提取/工具
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 分钟 |
快速上手
wget 9e9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6J5j5i4N6Q4x3X3g2Y4K9i4c8Z5N6h3u0#2M7$3g2J5j5$3!0F1N6r3g2F1N6q4)9J5k6h3y4G2L8g2)9J5c8Y4N6A6L8Y4y4A6k6r3g2J5M7%4y4Q4x3V1k6K6P5i4y4@1k6h3#2A6L8X3k6G2M7X3#2W2M7W2)9J5c8Y4u0W2k6Y4y4Q4x3V1k6Z5k6h3q4V1M7#2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8X3E0H3K9r3I4A6j5W2)9J5c8X3E0H3K9r3c8&6L8W2)9J5k6i4S2E0L8l9`.`.
uv run update_symbols.py [-xml="kphdyn.xml"] [-symboldir="path/to/symbols"] [-configyaml="config.yaml"] -syncfile
uv run download_symbols.py [-xml="kphdyn.xml"] -[symboldir="path/to/symbols"] [-fast]
uv run dump_symbols.py [-symboldir="path/to/symbols"] [-configyaml="config.yaml"] [-debug]
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编辑
,原因: