Red-tv141/PS2_Scoring_Radar

GitHub: Red-tv141/PS2_Scoring_Radar

一款基于Ghidra的PS2游戏60FPS补丁自动化生成工具,通过双遍扫描和智能分类系统精准定位帧率耦合函数。

Stars: 1 | Forks: 0

# PS2 Scoring Radar V13 Final:用于 60FPS 补丁的高级静态分析 ## 概述 **PS2 Scoring Radar V13 Final** 是一款高级自动化 Ghidra 脚本,专为协助制作 PlayStation 2 游戏的 60FPS 补丁而设计。 寻找正确的指令以进行 NOP(空操作)处理,从而将游戏逻辑与帧率解耦,是一项枯燥的手工过程。本脚本通过充当高度专业化的静态分析引擎来自动化这一过程。它分两次扫描整个 PS2 游戏二进制文件,根据一套严格的 EE 硬件感知架构规则评估每一条 `jal` 指令,并输出一个经过排序、即可使用的 `.pnach` 文件以及补充的 hook 和 thunk 文件。 通过智能地对函数进行分类并优先考虑安全性,PS2 Scoring Radar 显著减少了 PS2 模组制作中传统上所需的试错工作。 ## 主要功能 ### 双遍扫描架构 - **Pass 1 — JAL 扫描器:** 通过完整的 P-Code 反编译、缓存和父上下文分析来评估每一条直接 `jal` 指令。 - **Pass 2 — 全二进制扫描:** 使用轻量级汇编启发式方法扫描所有函数以寻找 vtable/`jalr` 候选(跳过 P-Code 以防止大型二进制文件出现 OOM)。 ### 基于拓扑的自动检测 即使对于被剥离符号表的二进制文件,也能通过分析以下内容自动识别主循环和菜单循环候选: - 指令计数和调用广度 - 内部回边(循环检测) - 帧心跳(`BeginFrame`/`EndFrame`, `sceGsSyncV`) - 层级分层(一个循环是否调用另一个循环) ### 混合 Nexus 种子 FrameRate Nexus 接受**代码地址**(VSync 指令)**或**数据地址(全局帧计数器变量)。在数据模式下,所有引用该变量的函数将自动用作 nexus 传播树的根节点。 ### 多层安全防火墙 - **静态库防火墙:** 阻止 Sony SDK(`sceCd`, `scePad`, `sceVif` 等)和标准 libc 函数。 - **IOP 模块防火墙:** 过滤掉 I/O 处理器调用(`cdvdman`, `padman`, `.IRX` 引用等)。 - **行为防火墙:** 阻止使用 `syscall`、COP0、MMIO/KSEG1 硬件访问或系统字符串(`assert`, `panic`, `bios`)的函数。 - **依赖项守卫:** 如果任何 JAL 的返回值(`v0`, `v1`, `f0`)被后续指令读取(包括跨 MIPS 分支延迟槽),则阻止该 JAL。 ### 高级 DNA 分类 根据 FPU 使用情况、分支密度、硬件特征(COP1/COP2/VU0)和调用拓扑,将安全补丁分类为可操作的类别: | 类别 | 描述 | |---|---| | `TIMERS` | 帧计数器和滴答逻辑 | | `VECTORS` | VU0/COP1/COP2 数学运算,物理 | | `ANIMATION_MODIFIERS` | 浮点参数动画速度函数 | | `ANIM_TICKERS` | 调用其他函数的动画/物理管理器 | | `STATE_MACHINES` | AI 调度器和逻辑引擎 | | `MACRO_SCRIPTS` | 过场动画和重大事件管理器 | | `THUNKS` | 已解析的 vtable 包装条目 | ### 按类别的调用者上限与惩罚 每个类别都有最大调用者计数和单调用者得分惩罚,以防止实用工具函数的排名高于专门的游戏玩法函数。 ### 模式猎手模块 - **Euler Hunter:** 检测向量缩放 → 向量加法序列。 - **Kinematic Hunter:** 通过 P-Code 回溯三角函数数据流(`sinf`/`cosf`)。 - **Animation Hunter:** 隔离接受计算出的浮点参数(时间/速度增量)的函数。 - **Global State Writer:** 提升在调用点附近写入全局 RAM 地址的函数。 - **Entity Struct Writer:** 提升写入结构体偏移量的函数(偏移量 ≤ `0x60` 的 `swc1`/`sqc2`)。 - **Hierarchy Matrix:** 提升单例调用者;惩罚批量/循环调用者。 ### Vtable 安全评分 对于 Pass 2 vtable 候选,爆炸半径分析会评估: - 函数大小和分支复杂性(危险惩罚) - 系统库被调用者(`malloc`, `sceCd` 等) - 高扇入实用工具被调用者 - 叶子被调用者比例和安全域传播(安全奖励) ### Vtable 集群协同 `0x1000` 字节内相邻的同类 vtable 候选可获得集群奖励,从而提升连贯的 vtable 块。 ### 跨类别上下文奖励 评分后,在相同父级中靠近其他已确认强目标(在 ±5 个 JAL 内)的函数将获得上下文奖励。 ### 60FPS Stride Hunter(被动) 扫描主循环候选以寻找: - **整数步长:** 基址为 `zero` 且值为 `1`, `2`, `-1`, `-2` 的 `addiu`/`li` - **浮点增量:** 加载接近 `1/30` (≈`0.03333f`) 或 `1/60` (≈`0.01666f`) 的 IEEE 754 常量的 `lwc1` 结果会报告在输出文件和控制台中,但**不**会生成自动补丁 —— 需要人工检查。 ### 智能延迟槽生成 每个 `jr ra` 补丁后的延迟槽字根据类别选择: - `VECTORS` → `00000000` (NOP — 避免破坏硬件寄存器) - COP1/重 FPU 目标 → `44800000` (`mtc1 zero,$f0` — 安全的浮点返回) - 所有其他 → `0000102D` (`move v0,zero` — 空指针返回) ### 内存安全 - 在 Pass 1 和 Pass 2 之间清除 HighFunction (P-Code) 缓存。 - `suppressHFCache` 模式可防止在全二进制 Pass 2 扫描期间发生 OOM。 ## 输出文件 | 文件 | 内容 | |---|---| | `.txt` | 主要排序后的 `.pnach` 补丁列表,按类别和调用者计数分割 | | `_global_hooks.txt` | 用于自定义 ASM 重定向的中心入口点 | | `_thunks.txt` | 其真实目标未被 Pass 1 捕获的 Thunk hook | | `_tracer.txt` | *(可选)* 单文件包含所有目标,便于在 PCSX2 中进行二分查找 | ## 使用说明 1. 在 Ghidra 中加载带有 Emotion Engine 处理器插件的 PS2 ELF,然后运行脚本。 2. 选择自动检测或手动输入游戏玩法和菜单主循环地址。 3. 可选择提供 FrameRate Nexus 地址 —— 可以是 VSync 指令(代码)或全局帧计数器变量(数据)。按 Cancel 跳过。 4. 选择输出文件路径以及是否生成 Tracer Bullets 文件。 5. 等待双遍扫描完成。 6. 打开生成的 `.txt` 文件。一次从某个类别/分数组中取出一批代码。 7. 将它们与问题时刻的 Save State(即时存档)一起加载到 PCSX2 中。 8. 观察哪些地方出错了。动画损坏、物体消失、相机抖动或过场动画失败都表明你发现了一个帧率耦合函数。 9. 使用二分查找(禁用一半代码,重新测试,重复)来隔离确切的函数。 10. 在 Ghidra 中导航到该地址并分析或反编译该函数以编写正确的 60FPS 修复。建议利用 AI 辅助分析反编译输出。 ## STATE_MACHINES 警告 输出文件将 `STATE_MACHINES` 分离到一个带有警告的专用部分。如果打补丁后游戏软锁,请将延迟槽字从 `0000102D` (`move v0,zero`) 更改为 `24020001` (`li v0,1`) 以返回 `TRUE` 而不是 `NULL`。 ## 注意事项 1. **THUNKS** 的存在是为了处理 Ghidra 偶尔无法解析间接 vtable 调用的问题。它们可能与各种问题相关,但不太可能包含主要的帧率耦合逻辑。 2. **全局 Hook 点**(`_global_hooks.txt`)是用于编写自定义 ASM 的入口点,**不是**用于批量 NOPing。将其中许多作为 `jr ra` 补丁加载可能会导致游戏崩溃。仅在你确切知道函数作用时才使用它们。 3. 脚本无法保证零崩溃诱导补丁,但在测试中,导致崩溃的代码很少(通常每个类别组少于 2 个)。它也无法保证找到每个帧率耦合函数 —— 但实际上它将搜索范围缩小到了二进制文件中 JAL 指令总数的约 25%。 4. Tracer Bullets 文件(`_tracer.txt`)专为快速二分查找而设计:在 PCSX2 中一次禁用一半,直到崩溃消失。 *为 PS2 模组社区开发。已在 PS2 MIPS EE 二进制文件上测试。* *架构:V11 Safety Core + V12 Binary Profiling + V13 EE Specifics + V13 Final.* *@作者 Gemini + Claude + Puggsy*
标签:60FPS 补丁, EE 处理器, Ghidra 脚本, JS文件枚举, MIPS 架构, P-Code 分析, PlayStation 2, PNACH 生成, SDK 识别, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 域名枚举, 安全防火墙, 帧率解锁, 循环检测, 游戏修改, 游戏模组, 逆向工程, 静态分析