maosasagawa/blackbox-re-agent

GitHub: maosasagawa/blackbox-re-agent

一个基于 pi coding agent 的对话式黑盒逆向分析助手,通过自然语言自动驱动 radare2、Ghidra、angr 等工具链完成静态逆向分析。

Stars: 30 | Forks: 0

# revagent — 黑盒程序逻辑分析 Agent **中文** · [English](README_EN.md) 基于 [pi coding agent](https://github.com/earendil-works/pi) 的逆向分析 agent。 你只需用**自然语言和它对话**——"这个程序在干什么?""帮我找出 ./crackme 的注册码""这个 APK 有没有偷偷上传数据?"——模型会**自动驱动整套逆向工具链**:识别文件、解包、反汇编、用 Ghidra 反编译、用 angr 求解,然后写出逻辑分析报告。**你不需要手动敲任何工具命令。** 支持 **apk、.o、.hex、exe**、ELF、PE、Mach-O、裸固件镜像,并能自动按环境装配工具链。 仅做静态分析,不运行样本。 ## 怎么用:直接对话 `revagent` 这个命令只在**启动会话**时用一次,之后就是聊天。 revagent ./suspicious.apk # 启动会话(可顺便丢进一个文件) revagent # 或空启动,在对话里说文件路径 然后用中文/英文直接问,agent 会自动调用工具: 你 ▸ 这个 apk 在偷偷联网吗? revagent ▸ (自动 triage → unpack[apktool+jadx] → strings_scan → 读 manifest) 它申请了 INTERNET + READ_CONTACTS。启动 Activity 的 onCreate 拉起 UploadService,用 OkHttp 把通讯录 POST 到 https://api.evil.example/c2。 证据:sources/com/app/UploadService.java:42 … 你 ▸ ./crackme 的注册码是多少? revagent ▸ (自动 triage → decompile[Ghidra] check() → symexec[angr]) 该函数逐字节比较 5 个字符;angr 求解出输入:"rev42"。 也可以完全放手:*"分析 ./firmware.hex,告诉我这设备是干嘛的"*——它会识别、把 Intel-HEX 转成二进制、从中断向量表推断 CPU、按正确加载基址反汇编,并给出逻辑说明。 如果缺某个工具,它会先用现有工具尽量分析,再请求安装缺失工具(`provision` 工具)后继续—— 无需你手动配置环境。 ## 案例:分析汽车供应商交付的黑盒代码 **背景**:某 Tier-1 供应商只交付了 ECU 固件,不给源码。作为 OEM/集成方,你需要在不接触源码 的情况下:①搞清楚控制逻辑;②做安全性评估(ISO/SAE 21434 视角:有无后门、硬编码密钥、不安全 内存操作、可被滥用的诊断服务);③学习其算法(如控制算法、校验和、UDS 安全访问的 seed-key 算法)。交付物通常是 `ecu_app.hex`(Intel-HEX 固件)、`.bin` 镜像,或某个 `.o`/`.a`、甚至 一个 Windows 标定工具 `.exe`。 启动并对话: revagent ./ecu_app.hex 你 ▸ 这是供应商交付的 ECU 固件。先确认它是什么、跑在什么芯片上,再给我一个分析计划。 revagent ▸ (triage → unpack[ihex→bin]) Intel-HEX 固件,加载基址 0x08000000、约 192KB。首字为初始 SP(0x20005000)、 次字为复位向量(0x08000ab1,奇地址=Thumb)→ ARM Cortex-M。计划:定位向量表/复位 入口→主循环与 CAN 分发→标定区/版本串→重点函数反编译→安全访问算法。 你 ▸ ① 先讲控制逻辑:主循环和它怎么处理 CAN 报文。 revagent ▸ (disasm 复位入口 → 跟 bl 调用 → decompile 主循环/分发函数) 复位后初始化时钟与外设,进入 main loop。0x0800x x 处是 CAN 接收中断处理:按 报文 ID 查跳转表分发——0x7E0 进入 UDS 诊断处理,0x120/0x121 是扭矩/转速控制帧。 控制算法在 ctrl_step():读传感器→PID(Kp/Ki/Kd 取自标定区 0x0801F000)→限幅→写 PWM。 你 ▸ ② 安全性评估:有没有硬编码密钥、后门、不安全内存操作、危险的诊断服务? revagent ▸ (strings_scan + symbols + decompile 诊断处理 + 审查内存操作) 发现: • UDS 0x27 安全访问已实现;seed→key 用固定常量异或+移位(弱算法,见③)。 • 标定区存在 16 字节疑似硬编码密钥 0x0801F100;被 routineControl 0x31 引用。 • diag 处理里有未做边界检查的 memcpy(请求长度直接取自报文,栈溢出风险)。 • 存在一条未公开的诊断子功能(0x3E 之外),会跳过认证直接写 RAM——疑似后门。 以上均标注了地址与反编译片段作为证据。 你 ▸ ③ 学习算法:把 seed-key 安全访问算法还原出来,并验证。 revagent ▸ (decompile compute_key() → 用 symexec/重写复现) compute_key(seed) = ((seed ^ 0xA5A5A5A5) <<< 7) + 0x3C2F。已还原为可执行伪码, 并对样例 seed 校验:seed=0x11223344 → key=0x….(与固件比较逻辑一致)。 你 ▸ 把以上整理成一份评估报告。 revagent ▸ 输出:标识与平台 / 控制逻辑 / 安全发现(按风险排序,附地址证据)/ 还原的算法 / 建议(删除后门子功能、加 memcpy 长度校验、更换为强 seed-key 算法)/ 待确认项。 要点:你全程只是**用中文提问**,识别、解包、反汇编、Ghidra 反编译、angr 求解都是 agent 自己 完成的;每个结论都附带地址/符号/反编译片段作为证据。若交付物是 `.exe` 标定工具或 `.o` 目标 文件,换成对应路径即可,agent 会自动走 PE / 目标文件 的分析流程。 ## 模型配置(pi 的 provider) revagent 用 pi 当前配置的模型,不写死任何模型。配置在 **`~/.pi/agent/settings.json`**, 凭据在 **`~/.pi/agent/auth.json`**。完整的 provider 列表与说明见官方文档: **https://pi.dev/docs/latest/providers** ### 方式一:`/login`(推荐) 启动会话后,在输入框直接输入斜杠命令: revagent # 启动 /login # 选择 provider 登录(Claude Pro/Max、ChatGPT/Codex、 # GitHub Copilot 订阅,或填入各家 API Key) /model # 切换当前会话使用的模型 /logout # 退出登录 OAuth 令牌 / API Key 会保存在 `~/.pi/agent/auth.json`,并自动续期。 ### 方式二:环境变量 API Key export ANTHROPIC_API_KEY=sk-ant-... # 或 OPENAI_API_KEY / GEMINI_API_KEY / OPENROUTER_API_KEY … revagent ./target.exe 各 provider 对应的环境变量名见上面的官方 providers 文档。 ### 方式三:设默认模型(`~/.pi/agent/settings.json`) { "defaultProvider": "anthropic", "defaultModel": "claude-opus-4-8", // 逆向任务建议用推理能力强的模型 "defaultThinkingLevel": "high" // off | minimal | low | medium | high | xhigh } ### 临时覆盖(不改配置) 启动器会把 pi 的参数原样透传: revagent --provider anthropic --model claude-opus-4-8 ./target.exe revagent --model claude-sonnet-4-6:high ./target.exe # provider/型号:thinking revagent --list-models # 列出可用模型 id ## Agent 能做什么(它替你调用的工具) 这些工具你不用手动调,模型会自己调;它们会自动选择当前已安装的最佳后端,缺失时也会如实告知 并降级处理。 | 工具 | 用途 | |------|------| | `triage` | 识别格式/架构/加壳,给出分析方案(一律先跑这个) | | `unpack` | apk(apktool+jadx)· zip/7z · UPX 脱壳 · 固件分离(binwalk)· Intel-HEX→bin | | `strings_scan` | 提取并分类字符串(url/ip/加密常量/路径/敏感词) | | `symbols` | 导入/导出/符号/重定位/段 | | `disasm` | 反汇编函数或地址区间(rizin → objdump → capstone) | | `decompile` | Ghidra headless 反编译伪 C(无 Ghidra 时回退 rizin) | | `symexec` | angr 符号执行——求解能到达指定地址的输入(注册码/口令校验) | | `provision` | 按需安装/修复工具链 | 它还有 pi 内置的 `bash`/`read`/`write`,并会按文件类型自动加载对应**技能**(triage 路由、 ELF/.o、PE/exe、Android apk、固件/Intel-HEX)。会话内输入 `/revagent-tools` 可查看已检测到 的工具链。 ## 自带的工具链 | 阶段 | 工具 | |------|------| | 识别 / 解包 | `file`、`binwalk`、`7z`、`unzip`、`upx`、`apktool`、`jadx` | | 结构 / 反汇编 | `rizin`/`radare2`、binutils、`capstone` | | 解析 | `lief`、`pyelftools`、`r2pipe`、`intelhex`、`unicorn`、`macholib` | | 反编译 | **Ghidra** headless(自动配套 JDK) | | 符号执行 | **angr** | 安装器会探测系统的发行版/包管理器,只安装缺失项,对重型工具(Ghidra/angr)按可用磁盘做门控, 并写出能力清单 `~/.pi/agent/revagent/tools.json` 供 agent 读取。 ## 安装 ### 方式一:交给你的 coding agent 安装(推荐) 把整个 `revagent/` 目录发给你的编码助手(Claude Code、pi、Codex、Cursor 等),贴这段话: agent 会读懂文档、按需执行安装、并处理过程中的环境差异(包管理器、磁盘、JDK 等)。 ### 方式二:手动安装 cd revagent ./install.sh # 完整:静态分析 + Ghidra + angr,并按需自动装 pi ./install.sh --light # 仅静态,跳过 Ghidra + angr(磁盘紧张时用) ./install.sh --no-pi # 不自动安装 pi(只装逆向工具链) 部署到 `~/.pi/agent/revagent/`,并把 `revagent` 软链到 `/usr/local/bin`。安装器**幂等**——随时 重跑可补齐缺失工具;apt 以非交互方式运行(不弹窗、不卡死)。 ## 不止用于 pi:通用性 这套东西核心是「**逆向工具链 + 一组独立脚本 + 技能/提示词**」,pi 只是其中一种对话外壳: | 组件 | 是否依赖 pi | 其他 agent / 人怎么用 | |------|:----------:|----------------------| | 工具链(radare2/Ghidra/angr/jadx…) | 否 | 系统级安装,谁都能用 | | `agent/bin/*.py` 辅助脚本 | 否 | 任何 agent 用 `bash` 直接调用,或人手动跑 | | `agent/skills/*/SKILL.md` | 否 | 遵循 [Agent Skills 标准](https://agentskills.io),Claude Code / Codex 等可直接加载 | | `agent/system.md` 提示词 | 否 | 作为任意 agent 的系统提示词 | | `agent/extensions/index.ts` 扩展 | **是** | pi 专用(封装成 8 个工具);别的 agent 直接调脚本即可 | | `bin/revagent` 启动器 | **是** | pi 专用 | 为此仓库自带跨工具适配:根目录的 **`AGENTS.md`**(pi / Codex 通用)和 **`CLAUDE.md`**(Claude Code)会让任意 agent 一进仓库就知道怎么用这套工具;安装器还会把 `agent/skills/` 自动软链到 **`~/.claude/skills/`** 和 **`~/.codex/skills/`**(若检测到对应 harness),让 Claude Code / Codex 原生加载这些技能。 所以:在 **Claude Code / Codex** 里,把 `agent/skills/` 当技能加载、把 `agent/system.md` 当系统 提示词,让它用 `bash` 调 `agent/bin/` 下的脚本,就能得到同样的能力——无需 pi。例如: python3 ~/.pi/agent/revagent/bin/triage.py ./ecu_app.hex python3 ~/.pi/agent/revagent/bin/strings_scan.py ./firmware.bin python3 ~/.pi/agent/revagent/bin/hex2bin.py ./ecu_app.hex python3 ~/.pi/agent/revagent/bin/symexec_find.py ./crackme --find 0x… --stdin 16 # 反汇编/反编译直接用系统里的 radare2 / Ghidra headless / objdump ## 目录结构 install.sh 环境感知安装器(同时自部署,供 provision 复用) bin/revagent 启动器(用 RE 提示词 + 扩展 + 技能 包装 pi) agent/system.md 逆向专家系统提示词 agent/extensions/index.ts pi 工具(triage/unpack/…/symexec/provision) agent/bin/*.py 辅助脚本(triage、strings、hex2bin、capstone、ghidra、angr) agent/skills/<格式>/SKILL.md 各格式分析工作流 test/load_extension.mjs 扩展离线自检 ## 安全与边界 仅用于授权分析(恶意软件研究、CTF、审计、你自己的程序)。Agent 只重建并解释程序逻辑,不产出 可直接使用的恶意软件、武器化漏洞利用或免杀工具;也绝不运行目标样本——`symexec` 是在 angr 的 隔离虚拟机里对代码路径做推理。
标签:云安全监控, 自动化工具链, 自动化攻击, 自动化逆向, 逆向分析, 逆向工具, 静态分析