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, 二进制分析, 云安全运维, 云资产清单, 内存映射, 后台面板检测, 域名枚举, 控制台黑客, 游戏修改, 语言规范, 超级任天堂, 逆向工程