nodiuus/NDIF
GitHub: nodiuus/NDIF
NDIF 是一个实验性的 Windows x64 动态二进制插桩框架,提供代码缓存、插件系统和外部进程插桩能力,用于安全研究与调试场景。
Stars: 0 | Forks: 0
# NDIF
NDIF 代表“Nisan's Dynamic Instrumentation Framework”(是的,为了名字更酷我省略了“binary”部分,习惯就好)。
本仓库是 Windows x64 动态二进制插桩实验的公开 Alpha 版本。
该 Alpha 版本有意保持较小的规模:它包含 DBI 核心/CLI、一个示例插件以及用于目标进程内部的最小化 agent DLL。目前较大的研究项目和检测器集合尚未包含在公开的解决方案中。
我已经使用该框架制作了许多插件/工具,未来可能会将它们公开发布供大家使用。
## Public Alpha 范围
包含在 `DBI.slnx` 中:
- `DBI/DBI.vcxproj`:CLI 宿主程序和可嵌入的 DBI 框架。
- `DBI/plugins/framework_showcase/framework_showcase.vcxproj`:示例插件,演示了生命周期钩子、命令调度、插桩回调以及宿主补丁 API 的使用。
- `dbi_agent/dbi_agent.vcxproj`:注入/agent 工作流实验中使用的目标进程内 agent DLL。
未包含在公开 Alpha 解决方案中的内容:
- 本地检测器插件、hook/反调试集合、沙箱/保护器实验、GUI 实验以及仅用于测试的项目。
- `.gitignore` 中列出的被忽略的本地文件夹。
## 环境要求
- Windows 10/11 x64
- Visual Studio 2026 或更高版本,并安装 C++ 桌面开发工作负载
- vcpkg manifest 集成
- x64 构建配置
依赖项在 `vcpkg.json` 中声明:
- 搭配 Win32/DX11 绑定的 `imgui`
- `lief`
- `nlohmann-json`
- `zydis`
## 构建
在 Developer PowerShell 中执行:
```
msbuild DBI.slnx /p:Configuration=Debug /p:Platform=x64 /m
```
如果 `msbuild` 不在 PATH 环境变量中,请从 Visual Studio 开发人员命令提示符中启动该命令,或者使用 `vswhere` 查询到的 MSBuild 完整路径。
预期输出:
- `DBI\x64\Debug\DBI.exe`
- `x64\Debug\plugins\framework_showcase.dll`
- `x64\Debug\dbi_agent.dll`
## CLI 用法
基本形式:
```
DBI.exe [args...]
DBI.exe --inline-cache-demo
DBI.exe -l
DBI.exe -p framework_showcase -c showcase.help
DBI.exe -p framework_showcase -c showcase.ping
DBI.exe -p framework_showcase -c showcase.stats
DBI.exe -p framework_showcase -c showcase.patch_demo
```
插件加载:
- `-P ` / `--plugins-dir `:设置插件搜索目录。
- `-p ` / `--plugin `:通过路径或短名称加载插件。
- `-N` / `--no-plugins`:禁用插件自动加载。
- `-c [args...]` / `--cmd [args...]`:调度一个插件命令。
Agent 工作流:
```
DBI.exe -i
DBI.exe -i
DBI.exe -i
```
当前的 agent 是一个 MVP 握手机制:它连接到 `\\.\pipe\dbi_agent_`,发送一个 hello/version 消息,接受一个启动命令,并回复 ACK。
## 核心 API 结构
主要的公共 C++ 接口位于 `DBI/` 目录下:
- `dbi_framework.*`:高级框架封装。
- `dynamic_binary_instrumentor.*`:进程内插桩协调器。
- `dispatcher_code_cache_instrumentor.h`:内联补丁的翻译代码缓存后端。
- `external_process_instrumentor.*`:由调试器驱动的外部进程插桩。
- `live_patch_framework.*`:向插件暴露的宿主端补丁辅助工具。
- `plugin_api.h`:面向插件的稳定 C ABI。
- `plugin_manager.*`:插件加载与事件调度。
- `dbi_host.*`:封装了插件管理器和默认插件发现机制的宿主包装器。
当前的进程内指令回调引擎会在已注册的入口地址处打上跳转补丁,从而跳入到一个生成的代码缓存块中。该生成的代码块会保存 CPU 状态,调用已注册的回调函数,执行重定位后的原始字节,最后跳转回原始的执行流。
## 示例插件
`framework_showcase` 导出了:
```
extern "C" __declspec(dllexport) int dbi_call dbi_plugin_init(dbi_plugin_api* out);
```
命令:
- `showcase.help`
- `showcase.ping`
- `showcase.stats`
- `showcase.patch_demo`
## 已知限制
- 这是公开 Alpha 版本,不提供稳定的 API 承诺。
- 真正的目标平台是 Windows x64。可能存在 x86 的项目配置,但它们不是此 Alpha 版本的支持目标。
- 翻译后的代码缓存后端仅处理入口点插桩,而不是全进程范围的基础块翻译。
- 回调中的 `CONTEXT` 仅供参考;对回调中 RIP/EIP 的修改目前尚未被应用。
- 部分注入/agent 路径是实验性的,应仅作为实验室工具对待。
- 目前的构建/测试覆盖是手动进行的;尚未接入 CI。
## 安全与范围
NDIF 是一种双用途的插桩工具。请仅在你拥有或已获得明确授权分析的系统与软件上使用它。此公开 Alpha 版本旨在用于防御性研究、调试和插桩实验,而非未经授权的篡改。
有关漏洞报告,请参见 `SECURITY.md`。
标签:C++, Conpot, DAST, DBI框架, DLL注入, DOM解析, LIEF, URL发现, Windows安全, Zydis, 主机补丁API, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 动态二进制插桩, 反调试, 安全检测, 安全研究工具, 恶意软件分析, 数据擦除, 沙箱, 流量审计, 游戏保护, 逆向工程, 静态分析