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, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 动态二进制插桩, 反调试, 安全检测, 安全研究工具, 恶意软件分析, 数据擦除, 沙箱, 流量审计, 游戏保护, 逆向工程, 静态分析