Dvurechensky/ReverseProxyDLL

GitHub: Dvurechensky/ReverseProxyDLL

一个针对旧版 x86 Windows 二进制文件,通过解析导出表和反编译输出生成具备逆向感知能力的代理 DLL 脚手架工具。

Stars: 1 | Forks: 1

🌐 语言: 🇷🇺 俄语 | ✅ 🇺🇸 英语 (当前)

💻 ReverseProxyDLL

- [快速开始](docs/STARTUP.md) - [我为什么要构建这个](#why-i-built-this) - [这个项目的功能](#what-this-project-does) - [它与普通的 DLL 代理生成器有何不同](#what-makes-it-different-from-ordinary-dll-proxy-generators) - [当前工作流](#current-workflow) - [工具链 / 目标范围](#toolchain--target-scope) - [核心工具](#core-tools) - [`generate_overrides_from_ghidra_dump.py`](#generate_overrides_from_ghidra_dumppy) - [`reverse_dll_project_generator.py`](#reverse_dll_project_generatorpy) - [工作流示例](#example-workflow) - [这个项目**不是**什么](#what-this-project-is-not) - [适用于](#good-fit-for) - [状态](#status) - [路线图](#roadmap) ## 我为什么要构建这个 我开始这个项目时,正在处理那些原本就没打算让人愉快地重构的旧版 Windows x86 二进制文件。 同一个问题不断重复出现: - 导出表**不够** - 反编译器的输出**不够** - **手动**编写兼容的代理 DLL 缓慢且重复 - 过早尝试完全重构原始源代码通常是死路一条 因此,我没有每次都重建相同的胶水代码,而是构建了一个工作流,让我先获得一个**可用的代理 DLL 脚手架** —— 然后再去完善 ABI、调用约定、签名和实际逻辑。 这正是我想解决的具体问题。 ## 这个项目的功能 ReverseProxyDLL 帮助为现有的旧版 x86 Windows DLL 生成一个**可构建的兼容性脚手架**。 它可以生成一个代理项目,用于: - 在运行时加载原始 DLL - 通过 `GetProcAddress` 解析导出 - 转发兼容调用 - 控制序号和导出布局 - 支持运行时日志记录和跟踪 - 为逆向重构提供一个结构化的基础 这让我不再浪费时间在重复的样板代码上,而是专注于实际的 `逆向工程` 工作。 ## 它与普通的 DLL 代理生成器有何不同 大多数 DLL 代理生成器只做这些事: - 读取导出表 - 生成包装器 - 转发调用 这很有用 —— 但对于真正的旧版逆向工程来说,这通常是不够的。 这个项目是围绕一个更实用的工作流设计的: - **感知导出** - **感知 ABI** - **面向逆向** - **友好的手动覆盖** 它明白并非所有的导出都是一样的。 例如,它可以将导出视为: - 常规 C 导出 - C++ 作用域 / 修饰导出 - 数据导出 - CRT / 运行时转发导出 在处理旧的 x86 Windows DLL 时,这种区别非常重要。 ## 当前工作流 典型的工作流如下所示: 1. 从原始 DLL 导出导出表 2. 在 Ghidra 中检查 / 反编译函数 3. 生成覆盖项 / 签名 4. 生成代理脚手架 5. 构建替换 DLL 6. 启动目标应用程序 7. 增量地完善 ABI 和逻辑 这意味着我不再每次都从零开始。 我从一个**可用的 80–90% 脚手架**开始,然后在此基础上迭代。 ## 工具链 / 目标范围 这个项目**在设计上优先考虑旧版环境**。 它最初是围绕以下内容构建的: - **Windows x86** - **较旧的原生 DLL** - **Visual C++ 2003 / VC7.1 风格兼容性** - ABI 正确性比现代构建便利性更重要的逆向工作流 生成的脚手架故意保持简单和底层,因此它的部分内容也可以适应较新的 MSVC 环境。 但准确地说: 如果它也能干净地适用于较新的目标 —— 那很好。 但主要设计目标是老派的 Windows 二进制兼容性。 ## 核心工具 ### 从 Ghidra dump 生成 overrides 的 generate_overrides_from_ghidra_dump.py 解析 Ghidra 风格的反编译器输出并生成结构化的 `overrides.json` 元数据。 适用于: - 提取签名 - 规范化伪类型 - 检测调用约定 - 生成可覆盖的函数定义 ### 生成 reverse DLL 项目的 reverse_dll_project_generator.py 从导出元数据和可选的覆盖项生成一个面向逆向的代理 DLL 脚手架。 适用于: - 代理 DLL 生成 - 导出包装器脚手架 - DEF/导出布局控制 - 旧版 DLL 替换工作流 ## 工作流示例 典型的运行过程如下所示: ``` python src/generate_overrides_from_ghidra_dump.py functions_dump.c overrides.generated.json python src/reverse_dll_project_generator.py exports.md -o generated_proxy --dll-name dacom --original-dll dacom_addon.dll --overrides overrides.generated.json ``` 有关完整的设置和构建步骤,请参阅 [快速开始](docs/STARTUP.md)。 ## 这个项目**不是**什么 这个工具并**不**能神奇地重建完整的原始源代码。 它并**不**保证每个签名都是自动正确的。 它并**不**取代实际的逆向工程。 它所做的是更实际的事情: ## 适用于 - 逆向工程旧的 Windows x86 DLL - 构建兼容性包装器 - 旧版游戏 / 工具重构 - ABI 调查 - DLL 替换实验 - 运行时跟踪和受控地从原始二进制文件迁移 ## 状态 该项目正围绕实际的旧版 DLL 重构工作积极演进。 主要目标很简单: ## 路线图 - 更好的覆盖项生成 - 更清晰的 C++ 导出处理 - 更安全的类型推断 - 改进的 DEF 生成 - 更好的旧版工具链支持 - 更紧密的 Ghidra 辅助工作流
标签:DLL Proxying, DLL劫持, Ghidra, UML, VC++ 2003, Wayback Machine, x86, 二进制分析, 云安全运维, 云资产清单, 代理DLL, 代码生成, 反汇编, 后门开发, 导出表, 恶意代码分析, 渗透测试工具, 网络安全, 逆向工具, 逆向工程, 遗留系统, 配置文件, 隐私保护