3kyo0/macce
GitHub: 3kyo0/macce
MacCE 是一款 macOS 原生的 Cheat Engine 风格内存扫描器,用于在不禁用 SIP、无需 sudo 或 kext 的前提下检查和修改 Wine/CrossOver 等 Windows 翻译层下运行的进程内存。
Stars: 1 | Forks: 0
# MacCE
[](https://github.com/3kyo0/macce/actions/workflows/ci.yml)
[](LICENSE)
[简体中文 »](README_zh.md)
一个原生、Cheat-Engine 风格的内存扫描器,专用于**运行在任何
Windows 翻译层下的 macOS 目标** —— Wine, CrossOver, Whisky, Kegworks,
PlayOnMac, Apple 的 Game Porting Toolkit,或是游戏捆绑的自定义 Wine 版本。
无需禁用 SIP。无需 sudo。无需 kext。仅需一个带有
`com.apple.security.cs.debugger` entitlement 的临时签名 (ad-hoc-signed) 二进制文件,通过
`task_for_pid` / `mach_vm_*` 与内核通信。
## 为什么开发此工具
CheatEngine 本身无法在 macOS 上原生运行;现有的扫描器
(`scanmem`, `gameconqueror`)仅限 Linux 使用。在 macOS 上,任何想要
检查/扫描 Wine 下 Windows 程序的人,历来都必须通过 GDB 来完成,或者从头编写 Mach VM 胶水代码。MacCE 将其封装进了一个
外观和行为都与 CE 相似的 GUI 中:支持带有重扫
链式的类型/操作符/数值/范围扫描,带通配符的 AOB,基于快照的未知初始扫描,模块
映射(`notepad.exe+0x4150` 以 CE 风格的绿色渲染静态
地址),多级指针扫描,锁定/监视列表等等。
## 功能
| 类别 | 支持的功能 |
|---|---|
| 数字类型 | i8/i16/i32/i64, u8/u16/u32/u64, f32, f64 |
| 断言 (Predicates) | eq, ne, lt, le, gt, ge, range, unknown (首次扫描) |
| 重扫描断言 | + changed, unchanged, increased, decreased |
| AOB / 字节 | 带 `??` 通配符的十六进制模式(例如 `DE AD ?? BE EF`) |
| 字符串 | UTF-8 (`str`) 和 UTF-16LE (`wstr` — Windows 原生,**支持 CJK**) |
| 区域过滤 | rw-prv / rw-shr / r-- / r-x,对齐/未对齐,模块作用域 |
| 快照模式 | `op=unknown` 首次扫描保留原始字节;首次重扫描进行比对 |
| 指针扫描 | 1–4 层 BFS 链查找,优先静态锚点 |
| 模块映射 | 基础名 + 偏移量显示;文件映射(静态)地址显示为绿色 |
| 锁定 / 监视 | 冻结数值,定期刷新 |
| 进程选择器 | 过滤 Wine / CrossOver / GPTK / Whisky / Kegworks / Wineskin / .exe |
## 性能
在基础的朴素扫描之上,叠加了多项重大优化:
- **`mach_vm_remap(copy=TRUE)`** — 首次扫描读取是零拷贝的:目标
页面以 COW(写时复制)方式延迟映射到我们的地址空间;不需要 `mach_vm_read`
缓冲区。
- **对齐步长 + 针对 (type, op) 的专用内核** — `clang -O2`
将每个分支自动向量化为 SSE2/AVX2。
- **并行首次扫描** — 跨 N=min(ncpu, 8) 个 pthread 的区域工作队列,
线程局部的匹配向量,最后进行一次合并 + qsort。
- **并行重扫** — 已排序的匹配数组按索引分区;每个线程
每次 `mach_vm_read_overwrite` 调用批量读取最多 64 KiB。
- **Boyer-Moore-Horspool** AOB 跳转表 — 锚定在最右侧的
字面字节处,因此尾部带通配符的模式依然受益。对于较短或全为通配符的模式,会自动回退到
朴素匹配。
在 8 核 Intel Mac 上,针对几 GB 内存的 Wine 目标的典型首次扫描
能在不到一秒的时间内完成;随后的重扫几乎是瞬间完成的,直到
匹配集被换页出(page out)。
## 构建
环境要求:
- macOS (Intel;ARM64 只需对 Mach 进行少量修改即可运行)。
- Xcode 命令行工具。
- 来自 Homebrew 的 `glfw`:`brew install glfw`。
```
make imgui # one-time: clones ImGui v1.91.5 into gui/third_party/
make # CLI: ./macce
make gui # GUI: ./macce-gui
```
这两个二进制文件都是使用 `entitlements.plist` 中的 entitlement 进行的临时签名 (ad-hoc-signed)。
附加到你自己的进程不需要 `sudo`;可以保持 SIP 开启。
## CLI 快速入门
```
# 按名称子字符串查找进程
./macce find notepad
# Dump region map (根据需要在 shell 中通过 -- 过滤)
./macce regions
# 首次扫描: 32位 int 等于 100
./macce scan i32 eq 100
# 重新扫描: 值已减少
./macce rescan dec
# String 扫描 (UTF-16LE — Windows 原生)
./macce scan wstr eq "Notepad"
# 带通配符的 AOB
./macce scan bytes eq "DE AD ?? BE EF"
# Pointer chain 查找器 (目标 -> 静态锚点)
./macce pscan 7ff0deadbeef 0x1000 3
# 读取 / 写入
./macce read 7ff0deadbeef 64
./macce write 7ff0deadbeef "01 02 03 04"
./macce list # show match preview
./macce clear # clear saved session at /tmp/macce.session
```
## GUI 快速入门
1. `./macce-gui`
2. 在进程选择器中,保持选中 **wine only**(或取消勾选以查看所有
进程)。选择你要附加的 Wine 托管的 `.exe`。
3. 类型/操作符/数值 → **First scan**(首次扫描)。
4. 在目标程序中改变数值 → 使用相关的
断言(`changed`, `decreased`, `eq `, …)进行 **Rescan**(重扫)。
5. 右键点击结果以 **lock**(锁定)或添加到 **watch**(监视)。
6. 静态(由模块映射的)地址以绿色渲染为
`notepad.exe+0x4150`;动态的堆/栈地址保持普通的十六进制颜色。
### 扩展 Wine 进程检测
如果你的运行环境不匹配内置模式
(`wine`, `crossover`, `gameportingtoolkit`, `whisky`, `kegworks`,
`playonmac`, `winebridge`, `wineskin`, `wpreloader`)或者不以 `.exe`
结尾的二进制文件,可以在运行时进行扩展:
```
MACCE_WINE_PATTERNS="mygame:custom_wrapper" ./macce-gui
```
(以冒号分隔,针对可执行文件路径进行不区分大小写的子串匹配。)
## ⚠️ 仅限授权使用
此工具会读取和写入另一个进程的内存。**请仅对你拥有的软件、
你被授权测试的软件,或在 CTF / 研究 / 教育背景下使用。**
- **请勿**将其用于带有反作弊 /
服务条款 (ToS) 限制的在线游戏或服务。
- 将带有反作弊技术的商业多人游戏作为目标
(Easy Anti-Cheat, BattlEye, NetEase ProtectShield/NP, Vanguard 等)
极有可能违反该软件的服务条款。根据
你的司法管辖区不同,这可能还会违反计算机滥用法 —— 包括但
不限于中国《刑法》第 285/286 条、美国 CFAA、英国 CMA 以及
其他司法管辖区的同等立法。
- 作者和贡献者对滥用行为不承担任何责任。
预期的使用场景包括:逆向你拥有的软件、单机
离线游戏、CTF 练习、考试目标、调试你自己的 Wine 应用等
类似情况。
## License
MIT — 见 [`LICENSE`](LICENSE)。
## 第三方组件
- [Dear ImGui](https://github.com/ocornut/imgui) (MIT),固定在 v1.91.5 版本。
- [GLFW](https://www.glfw.org/) (zlib/libpng),通过 Homebrew。
标签:CVE监控, Mach API, 云资产清单, 内存扫描, 客户端加密, 游戏修改, 逆向工程