chipx86/retro-tinkertoys

GitHub: chipx86/retro-tinkertoys

基于 Ghidra 的 NES 复古游戏反汇编工具集,提供带注释的汇编导出、PPU 图块可视化和自定义 NES 数据类型,辅助 ROM 逆向分析工作。

Stars: 1 | Forks: 0

# Retro Tinkertoys:复古反汇编工具 这是我最初开发的一组脚本,旨在辅助我的 [Faxanadu for NES 反汇编工作](https://github.com/chipx86/faxanadu)。 此代码库版权归 © 2005 Christian Hammond 所有,并采用 MIT 许可证授权。 如果您使用了这些工具,我很乐意收到您的反馈,如果您公开了基于此制作的内容,希望能附上链接 :) # 概述 目前,它包含以下用于 [Ghidra](https://github.com/nationalsecurityagency/ghidra) 的 Python 2.7 脚本: **Ghidra Data 脚本:** * `data_add_ref_with_offset.py`:为选区中具有指定 bank 和偏移量的每个值添加引用。 * `data_search_replace_reffed_labels.py`:对选区中引用的任何标签名称执行文本搜索/替换。 * `data_update_types.py`:更新数据值的类型而不丢失注释或引用。 **Ghidra NES 脚本:** * `nes_export.py`:为 NES 6502 代码导出带有注释的汇编文件和带有超链接的 HTML 反汇编文件。 * `nes_visualize_ppu_tile.py`:选择 16 字节的 NES PPU 图块数据并在注释中生成可视化图形。 # Ghidra 支持 ## 安装说明 如果您要使用这些工具,您需要同时安装 Ghidra 脚本和自定义数据类型。 安装 Ghidra 脚本: 1. 点击 **Window** -> **Script Manager**。 2. 点击工具栏中的 **Manage Script Directories**(从右数第 3 个)。 3. 点击添加(绿色加号)工具栏按钮。 4. 选择此代码库中的 `ghidra/scripts/` 目录。 5. 在 Script Manager 中,启用 **Script Manager** -> **Retro Tinkertoys** 中的脚本。 安装自定义 Ghidra 数据类型: 1. 在 **Data Type Manager** 下,点击向下箭头并选择 **Open File Archive**。 2. 选择此代码库中的 `ghidra/data_types/Retro Tinkertoys.gdt` 文件。 ## 脚本参考 ### data_add_ref_with_offset.py **菜单项:** Tools → Data - Add Reference with Offset 此脚本接收一个由一个或多个数据值组成的选区,这些数据值分别用作指向另一个地址的偏移量。它会提示输入该基地址,将每个偏移量加上基地址并将其转换为引用。 这有助于注释文档并生成有用的反汇编代码。 ### data_search_replace_reffed_labels.py **菜单项:** Tools → Data - Search/Replace Reffed Labels 对选区中任何引用的名称执行文本搜索/替换。 这将选取一个代码范围,询问要搜索的文本以及要替换的文本,然后相应地更新在该选区中找到的任何引用的名称。 该文本可以以区分大小写或不区分大小写的形式进行匹配。 可以执行试运行,显示将要执行的重命名操作,这有助于测试搜索/替换的结果,而无需承担任何被修改的风险。 所有操作都在一个事务中进行,因此很容易撤消。 ### data_update_types.py **菜单项:** Tools → Data - Update Types 这有助于更新数据值的类型而不丢失注释或引用。 通常,在 Ghidra 中更新数据类型时,任何现有的注释或引用都会丢失。此更改会小心地保存此状态,更新数据类型,然后再恢复它们。 ### nes_export.py **菜单项:** Tools → NES - Export Disassembly 此脚本接收 NES ROM 反汇编后的 bank,并将其转换为以下目录中的文件: * `asm/`:兼容 [ca65](https://cc65.github.io/doc/ca65.html) 的汇编源文件。 * `html/`:可浏览的、带有注释和超链接的、经过美化的 HTML 源码反汇编文件,可用于查看包含所有注释和引用的 NES 源代码。 * `mesen/`:一个 Mesen 标签文件,可直接导入到 [Mesen](https://www.mesen.ca/) 模拟器中。 此功能旨在与提供的自定义 Ghidra 数据类型 (`ghidra/data_types/Retro Tinkertoys.gdt`)配合使用。 ### nes_visualize_ppu_tile.py **菜单项:** Tools → NES - Visualize PPU Tiles 此脚本接收包含一个或多个 PPU 图块(每个 16 字节)数组的选择区域,将它们转换为 ASCII 可视化图形。这些图形将作为注释插入到图块数据上方。 这有助于记录 ROM 中的图块。 ## 数据类型参考 捆绑的数据类型(`ghidra/data_types/Retro Tinkertoys.gdt`)可在反汇编游戏时使用,以帮助构建不同平台的数据结构并定义对数据的相对引用。 导出器使用这些相对引用来正确生成汇编文件,这些文件可以利用相对引用而不是绝对引用,从而帮助使代码变得可重定位。 以下为可用类型: ### NES 数据类型 #### NESPPUTile8 定义 8 字节的 PPU 图块数据。 #### NESPPUTile16 定义 16 字节的 PPU 图块数据。 这可以与 `nes_visualize_ppu_tile.py` 脚本配合使用以创建可视化图形。 ### References 数据类型 #### bank_offset_16 定义相对于 bank 起始位置的 16 位地址。 #### pointer_l 定义指针地址的低字节。 这对于一组映射表非常有用,其中一个表跟踪地址的高字节,另一个表跟踪低字节。 #### pointer_u 定义指针地址的高字节。 这对于一组映射表非常有用,其中一个表跟踪地址的高字节,另一个表跟踪低字节。 #### pointer-1 定义紧邻指针引用地址之前的地址。 也就是说,如果数据值为 `0x8011`,并且该地址处有一个标签,则生成的文件将引用 `LABEL-1`,即有效的 `0x8010`。 #### pointer_l-1 定义紧邻指针引用地址之前的地址的低字节。 #### pointer_u-1 定义紧邻指针引用地址之前的地址的高字节。
标签:6502处理器, CTF工具, Ghidra插件, HTML导出, NES, PPU可视化, Python, ROM Hacking, Wayback Machine, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码注解, 反汇编, 复古游戏, 多模态安全, 快速连接, 数据类型管理, 无后门, 汇编语言, 游戏ROM分析, 游戏安全, 漏洞搜索, 红白机, 脚本工具集, 芯片级分析, 逆向工程, 静态分析