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客户端)来交互式地注释、标记和理解反汇编的代码。
一个正在对反汇编进行逆向工程的代理:

## 快速开始
```
# 构建
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, 二进制分析, 云安全运维, 云资产清单, 代码追踪, 反汇编, 反编译工具, 可配置连接, 固件分析, 复古游戏, 嵌入式分析, 日志审计, 程序分析, 程序破解, 老软件, 自动化分析, 跨站脚本, 逆向工程