rjricken/monkey-moore

GitHub: rjricken/monkey-moore

一个基于相对搜索的高性能二进制模式匹配工具,专为ROM hacking与数据挖掘设计。

Stars: 21 | Forks: 2

# Monkey-Moore ![CI Status](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e4b3453bae001204.svg) ![License](https://img.shields.io/badge/license-GPLv3-blue) ![C++ Standard](https://img.shields.io/badge/C%2B%2B-17-blue.svg) **Monkey-Moore** 是一个高性能的相对搜索工具,专为 ROM 修改、数据挖掘和逆向工程设计。 通过利用 **Boyer-Moore 字符串搜索算法** 的优化多线程实现,它在大型二进制文件中执行快速的模式匹配。Monkey-Moore 提供广泛的配置选项,使其成为在编码方式未知的专有格式中定位文本或数据的理想工具。

Monkey-Moore for Linux Monkey-Moore for Windows

## 概述:什么是相对搜索? 相对搜索是一种专门用于发现无法通过标准十六进制或 ASCII 文本搜索找到的数据的技术。 与传统的扫描精确字节值的方法不同,相对搜索基于数值之间的 **内部差异模式** 来识别数据。只要字符之间的数学关系保持一致,你就可以定位文本,无论其编码方式如何。 ### 示例 想象一个以非标准 ASCII 变体编码的文本字符串,其中每个字符的值都减少了 2。 * **标准文本:** `"code"` * **编码值:** `"ambc"` 标准文本搜索 `"code"` 会失败。然而,Monkey-Moore 分析字节之间的 **相对差值**(例如 `'c'` 与 `'o'`、`'o'` 与 `'d'` 之间的距离)。由于这种关系模式在标准版本和编码版本中完全相同,Monkey-Moore 将成功定位该字符串。 ## 关键特性 * **模式灵活性:** 完整的通配符支持,允许匹配复杂或部分已知的序列。 * **8 位与 16 位支持:** 跨不同字符宽度进行搜索,以适应各种系统架构(例如 NES 与 SNES/GBA)。 * **大小端选择器:** 在大端序和小端序格式之间切换,以实现准确的 16 位搜索。 * **数值扫描:** 直接输入原始数值序列;工具会自动推断底层的相对差值以定位匹配模式。 * **自定义字符序列:** 定义自定义字符集以针对特定语言,例如日语(平假名/汉字)。 ## 性能 Monkey-Moore 为现代硬件构建,追求极致速度: * **Boyer-Moore 算法:** 搜索引擎使用预处理步骤生成跳转表。这使得工具能够智能地跳过目标文件中不可能匹配的较大区域,显著优于暴力搜索方法。 * **多线程:** 工作负载分布在所有可用的 CPU 核心上。这种并行处理大幅减少了扫描大型 ROM 或巨型二进制块所需的时间。 ## 从源代码构建(Linux) Monkey-Moore 使用 **CMake** 作为其构建系统,并使用 **wxWidgets** 作为跨平台 GUI。如果使用 [Just 命令运行器](https://github.com/casey/just),则包含一个 `Justfile` 以方便使用。 ### 1. 安装依赖项 你需要一个符合 C++17 标准的编译器、CMake(3.19+)以及 wxWidgets 开发库。 ``` sudo apt-get install build-essential cmake libwxgtk3.2-dev ``` ### 2. 编译与运行(使用 Just) 如果已安装 `just`,构建过程非常简单: ``` just configure-release just build-release just run-release ``` ### 3. 编译(标准 CMake) 如果不使用 `just`,可以手动构建: ``` # 配置(推荐发布模式以获得最佳性能) cmake --preset release # 编译 cmake --build --preset release ``` ### 4. 运行应用程序 编译后的二进制文件位于构建文件夹的 `src/gui` 子目录中: ``` ./build-release/src/gui/monkey-moore-gui ``` ## 单元测试 Monkey-Moore 使用 **Catch2** 对核心搜索算法和多线程搜索引擎进行单元测试。 ``` # 通过 Just 运行测试 just test # 或通过 CTest 手动运行 ctest --preset debug ```
标签:8位16位编码, Bash脚本, Boyer-Moore算法, BSD, C++17, GPLv3, HTTP头分析, Python 3.9+, ROM修改, 云资产清单, 大端小端控制, 开源, 数据挖掘, 文本编码探测, 模式匹配, 相对搜索, 自动化资产收集, 逆向工程, 通配符支持, 高性能搜索