Skip to content

yaoguen/IDAHook

Repository files navigation

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<YourHook>()); 注册。

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 劫持(推荐)
# 将 winmm.dll 复制到 IDA Pro 安装目录
cp build/winmm.dll "C:/Program Files/IDA Pro 9.x/"
  • 方式二:手动注入
// 使用注入工具或自写 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.hStringFuzzyRules.h,自定义汉化规则
  • 日志文件默认输出到当前目录,便于调试和问题追踪

无论采用哪种方式,均可灵活扩展和集成到不同的 Windows 应用场景。

规则自定义与扩展指南

1. 添加/修改汉化规则

  • 精确规则:编辑 include/StringExactRules.h,添加 {"原文", u8"译文"}{L"原文", L"译文"}
  • 模糊规则:编辑 include/StringFuzzyRules.h,添加 {"原文", u8"译文", 优先级}{L"原文", L"译文", 优先级}
  • 运行时动态添加
    StringManager::AddDefaultRule("原文", "译文");
    StringManager::AddFuzzyDefaultRule(L"原文", L"译文", 100);

2. 扩展 Hook 模块

  • 新建类继承 IHookModule,实现 Install/Uninstall/Name 方法
  • 在合适位置注册:
    HookManager::RegisterModule(std::make_unique<YourHook>());
  • 参考 IDAHook.h/cpp 实现 Qt/WinAPI 等函数的拦截与处理

3. 特征码定位与签名搜索

  • 使用 SignatureUtils::DevFindSignature 在开发阶段定位目标函数偏移
  • 发布时用 SignatureUtils::GetHardcodedAddress 校验模块大小与偏移,防止版本不符
  • 支持掩码、区段、正反向、多匹配等高级用法

日志与调试

  • 日志系统支持多线程安全、格式化输出、十六进制转储
  • 可通过 Logger::SetShowEncodingTagsLogger::SetShowTimestamp 控制日志格式
  • 日志文件默认名为 Hook.logIDAHook.log
  • 调试建议:优先在 Logger.h 开启调试宏,便于追踪 Hook 安装、规则匹配、特征码定位等信息

高级说明与开发建议

  • 支持多模块、多线程环境,适合复杂项目集成
  • 字符串替换支持优先级、追加规则,便于灵活控制
  • AC 自动机算法适合大规模模糊匹配,性能优越
  • 日志系统建议定期清理,避免日志过大
  • 特征码定位建议开发/发布分离,提升稳定性

依赖说明

  • Detours:微软开源的 API Hook 框架
  • syelog:Detours 附带的日志库
  • AheadLibEx:用于 API 劫持的通用导出表劫持库,本项目 winmm.cpp 支持基于 AheadLibEx 的劫持方式,相关源码可自行修改。
  • AheadLibEx作者:i1tao

所有依赖库已包含在 lib/include/ 目录,无需额外下载。

联系方式与致谢

注意

  • 本项目仅用于学习和研究目的,请遵守相关软件的许可协议和法律法规。

About

专为 Windows 平台设计的 API Hook 与汉化框架

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors