# IDAHook **Repository Path**: keyestore/IDAHook ## Basic Information - **Project Name**: IDAHook - **Description**: 专为 Windows 平台设计的 API Hook 与汉化框架 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-07-12 - **Last Updated**: 2025-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IDAHook 汉化与 Hook 框架说明文档 ## 项目简介 IDAHook 是一个专为 Windows 平台设计的 API Hook 与汉化框架,该项目基于 C++17 标准开发,采用模块化架构设计,广泛应用于逆向分析、软件本地化、动态调试等场景。它基于微软 Detours 技术,支持对目标程序的 API 拦截、界面文本自动汉化、日志追踪、特征码定位等高级功能,极大提升了二次开发和自动化分析的效率。 ## 目标程序与目标函数 本项目主要针对 **IDA Pro(ida.exe)** 进行汉化和功能增强,默认 Hook 的目标函数包括: - **Qt 框架相关字符串与界面显示函数**: - `QString::fromUtf8` - `QString::fromAscii_helper` - `QCoreApplication::translate` - `QWindow::setTitle` - `QLabel::setText` - `QPainter::drawText` 这些函数的 Hook 目的是拦截界面文本的生成与显示过程,实现自动汉化和自定义替换。 如需支持其他程序或函数,只需实现新的 Hook 模块并注册即可,支持 WinAPI、Qt、MFC 等多种目标。 ## 功能特性 - **易用的规则管理**:支持运行时动态添加/移除汉化规则,支持优先级与追加规则。 - **兼容性强**:适配 IDA Pro 及其他基于 Qt 的 Windows 应用。 - **多目标、多模块扩展**:不仅支持 IDA Pro,理论上可支持任何 Windows 程序,只需实现对应 Hook 模块。 - **高效 API Hook 框架**:基于微软 Detours 技术,支持多模块、多函数的高效拦截与管理。 - **自动汉化与批量替换**:支持精确与模糊两种替换规则,结合 AC 自动机算法,能高效处理大规模文本替换,适合汉化工程。 - **规则热插拔**:支持运行时动态添加汉化规则,无需重启目标程序。 - **特征码定位机制**:支持开发/发布双模式,适应不同版本和变种程序,便于动态定位目标函数。 - **多线程安全日志系统**:支持多实例、格式化、十六进制转储,便于自动化分析和问题追踪。 - **强兼容性与可移植性**:兼容主流 Windows 版本和多种目标程序,适配 IDA Pro 及其他基于 Qt 的应用。 - **易用的扩展机制**:只需实现 IHookModule 派生类并注册,即可快速扩展新功能。 - **支持多语言和多编码**:UTF-8、Unicode 全面支持,适合国际化和本地化需求。 ## 架构与核心模块说明 ### 1. HookManager/HookModule Hook管理相关模块说明 - **HookManager**:统一管理所有 Hook 模块的注册、安装与卸载。 - **IHookModule**:抽象接口,所有 Hook 功能模块需继承并实现 Install/Uninstall/Name 方法。 - **扩展方式**: - 新建类继承 IHookModule,实现相关接口。 - 通过 `HookManager::RegisterModule(std::make_unique());` 注册。 ### 2. IDAHook Hook主要实现模块说明 - 典型的 Hook 模块,专为 IDA Pro 设计。 - 拦截 Qt 字符串相关函数,实现界面文本的自动翻译与替换。 - 支持窗口标题、标签、绘制文本等多种 UI 元素的汉化。 ### 3. StringManager字符串管理模块说明 - 字符串规则管理器,支持精确与模糊两类规则。 - 精确规则:直接 key-value 替换,适合固定文本。 - 模糊规则:支持优先级,采用 AC 自动机批量高效匹配,适合大批量、部分匹配场景。 - 支持 UTF-8 和宽字符两套完整的字符串处理体系, 共8种自定义字典 - 规则可运行时动态添加。 ### 4. Logger日志系统模块说明 - 支持条件编译,通过 `DEBUG_MODE` 宏控制日志功能 (详见Logger.h) - 线程安全的日志系统,支持多实例、格式化输出、十六进制转储。 - 日志文件自动管理,支持编码标记与时间戳。 - 便于调试、问题追踪和自动化分析。 ### 5. SignatureUtils特征码定位工具模块说明 - 特征码定位工具,支持全模块/区段扫描、掩码匹配、正向/反向搜索、偏移量硬编码。 - 支持开发模式(日志输出详细匹配信息)与发布模式(硬编码偏移校验)。 - 适合动态定位目标函数、逆向分析等场景。 ### 6.StringUtils 字符串工具模块说明 `StringUtils.h` 提供了一系列字符串处理工具函数,主要包括: - **编码检测与转换**:支持 UTF-8、GBK、UTF-16、wchar_t 等多种编码的有效性检测与互转,确保汉化和 Hook 过程中字符串处理的正确性。 - **高性能实现**:所有操作均基于 Windows API,兼容性强,效率高。 - **支持的编码**: - UTF-8 ↔ GBK - UTF-8 ↔ UTF-16 - UTF-8 ↔ wchar_t - 各种输入格式:字符串、字符串视图、向量 该模块为整个汉化与 Hook 流程中的字符串处理、日志输出、规则匹配等提供了底层支撑。 ### 7. DLL 劫持技术 - **导出表伪装:** 通过 `#pragma comment(linker, "/EXPORT:...")` 导出所有 winmm.dll 的函数 - **函数转发:** 将调用转发给真正的 winmm.dll - **初始化钩子:** 在 DLL 加载时自动安装钩子 - **技术特点:** - 动态加载真正的 winmm.dll - 获取所有导出函数的地址 - 使用 x64 汇编实现高效透明转发 - 支持所有 winmm.dll 导出函数 - 保持完整的调用约定和参数传递 通过伪装成 `winmm.dll` 系统库,利用 DLL 搜索顺序实现自动注入,避免使用第三方注入工具。 ## 目录结构说明 ``` IDAHook20250711/ ├── IDAHook.sln # Visual Studio 解决方案文件 ├── IDAHook.vcxproj # 工程文件 ├── include/ # 头文件目录 │ ├── detours.h # Detours 库头文件 │ ├── HookManager.h # Hook 管理器头文件 │ ├── HookModule.h # Hook 模块抽象接口 │ ├── IDAHook.h # 典型 Hook 模块实现 │ ├── Logger.h # 日志系统头文件 │ ├── SignatureUtils.h # 特征码工具头文件 │ ├── StringExactRules.h # 精确替换规则表 │ ├── StringFuzzyRules.h # 模糊替换规则表 │ ├── StringManager.h # 字符串管理器 │ ├── StringUtils.h # 字符串工具 │ └── syelog.h # 日志库头文件 ├── lib/ # 第三方库文件 │ ├── detours.lib # Detours 静态库 │ ├── detours.pdb # Detours 调试符号 │ └── syelog.lib # 日志库 ├── src/ # 源代码目录 │ ├── HookManager.cpp # Hook 管理器实现 │ ├── IDAHook.cpp # 典型 Hook 实现 │ ├── Logger.cpp # 日志系统实现 │ ├── SignatureUtils.cpp # 特征码工具实现 │ ├── StringManager.cpp # 字符串管理器实现 │ ├── StringUtils.cpp # 字符串工具实现 │ ├── winmm_jump.asm # 汇编跳板代码 │ └── winmm.cpp # winmm 相关 Hook 实现 ``` ## 编译与使用方法 ### 环境准备 - 推荐使用 Visual Studio 2022 版本 - 支持 Windows 7/10/11 x64 - Detours 库已随项目自带,无需额外下载 ### 使用方法 本项目支持以下两种主要使用方式: - **方式一:DLL 劫持(推荐)**: ```bash # 将 winmm.dll 复制到 IDA Pro 安装目录 cp build/winmm.dll "C:/Program Files/IDA Pro 9.x/" ``` - **方式二:手动注入**: ```cpp // 使用注入工具或自写 Loader HMODULE hMod = LoadLibrary(L"winmm.dll"); ``` - **DLL 劫持**:通过实现和注册自定义 Hook 模块,直接在目标程序运行时劫持指定 API,实现功能增强、自动化分析等。 - **DLL 注入**:将编译生成的 DLL 注入到目标进程(如 IDA Pro),即可实现 API Hook 和界面汉化。常用注入工具包括 Process Hacker、DLL Injector 等。 ### 编译与集成步骤 1. 使用 Visual Studio 打开 `IDAHook.sln` 解决方案 2. 选择合适的编译配置(Release, x64) 3. 编译生成 DLL文件 4. 按需选择注入或集成方式: - 注入:使用注入工具将 DLL 注入目标进程 - 集成:将源码集成到你的项目,注册自定义 Hook 模块 - 可通过修改 `StringExactRules.h` 和 `StringFuzzyRules.h`,自定义汉化规则 - 日志文件默认输出到当前目录,便于调试和问题追踪 无论采用哪种方式,均可灵活扩展和集成到不同的 Windows 应用场景。 ## 规则自定义与扩展指南 ### 1. 添加/修改汉化规则 - **精确规则**:编辑 `include/StringExactRules.h`,添加 `{"原文", u8"译文"}` 或 `{L"原文", L"译文"}` - **模糊规则**:编辑 `include/StringFuzzyRules.h`,添加 `{"原文", u8"译文", 优先级}` 或 `{L"原文", L"译文", 优先级}` - **运行时动态添加**: ```cpp StringManager::AddDefaultRule("原文", "译文"); StringManager::AddFuzzyDefaultRule(L"原文", L"译文", 100); ``` ### 2. 扩展 Hook 模块 - 新建类继承 `IHookModule`,实现 Install/Uninstall/Name 方法 - 在合适位置注册: ```cpp HookManager::RegisterModule(std::make_unique()); ``` - 参考 `IDAHook.h/cpp` 实现 Qt/WinAPI 等函数的拦截与处理 ### 3. 特征码定位与签名搜索 - 使用 `SignatureUtils::DevFindSignature` 在开发阶段定位目标函数偏移 - 发布时用 `SignatureUtils::GetHardcodedAddress` 校验模块大小与偏移,防止版本不符 - 支持掩码、区段、正反向、多匹配等高级用法 ## 日志与调试 - 日志系统支持多线程安全、格式化输出、十六进制转储 - 可通过 `Logger::SetShowEncodingTags` 和 `Logger::SetShowTimestamp` 控制日志格式 - 日志文件默认名为 `Hook.log` 或 `IDAHook.log` - 调试建议:优先在 `Logger.h ` 开启调试宏,便于追踪 Hook 安装、规则匹配、特征码定位等信息 ## 高级说明与开发建议 - 支持多模块、多线程环境,适合复杂项目集成 - 字符串替换支持优先级、追加规则,便于灵活控制 - AC 自动机算法适合大规模模糊匹配,性能优越 - 日志系统建议定期清理,避免日志过大 - 特征码定位建议开发/发布分离,提升稳定性 ## 依赖说明 - [Detours](https://github.com/microsoft/Detours):微软开源的 API Hook 框架 - syelog:Detours 附带的日志库 - [AheadLibEx](https://github.com/i1tao/AheadLibEx):用于 API 劫持的通用导出表劫持库,本项目 winmm.cpp 支持基于 AheadLibEx 的劫持方式,相关源码可自行修改。 - AheadLibEx作者:i1tao 所有依赖库已包含在 `lib/` 和 `include/` 目录,无需额外下载。 ## 联系方式与致谢 - 作者:XiangXin - 联系方式:xiangxin229@foxmail.com - 致谢:神月、Wanfu、雪很冷、MonKeyDu、i1tao - Detours 项目:https://github.com/microsoft/Detours - AheadLibEx项目:https://github.com/i1tao/AheadLibEx - 如有问题或建议,欢迎反馈与交流。 ## 注意 - **本项目仅用于学习和研究目的,请遵守相关软件的许可协议和法律法规。**