joshleaves/ghidra-snes
GitHub: joshleaves/ghidra-snes
一个为 Ghidra 提供 SNES ROM 加载、65816 处理器语言支持和 SNES 内存映射辅助的逆向工程扩展,让 SNES 游戏的静态分析变得可行且高效。
Stars: 0 | Forks: 0
# ghidra-snes
用于 Ghidra 的 SNES 工具集。
本项目提供了一个 Ghidra 扩展,用于加载和处理 SNES ROM。目前包括:
- 支持 LoROM / HiROM 的 SNES ROM 加载器
- 为 SNES 分析量身定制的 65816 语言规范
- SNES 内存辅助工具(MMIO、WRAM、镜像)以及寄存器/向量标签
## 功能特性
### SNES ROM 加载器
该加载器在导入时将 SNES ROM 映射到 SNES CPU 地址空间中,而不是将它们视为原始二进制 Blob。
支持的映射(规范):
- LoROM:`80–FF:8000–FFFF`
- HiROM:`C0–FF:0000–FFFF`
- WRAM:`7E–7F:0000–FFFF`
- SNES MMIO 寄存器范围
可选镜像可以通过 **Tools → SNES Memory** 开启/关闭,以暴露低 Bank 视图(例如 LoROM 的 `00–7D`,HiROM 的 `00–3F`/`80–BF` 窗口)。
ROM 映射检测基于评分机制,会对 LoROM 和 HiROM 头部候选进行比较。它还支持可选的 `0x200` 字节 SMC 头部调整。
加载器会创建主(规范)ROM Bank;镜像 Bank 是可选的,并由插件 UI 管理。
加载器实现:
- `src/main/java/snesloader/SnesRomLoader.java`
### 65816 语言支持
该扩展包含一个面向 SNES 的 65816 语言定义:
- 语言 ID:`65816:LE:24:snes`
- 编译器规范:`default`
这允许导入的 ROM 直接在 Ghidra 中使用原生的 24 位 65816 寻址。
### SNES 内存辅助工具
该扩展包含 SNES 特定的内存可见性控制(MMIO、WRAM、SRAM 和 ROM 镜像),并在 UI 中提供了可切换的映射。
#### 使用方法
导入 ROM 后,使用 **Tools → SNES Memory** 来启用/禁用 MMIO、WRAM、SRAM(如果存在)和 ROM 镜像 Bank。
## 构建
设置 `GHIDRA_INSTALL_DIR` 为你本地的 Ghidra 安装路径,然后运行:
```
GHIDRA_INSTALL_DIR=/path/to/ghidra ./gradlew clean buildExtension
```
构建好的扩展 zip 文件将创建在 `dist/` 目录中。
## 安装
1. 打开 Ghidra。
2. 转到 **File → Install Extensions...**。
3. 点击 **+** 并从 `dist/` 中选择该 zip 文件。
4. 重启 Ghidra。
在导入 ROM 时,选择 **SNES ROM Loader** 格式。
## 第三方代码声明
本项目包含最初源自 [ghidra-65816](https://github.com/achan1989/ghidra-65816) 的代码。
原始实现的所有荣誉归其原作者所有。
代码库的某些部分,特别是 65816 语言规范,衍生自该仓库,并为了兼容性、修复和集成进行了修改。
其他资源:
- SNES 寄存器列表基于 [undisbeliever 的寄存器速查表](https://undisbeliever.net/snesdev/registers/cheatsheet.html)。
- Super Famicom logo 图标源自 [Wikimedia Commons](https://en.wikipedia.org/wiki/File:Super_Famicom_logo.svg)。由于缺乏独创性,它被认为属于公共领域,但仍可能受商标法约束。
## 特别感谢
特别感谢 Near(原名 byuu),他对 SNES 文档、模拟和保存的贡献对社区产生了持久的影响。
标签:65816处理器, Ghidra插件, Gradle构建, HiROM, Java开发, JS文件枚举, LoROM, MMIO, retro gaming, ROM加载器, SNES, SRAM, WRAM, 二进制分析, 云安全运维, 云资产清单, 内存映射, 后台面板检测, 域名枚举, 控制台黑客, 游戏修改, 语言规范, 超级任天堂, 逆向工程