mirror of
https://github.com/aydencharles/onionHEN.git
synced 2026-10-23 04:12:37 -05:00
Collection dumps name files TITLE_VERSION[_PROCESS][_HASH].ext. The old lookup either missed process-scoped names or rejected multiple hashes, so most dumped trainers never loaded. Parse process and hash as optional fields, prefer a process match, and keep hashed variants when the running hash is unknown.
3.7 KiB
3.7 KiB
金手指 C++ 架构
目标
把 util 金手指收成可扩展的 C++ 模块:编排、写内存策略、格式解析策略用 C++ 表达;ShnExt 重型 crypto/deflate/keystone 仍为 C 翻译单元,经 Adapter 接入。
设计模式(克制使用)
| 模式 | 用在哪 | 解决什么 |
|---|---|---|
| Facade | CheatService |
IPC 只依赖一个入口:export / toggle / flatten / ensureDir |
| Strategy | IMemoryBackend |
mdbg vs kdirect 可替换写内存策略 |
| Factory Method | MemoryBackendFactory::create() |
按 util_system_fw_major() 选后端 |
| Strategy + Factory | ICheatParser / CheatParserFactory |
json / shn / mc4 / ShnExt 解析路径统一 |
| Adapter | ShnExtCheatParser |
包装 onion_cheat_parse_shnext_buffer |
| RAII | std::mutex + lock_guard |
锁与服务状态生命周期 |
| Singleton(进程级服务) | CheatService::instance() |
与原全局 service 同生命周期,线程安全访问 |
不引入:Observer、Command、Abstract Factory 全家桶(当前无多套产品族需求)。
模块结构
onion::cheats
├── i_memory_backend.hpp
│ ├── MdbgMemoryBackend
│ └── KdirectMemoryBackend
├── MemoryBackendFactory
├── i_cheat_parser.hpp
│ ├── JsonCheatParser
│ ├── XmlCheatParser # .shn Trainer XML
│ ├── Mc4CheatParser # AES-256-CBC → XML
│ └── ShnExtCheatParser # Adapter → C parser
├── CheatParserFactory # createByFormat / loadFile / loadBuffer
├── CheatApplier # toggle / master-code / verify / code-cave
├── CheatRepository # 路径解析、热重载签名、调用 Factory
├── CheatFlatten # 仓库 flatten 安装(C)
└── CheatService # Facade + 互斥状态
│
▼
C: cheat_engine_utils / ShnExt / third_party crypto
│
▼
util_platform + pt/mdbg/kernel
调用顺序
IPC handleIPC
→ CheatService::instance()
→ exportList / toggle
→ Repository::refresh (path + file signature)
→ CheatParserFactory::loadFile
→ ICheatParser::parse (by extension)
→ Applier::toggle
→ MemoryBackendFactory
→ util_find_module
→ backend read/write (+ optional code cave)
格式解析
| 扩展名 | Parser | 说明 |
|---|---|---|
.json |
JsonCheatParser |
GoldHEN/OnionHEN JSON(手写 key 扫描) |
.shn |
XmlCheatParser |
Trainer XML |
.mc4 |
Mc4CheatParser |
Base64 + AES-256-CBC → XML |
.ShnExt |
ShnExtCheatParser |
deflate + AES + cJSON + 可选 keystone |
加载入口:CheatParserFactory::loadFile / loadBuffer(CheatRepository 调用)。
扩展点
- 新写内存后端:实现
IMemoryBackend,在MemoryBackendFactory注册固件条件。 - 新文件格式:实现
ICheatParser,在CheatParserFactory::createByFormat注册扩展名;Repository 路径扫描列表同步扩展;补source/util/testshost 用例。 - 新 IPC 操作:只扩
CheatService公开方法,避免 IPC 直接碰 Applier/Backend。
Host 单元测试
解析器可在 macOS/Linux 上测(无 PS5 SDK),参考 kylin-core tests/test_cheat_*:
cd source/util/tests && make test
覆盖:utils(hex/extract/brace)、Factory 路由、JSON/SHN/MC4 合成样例、真实 fixtures(json/shn/mc4/ShnExt)、文件名 TITLE/VERSION/PROCESS/HASH 解析与 resolve。
不覆盖:CheatApplier / 写内存(需目标机)。