s-macke/OpcodeOracle

GitHub: s-macke/OpcodeOracle

AI辅助的MOS 6502反汇编工具,用于分析Commodore 64二进制文件并生成可读汇编代码。

Stars: 8 | Forks: 0

# OpcodeOracle AI辅助的MOS 6502反汇编器,用于Commodore 64二进制文件。 OpcodeOracle将流跟随反汇编与AI驱动的逆向工程相结合。它自动分类代码和数据区域,跟踪入口点的执行路径,并生成可读的汇编输出。集成的MCP服务器让您可以连接Claude(或任何MCP客户端)来交互式地注释、标记和理解反汇编的代码。 一个正在对反汇编进行逆向工程的代理: ![Agent disassembling a C64 binary](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/f81f24bf72202033.gif) ## 快速开始 ``` # 构建 cd src && go build -o opcodeoracle ./cmd/opcodeoracle # 从 C64 PRG 文件创建项目 ./opcodeoracle new prg game.prg --entry '$080D' # 查看项目摘要 ./opcodeoracle info game.opcodeoracle.json # 导出汇编 ./opcodeoracle export game.opcodeoracle.json # 创建: game.asm ``` ## 命令 | 命令 | 描述 | |------|------| | `new` | 从二进制文件创建项目(`bin`、`prg`或`sid`) | | `info` | 显示项目统计信息 | | `export` | 导出为汇编文件 | | `edit` | 编辑符号、注释、标题、区域 | | `mcp` | 启动MCP服务器(stdio或HTTP) | | `chat` | 与AI助手交互式聊天 | | `agent` | 运行AI代理进行自动化分析 | ## 创建项目 OpcodeOracle支持三种输入格式。每种格式都会创建一个`.opcodeoracle.json`状态文件,用于跟踪所有反汇编数据。 ### C64 PRG文件 2字节的加载地址从文件头读取: ``` ./opcodeoracle new prg game.prg --entry '$080D' ``` ### 原始二进制文件 手动指定起始地址和入口点: ``` ./opcodeoracle new bin firmware.bin --origin '$E000' --entry '$E000,$FFFC' ``` ### SID音乐文件 入口点从SID头自动提取: ``` ./opcodeoracle new sid music.sid ``` 所有`new`命令都接受可选的`--description`标志: ``` ./opcodeoracle new prg game.prg --entry '$080D' --description "Stunt Car Racer for the C64" ``` ## AI辅助逆向工程 ### MCP服务器 启动MCP服务器以连接任何MCP兼容的客户端: ``` # Stdio 传输 (适用于 Claude Desktop) ./opcodeoracle mcp game.opcodeoracle.json # HTTP 传输 ./opcodeoracle mcp --transport http --listen 127.0.0.1:8080 game.opcodeoracle.json ``` MCP配置: ``` { "mcpServers": { "opcodeoracle": { "command": "/path/to/opcodeoracle", "args": ["mcp", "game.opcodeoracle.json"] } } } ``` MCP服务器暴露以下工具: | 工具 | 描述 | |------|------| | `view_disassembly` | 查看指定地址的反汇编代码 | | `search_disassembly` | 搜索反汇编输出 | | `add_symbol` / `remove_symbol` | 管理命名符号 | | `add_annotation` / `remove_annotation` | 添加内联注释 | | `add_headline` / `remove_headline` | 添加节标题 | | `reinterpret_as_code` / `reinterpret_as_data` | 重新分类区域 | | `query_symbols` | 搜索符号表 | | `query_xrefs` | 查找交叉引用 | | `list_subroutines_and_data_segments` | 所有段的概览 | | `get_subroutine_context` | 详细的子程序分析 | ### 聊天和代理模式 用于快速交互式会话或完全自动化分析: ``` # 交互式聊天 ./opcodeoracle chat game.opcodeoracle.json # 自动化代理分析 ./opcodeoracle agent game.opcodeoracle.json ``` ## 推荐工作流程 1. **设置项目文件夹**,将`opcodeoracle`二进制文件和目标二进制文件放在一起: myproject/ ├── opcodeoracle └── game.prg 2. **创建项目**以运行初始流分析: ./opcodeoracle new prg game.prg --entry '$080D' --description "My C64 game" 3. **导出初始反汇编**以查看自动分析的结果: ./opcodeoracle export game.opcodeoracle.json 4. **启动MCP服务器**并连接您的AI聊天机器人: ./opcodeoracle mcp game.opcodeoracle.json 5. **开始对话**,使用类似以下的提示: AI将迭代探索代码,命名子程序和变量,注释逻辑,并识别数据结构。您可以引导它或让它系统地处理二进制文件。 6. **随时再次导出**以查看包含所有AI生成的名称和注释的更新汇编: ./opcodeoracle export game.opcodeoracle.json ## 示例输出 从SID音乐文件导出的汇编,显示符号、交叉引用和AI生成的注释: ``` $C040 copy_data_block: ; xref: branch from $C045 ; xref: branch from $C04C ; xref: call from $C015 LDA ($FB),Y ; src_ptr_LO STA ($FD),Y ; dst_ptr_LO INY BNE $C040 ; Branch to copy_data_block INC $FC ; src_ptr_HI INC $FE ; dst_ptr_HI DEX BNE $C040 ; Branch to copy_data_block $C04E copy_remaining_bytes: ; xref: branch from $C055 LDA ($FB),Y ; src_ptr_LO STA ($FD),Y ; dst_ptr_LO INY CPY #$02 BNE $C04E ; Branch to copy_remaining_bytes RTS ; === DATA SECTION === ; -------------------------------------------------------- ; Unused alternate entry points and register save/restore ; routines (dead code). ; -------------------------------------------------------- $C058 .BYTE $AB,$C0,$20,$2B,$C0,$58,$60,$20 ; === SUBROUTINE: music_play === ; -------------------------------------------------------- ; Music play entry point - called once per frame. ; Banks in I/O, processes one tick of the music engine, ; then restores banking. ; -------------------------------------------------------- $C09F music_play: JSR $C033 ; Call enable_io_ram ; Bank in I/O for SID register access JSR $C16F ; Call play_tick ; Process one music tick JMP $C02B ; Jump to restore_rom_banking ; Restore banking and return ``` ## 示例信息输出 ``` Project: Nippon.opcodeoracle.json Source: testdata/Nippon.sid Created: 2026-02-06 19:36:45 Modified: 2026-02-08 22:30:18 Origin: $B8F8 Binary: $B8F8 - $CCC9 (5074 bytes) Entry points: $C000, $C09F Symbols: 338 Subroutine: 32 Label: 165 Byte: 141 Annotations: 223 Assistant: 223 Headlines: 86 Assistant: 86 Regions: 29 Code: 2310 bytes (14 regions) Data: 2764 bytes (15 regions) ``` ## 数字格式 所有地址和数字参数接受三种格式: | 格式 | 示例 | |------|------| | `$hex` | `$C000` | | `0xhex` | `0xC000` | | 十进制 | `49152` |
标签:AI辅助, Claude集成, Commodore 64, EVTX分析, Go语言, Homebrew安装, MCP服务器, MOS 6502, SID音乐, Wayback Machine, 二进制分析, 云安全运维, 云资产清单, 代码追踪, 反汇编, 反编译工具, 可配置连接, 固件分析, 复古游戏, 嵌入式分析, 日志审计, 程序分析, 程序破解, 老软件, 自动化分析, 跨站脚本, 逆向工程