SKILL.md
AI 翻译,以原文为准。
REA#
当某项论断依赖于已发布的二进制文件或软件包、反编译结果、被动的应用运行时证据,或需要与现有源码无法确立的行为进行比较时,请使用 REA。对于完整源码仓库的常规分析,请使用普通的仓库工具,不要运行 REA 的就绪检查或 provider 命令。
仅在需要时连接#
安装此 skill 只提供说明;它不会注册 REA MCP 服务器、不会安装分析引擎,也不会向已在运行的 agent 添加工具。
如果 REA 工具可用,且已知其注册信息未过期,请直接进行目标分析。不要在每次调查前都运行诊断或安装配置。使用已连接服务器实际的工具列表和输入 schema;从仓库 main 安装的 skill 可能描述较旧 npm 版本中并不存在的能力。当该服务器不提供保留引用(retained references)时,请保留完整的内联 Evidence。
如果工具不存在、调用被客户端阻止,或所需的 provider 不可用,请阅读连接与恢复。诊断观察到的阻塞点,继续开展受支持的有用工作,并在修复后恢复原任务。客户端审批、shell PATH、注册信息和引擎可用性各有不同的补救措施;避免对所有这些情况重复执行安装配置。
- 在不更改 REA 或客户端配置的前提下进行诊断。
npx可能会下载软件包并写入 npm 缓存。对于 Codex,请运行npx -y rea-agents@latest doctor --client codex --json。替换为当前受支持的客户端:claude_code、claude_desktop、codex、cursor、gemini_cli、windsurf、devin、opencode、antigravity、copilot_cli、commandcode、vscode、grok_build、omp或grok_bot。grok_bot没有本地 文件注册:doctor 会报告 Grok Bot 聊天步骤,且 setup 不会 写入mcp.json。如果客户端未知,请使用doctor --json并 在选定安装配置范围之前检查其注册结果。 - 区分原因。注册信息缺失、格式错误或过期,需要进行 限定范围的配置修复。注册已对齐但活动会话中没有工具, 则需要重启/重新连接;doctor 无法证明当前 agent 已连接。缺少某个 provider 只影响需要 该 provider 的任务:静态 JavaScript 检查既不需要 Hopper 也不需要 Ghidra, 而 Android 检查有单独的、自带 JADX/Java 的前置条件。
- 对于配置修复,先准备只读计划:
npx -y rea-agents@latest setup --client codex --dry-run --json。 使用当前客户端的 ID,展示其确切提议的路径、备份和 更改,并在 setup 写入配置或安装 Hopper 之前获得批准。setup 通常还会安装匹配的捆绑 skill;请将该 替换项也纳入审阅过的计划。批准之后,使用npx -y rea-agents@latest setup --client codex --yes应用相同范围。仅当该项独立安装 确有必要并已明确批准时,才添加--install-hopper。 - 重启/重新连接受影响的 agent。确认 REA 工具确实出现在 会话中,然后恢复原调查。如果它们仍然缺失, 请检查客户端的 MCP 启动错误,而不是重复执行 setup。
REA setup 从不会安装或升级 Node.js、npm、Homebrew、Java、Ghidra、IDA、
JADX、Kuna、Binwalk 或 Unblob。请使用现有的前置条件;不要为了修复
MCP 注册而安装无关软件。对于不受支持的客户端,请使用版本固定的 rea-agents 包进行手动 stdio 注册,
或继续通过 CLI 操作。
对于操作者提供的 JavaScript 目录树或 ASAR,一个具体的 CLI 回退方案是:
npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json
不需要 MCP 注册或原生引擎。请像对待 MCP 结果一样,谨慎阅读返回的 Evidence、
graph、limitations 和 unknowns;CLI
直接返回 Evidence 记录。此回退方案并不证明 MCP 已配置。
原生 CLI 任务仍需要其所选的引擎。
优先使用已有的 rea CLI。当未安装任何 CLI,且获取 REA 包
在授权范围内时,改用 npx -y rea-agents@latest。
配置修复从只读 setup 计划开始;在应用已授权的更改之前,展示路径、备份和
skill 替换。保持现有的审批
与目标执行边界。REA setup 从不会安装或升级无关
软件,包括 Node.js、npm、Homebrew、Java、Ghidra、IDA、JADX、Kuna、Binwalk 或 Unblob。
先对目标进行路由#
根据用户提供的目标选择第一个工具。对于活动目标的原生或归档工作流,使用 open_binary;
无目标工具接受各自显式的路径或端点,不需要它。
-
ASAR 或已提取的 JavaScript/Electron 目录树:
analyze_javascript_application。 -
归档/包成员清单(ZIP/APK/IPA/MSIX/AppX 或 DMG): 使用提供的本地路径调用
open_binary;当其 graph 和 findings 有助于回答问题时,使用inspect_artifact。 -
Android APK 代码、类、方法或传入引用:
inspect_android_package,随后在可用时使用专门的 Android 工具。 归档成员清单仍使用上述归档路由。 -
托管 PE/CLI 程序集:
inspect_managed_artifact。 -
固件镜像:在可用时使用
inspect_firmware_regions。当请求提取时使用extract_firmware,输出目录由调用方选择一个全新的 绝对路径。这些工具在 Linux 上使用调用方提供的 Binwalk/Unblob; 参见固件指南。 -
.NET NativeAOT PE/ELF:原生 Ghidra 分析。原生代码可能产生伪代码; 关于可选的元数据恢复及其受支持的主机/布局边界,请参阅
references/native-and-artifacts.md中的 NativeAOT 工作流。 -
用户自有且已打开的浏览器页面:
list_browser_targets。 -
agent 必须执行的浏览器操作(点击、输入、导航): 使用带声明动作的
capture_browser_scenario。关于连接/启动 以及专门的后续浏览器工具,参见 运行时观察。 -
Fiddler Everywhere 流量或原生
.saz捕获:请阅读 Fiddler 工作流。 使用inspect_web_network_capture和format: "saz"检查已保存的 SAZ; 对于实时流量,请连接 Everywhere 独立的 MCP 服务器。 -
已保留的 HAR/SAZ/原生 mitmproxy/aioquic qlog 捕获:
inspect_web_network_capture。在有帮助时 选择原始记录序号;检查生产者字段和字节/数字 sidecar,而不获取已记录的 URL 或声称实时归因。关于确切的上游 profile 和凭据排除项,参见 历史捕获。Qlog 支持从 aioquic 1.5.0 JSON 0.3 开始;流覆盖与端点丢失声明并不能恢复 body, 也不能确立网络丢包。优先使用 detail summary,然后是 kind qlog trace/stream 页面;为贡献/范围页面选择一个 trace、stream ID 和方向。 Facts 的作用范围是选定之前的所有已记录事件。其他 qlog 布局 和 PCAP 关联不受支持。 -
用户自有且已打开的 Electron 运行时:
list_electron_targets。在尝试 electron-main Inspector 之前,使用inspect_electron_fuses检查打包 fuses;EnableNodeCliInspectArguments被禁用意味着应用会忽略--inspect。 -
数据包字段发现:
inspect_packet_fields会在为inspect_packet_capture选择字段之前,搜索已安装的协议 以及字段名/类型。 查询/分页查看相关记录;注册本身并不确立已观察到流量。 -
已记录的数据包捕获:使用选定 TShark 字段、 显示过滤器和 decode-as 规则的
inspect_packet_capture。需要 Linux、util-linux prlimit 和REA_TSHARK_COMMAND;参见 捕获指南。 数据包限制统计的是过滤之前的输入数据包。输出默认返回 50 个匹配 帧;使用match_offset/match_limit查看后续页面,或显式设置 null 限制以输出全部匹配结果。跨页保留源摘要。 这不执行实时捕获。 对于地址/DNS/SNI/协议摘要,使用 MCP detail summary 的inspect_pcap_capture,然后使用保留的 kind pcap 页面。需要 Wireshark 4.x tshark 和 capinfos,以及 Linux prlimit 或 Windows Job Objects;参见 数据包摘要。 为地址页面选择一个确切的 DNS 问题;页面耗尽并不能证明 网络完整性。此工具读取录制文件,不获取流量。 -
解码器发现:
inspect_signal_decoders会搜索已安装的解码器 ID 或所选解码器的帮助信息,包括通道和选项。在选定设置之前查询并分页查看 相关细节;这不会扫描硬件。 -
已记录的逻辑/信号轨迹:使用显式解码器、 通道和协议设置的
decode_signal_recording。在装有 util-linux prlimit 的 Linux 上,通过REA_SIGROK_COMMAND提供 sigrok-cli 0.7.2;参见录制指南。 输出默认返回 50 行字面文本;选择注释类别并使用line_offset/line_limit分页,或对剩余全部输出显式设置 null。 窗口计数是显示行数,而非注释或采样数。跨页保留源摘要。 此工具读取现有文件;它不采集硬件信号。 -
显式的本地 WebAssembly 产物:
inspect_wasm_artifact。通过REA_WABT_BIN_DIRECTORY提供 WABT 1.0.42;保留确切的字节/工具身份和已解码的 WAT。 显式选择 JavaScript 胶水代码和候选路径,并保留 URL/路径 歧义。不做隐式获取或目标执行;WAT 不是原始源码。 参见 WASM 指南。 -
显式的本地 EVM 字节码载体:使用调用方选择的
raw或hex编码的inspect_evm_interface。保留载体/解码摘要,并将选择器、 参数字符串和可变性视为推断出的候选;这不执行链上 查询或目标执行。若要在不使用 hex 或重复 stdout 的情况下获得完整的推断接口,请先 发现支持并选择detail: "summary";完整的 Evidence 会以其原始身份保留。使用返回的parent_evidence_id获取确切函数或bytecode_hex/stdout/stderr 页面。 候选覆盖并不能确立接口完整性。参见 EVM 字节码指南。 -
内嵌的 Go 编译器、模块或构建设置元数据:使用显式本地文件的
inspect_go_binary。 此内置的无目标检查不需要安装 Go 或反汇编器。保留原始模块字节和源码范围; 元数据缺失并不能证明二进制不是 Go 编写,未解析的文本记录 仍然显式保留。参见 Go 二进制指南。 -
内嵌的 cargo-auditable Rust 依赖元数据:使用显式本地 ELF、PE 或 thin Mach-O 文件的
inspect_rust_binary。 此内置的 无目标检查无需安装 Rust 或反汇编器。保留 包顺序、依赖索引和 section 文件范围。缺少.dep-v0section 属于 null 元数据,并不证明该二进制没有依赖。 rustc 提交哈希是从只读/rustc/<40-hex>/路径推断出来的。 参见 Rust 二进制指南。 -
显式本地 SQLite 数据库快照:
inspect_sqlite_database。使用 Node.js 24.x >=24.15 或 26+ 检查,提供原生 SQLite 限制。先读取 schema(默认紧凑清单),或在需要行时选择精确的普通表和columns。默认为选定表的 schema 和 20 行;请求schema_scope: "database"获取完整存储的 schema。保留数据库和现有同级 WAL 的身份;行样本报告截断,且顺序未指定。使用静止快照,而不是假设实时数据库/WAL 对已被原子复制。参见 SQLite 指南。 -
用于离线布局、符号、重定位或静态缓解证据的显式 Linux ELF 文件:
inspect_binary_layout。此无目标操作使用调用方提供的 pwntools,不打开反汇编器数据库。保留其原始位置以及推断/覆盖范围限制;参见离线二进制指南。 -
提供的 Linux x86-64 ELF core 文件:
inspect_recorded_crash。读取每个记录的线程、原始注释和源绑定寄存器,而不打开实时目标。历史 PID 不会选择实时进程。仅当仅 core 的映射候选有帮助时,才请求include_debugger_context;参见记录崩溃指南。 -
PE 资源类型/名称/语言树和静态图标组引用:使用显式路径的
inspect_pe_resources。此可移植操作不需要活动目标或引擎;不透明负载保留文件范围和 SHA-256。 -
原生可执行文件、库或分析数据库:
open_binary,然后直接使用聚焦分析工具;当元数据或清单上下文有用且可从所选提供者获得时,调用binary_overview。
对于现有的 IDA MCP 配置,使用 open_binary 并传入原始输入二进制文件和 provider_id: "ida";不要传入 .idb 或 .i64 数据库。旧版附加配置文件通过 SHA-256 绑定已打开的 GUI 输入,并保持其数据库打开。现代无头配置文件创建并关闭拥有的私有数据库,不保存。安装和注册复用 mrexodia/ida-pro-mcp;参见 IDA 提供者指南。打开后直接进行 analyze_function、伪代码或函数/字符串搜索;IDA 不提供 binary_overview。在编排更广泛的工作流时,请咨询会话可用性。现代直接调用方和不支持的档案方面仍然未知;实时 IDA 结果不会从快照重放。
配置了 REA_KUNA_COMMAND 后,provider_id: "kuna" 从 Kuna 的缓存全程序导出中回答过程列表、查找、伪代码、汇编和 analyze_function。调用方/被调用方使用会话共享的独立无主体图;xrefs 返回精确地址的入站位置并过滤转发别名。这些查询和清单查找不会触发 C 导出。间接目标仍然未知,可能使关系覆盖不完整。引用缓存在关闭时过期;新的 CLI 进程会重复原生引用遍历。类型化引用、CFG、原始内存工具和注解仍不受支持。冷启动的首次回答可能来自单函数运行(其限制会说明);汇编等待导出。对于伪代码和汇编,raw_result.source 命名缓存的 .c/.asm 文件和字节跨度,你可以直接搜索,而无需逐个函数调用。参见 Kuna 提供者指南。
如果用户只说“我的应用”而没有名称、路径或已为此任务选定的目标,在搜索工件前先询问是哪个应用。无关保存报告和附近测试夹具中的路径不会选择用户的目标。尽可能将实际可读的应用名称解析为一个清晰的已安装工件;匹配不明确时询问。绝不要代表用户选择示例应用。
在无目标会话中,使用 open_binary 绑定任何归档/包或原生目标,其分析工具作用于活动目标。不要调用未公布的工具;使用 {} 检查 binary_session 及其 result.tool_availability 以了解可用性原因和补救措施。将每个组的 names 展开为条目,继承清单级客户端要求,除非组覆盖它们。在其封闭的效果和注解词汇表中,列出的标志为 true,省略的已知标志为 false。分组名称并集是完整的工具清单;使用 tools/list 获取规范工具 schema。提供者候选事实描述可能的提供者,而顶层会话能力描述当前路由,analysis_provider_binding 命名所选提供者。不要将这些范围视为可互换。
工作摘要优先#
从默认结果开始,并使用其内联 Evidence 和图形上下文。
对于大小未知或较大的 JavaScript 应用或 ELF 布局,调用 analyze_javascript_application 或 inspect_binary_layout 并传入 "detail": "summary",然后使用 inspect_analysis_view 检查保留的 parent_evidence_id。
分页模块身份并在请求项目之前选择返回的 node_id;单个文件路径可以表示多个图形角色。在没有更改输入或解决阻塞的情况下,不要重复相同的分析或被拒绝的调用。当生命周期变化使该状态有用时,重新检查会话状态。仅当返回结果留下特定问题未回答时,才进行聚焦的后续操作。
如果 MCP 报告 resource_constraint 且 details.resource: "transport",使用其报告的同一会话 Evidence 引用调用 inspect_analysis_view 以获取摘要、一个部分/模块或稳定页面。一旦已知种子,使用 trace_application_feature,或调用 export_evidence_bundle 将完整会话写入选定路径。分析在账本中保持完整;避免仅仅为了请求相同的超大响应而重复它。完整的 CLI JSON 输出也会流式传输,而无需单个 MCP 帧。
当保留的父 ID 未知时,使用 get_evidence_bundle 并传入 detail: "summary" 以及操作、目标 SHA-256、分析配置文件摘要或规范过程地址的精确过滤器。选择其返回的 Evidence ID 用于下一个视图,而不是请求完整捆绑包。retention: "complete-record" 表示整个记录已存储;原生值流截断和未知元数据保持独立。对于导出的可移植捆绑包,使用 rea inspect-evidence-bundle,其 JSON 包含 path、detail: "summary" 和相同的 filters。读取该文件仍需要在本地内存预算内验证其完整内容。
客户端也可以在没有 REA 传输错误的情况下截断成功的工具结果。将该预览视为不完整;使用保留的父 ID 获取较小的视图,或在需要完整记录时导出。不要将预览解析为规范 JSON 或重复生产者。对于 JavaScript,在深入大型图之前阅读模块视图和跟踪配方;广泛的双向跟踪即使在摘要分析后也可能扩展无关的包含关系。
每个结论都必须区分观察、推断和未知。引用 Evidence ID,保留限制和不完整覆盖,绝不要暗示静态分析观察到了执行。运行时请求执行声明的目标和生命周期;不要将目标或操作扩展到这些字段之外。
在用户请求的调查范围内,直接调用可用的分析工具。REA 不需要权限授予或每次调用批准标志。代理客户端可以独立要求批准。遵循声明的请求范围和主机的实际访问要求;对于观察到的客户端策略拒绝,使用恢复指南。
规划更广泛的调查#
对于跨越多个功能或子系统的请求,使用分阶段工作流:
- 将请求转化为问题和每个答案所需证据的清单。在再次询问信息之前,从对话和工作区解析目标身份和约束。
- 检查当前 REA 会话、工件身份、保存的分析数据库、书签和先前证据。重用匹配状态;不要打开重复会话或重复相同分析。
- 从最小有用的概览或清单开始。从每个问题的入口点追踪相关数据和状态变化到其结果。围绕特定假设批量处理相关操作,然后仅在返回证据留下具体缺口时扩展。
- 当相关打包资源和配置影响问题时,与代码一起检查它们。使用格式感知的清单和解析器;不要仅从文件名、字符串或布局推断行为。
- 用所需的证据类型佐证结论。仅当静态证据无法回答问题且所需主机运行时和 OS 访问可用时,才使用运行时观察。对于 JavaScript 行为,通过可用的浏览器、Electron 或进程捕获工作流对实际应用运行探测。
- 将工作分解为独立问题。当并行工作器可用且问题互不依赖时,分配不同范围,将工作器指向现有证据,并要求它们返回来源、结论和未解决的缺口。否则,按顺序工作。
- 保持简洁的发现账本,将每个结论链接到 Evidence ID、置信度/证据类型、搜索边界和剩余未知。更新共享索引或调查报告,以便后续阶段重用结果。
在完成之前,重新审视原始清单。根据证据将每个问题标记为已回答、部分回答或未解决;保持有界否定搜索的有界性,不要在所需问题仍未解决时将广泛调查描述为完成。
只阅读相关指南#
- 原生二进制文件、托管程序集、归档和提取: references/native-and-artifacts.md
- ASAR、提取的 JavaScript、功能跟踪和版本比较: references/javascript-applications.md
- Android APK 声明、类、方法和静态引用: references/android-applications.md
- 浏览器/Electron 观察(被动和场景)以及静态/运行时协调: references/runtime-observation.md
- 证据分页、比较、残余未知和验证: references/evidence-workflows.md
完成任务#
用通俗语言解释发现,并将其与返回的证据联系起来。当用户要求构建某物时,使用常规编码工具,并将观察到的行为与设计选择分开。调查完成后,使用 close_binary 关闭已打开的原生会话。
来源、依赖与合规声明(中文)#
- 来源:开源项目 morluto/rea(https://github.com/morluto/rea),本目录对应其 .agents/skills/reverse-engineer-anything 技能。
- 原作者:morluto;许可证:MIT(完整条款见 LICENSE.txt,版权声明已保留)。
- 性质:这是 REA 的“使用指令/工作流手册”,不含工具本体。要真正使用,需自行安装 REA MCP 服务器(npm 包 ea-agents)及 Ghidra/IDA/Hopper/JADX 等分析引擎,并按其官方文档配置。
- 合法用途:仅用于安全研究、恶意软件与事件分析、漏洞研究与协同披露、CTF 与教学、互操作、软件保护,以及调试/审计你拥有或已获授权的软件。
- 明确禁止:不得用于绕过 DRM、授权校验或反作弊,不得开发外挂、破解访问控制,不得复制专有软件或其受保护代码与素材。详见 DISCLAIMER.md。
- 使用者需自行取得授权并遵守当地法律、软件许可与服务条款。本技能为转载,正文保持原样,仅追加本中文声明。
中文安装指引(AI 助手请先阅读,再引导用户)#
重要:本技能只提供“工作流指令”。安装它不会自动安装 REA 程序,也不会自动注册 MCP。任何下载、安装、改配置的操作,都必须先向用户说明、获得明确同意后再执行,禁止静默安装。
0. 先判断目标,按能力选路径(不要一上来装全部)#
- 静态 JavaScript / Electron ASAR / 普通 ZIP 清点:无需 Ghidra/Hopper,只需 Node,走命令行即可(最轻量,建议先试)。
- 原生 exe / ELF / 动态库:需要 Ghidra(免费,需 Java)或 IDA / Hopper。
- 安卓 APK:需要 JADX。
- 网络抓包 HAR/PCAP:需要 Wireshark(tshark);信号、固件、WASM、EVM 等分别需要 sigrok、Binwalk、WABT 等。
1. 检查基础环境#
- Node.js:REA 要求
^22.19、^24.11或>=26。让用户运行node --version确认;未装或版本过低时引导用户自行安装(REA 不会替你升级 Node)。 - 确认 npx 可用:
npx --version。 - 检查是否已装 REA:
command -v rea(Windows 用Get-Command rea)。
2. 最小可用:不注册 MCP,先跑命令行(最省事)#
对一个已解压的 JavaScript/Electron 目录或 ASAR:
npx -y rea-agents@latest analyze-javascript-application "C:\完整路径\app" --json
该命令会临时下载并运行 REA,仅做静态分析,不需要 Ghidra,也不修改客户端配置。结果较大时重定向到文件再查看。
3. 想让 AI 在对话中直接调用 REA 工具(注册 MCP)#
以下步骤均需先让用户确认:
- 只读诊断(不改动配置):
npx -y rea-agents@latest doctor --client <客户端ID> --json - 先 dry-run 生成计划,把将写入的路径、备份、改动完整展示给用户:
npx -y rea-agents@latest setup --client <客户端ID> --dry-run --json - 用户明确同意后再执行:
npx -y rea-agents@latest setup --client <客户端ID> --yes - 重启客户端,确认 REA 工具真正出现在会话中。
受支持的客户端 ID:claude_code、claude_desktop、codex、cursor、gemini_cli、windsurf、vscode、trae、antigravity、qwen_code 等。
关于豆包 / 其他不在官方名单的客户端:REA 的一键 setup 不支持豆包。豆包自定义插件目前主要支持 HTTP 型 MCP,而 REA 是本地命令型(stdio)MCP:
- 若豆包支持添加本地 stdio 命令型 MCP,可让用户按其官方文档手动注册(启动命令固定为
npx -y rea-agents@latest mcp,建议锁定版本); - 若不支持,则在豆包中直接使用第 2 步的命令行方式,或改用 Codex / Claude Code / Cursor 等受支持客户端;
- 不要为了让命令跑通而关闭客户端的沙箱或安全策略。
4. 分析引擎按需安装(REA 不自动安装)#
- REA 不会安装/升级 Node、Java、Ghidra、IDA、JADX、Binwalk、tshark、sigrok 等。
- 仅当用户的目标确实需要某引擎时,才引导用户自行安装;
--install-hopper仅在用户明确需要且同意时才加。 - 引擎缺失时,先完成不需要该引擎的分析,并明确告知“哪部分证据暂时无法获取”,不要用其他目标替代。
5. 授权与合规红线(每次分析前确认)#
- 只能分析用户拥有或已获授权的目标;若用户只说“我的 App”,先确认是哪一个,绝不替用户选择目标。
- 禁止:绕过 DRM / 授权校验 / 反作弊、开发外挂、破解访问控制、复制专有软件代码或素材。
- 每条结论都要区分“观察 / 推断 / 未知”并引用证据;静态分析没看到执行,就不能声称观察到了运行行为。
- 安装、配置写入、注册 MCP 均需用户当次明确批准;不要重复执行被拒绝的命令,不要静默扩大权限。
用途与依赖
作者没写,这些是平台读文件后整理的,以文件为准。
使用示例
请求:帮我分析这个 Electron 安装包的自动更新功能,说明它怎么检查版本和下载更新;这是我自己公司的应用。
预期
先确认目标路径和授权范围,再按 Electron/ASAR 路由调用 analyze_javascript_application,优先用 summary 保留父级 Evidence;围绕更新检查、下载和安装入口做 trace_application_feature,并读取相关模块、package.json、preload 和 IPC 静态观察。若用户能提供已打开 Electron 的本机 CDP 端点,再补充被动运行时观察并与静态证据对照。最后用中文给出结论,逐条引用 Evidence ID,并单列观察、推断和未知,不把静态分析说成已经观察到执行。
- 适用场景
- 分析打包后的 Electron/JavaScript 或 ASAR,定位功能实现、模块关系和版本差异
- 分析原生可执行文件或动态库的函数、字符串、调用关系并获取反编译伪代码
- 分析 Android APK 的清单、类、方法反编译和静态引用
- 清点 ZIP、APK、IPA、MSIX/AppX、DMG 等包内容并按需提取
- 检查固件、WASM、EVM 字节码、Go/Rust 元数据、PE 资源和 SQLite 快照
- 查看已保存的 HAR/SAZ、PCAP/PCAPNG、qlog 或逻辑信号录制
- 被动观察已打开的浏览器或 Electron 运行时,并与静态分析结果对照
- 比较两个版本的功能、导出对象或静态接口变化,并建立证据清单
- 输入
- 目标文件或目录的绝对路径,或明确的应用名称;同时确认用户拥有该目标或已获授权
- 要回答的具体问题,例如某个功能如何实现、某个版本改了什么
- 目标类型信息(可选),例如 ASAR、APK、PE、ELF、固件、PCAP
- 需要比较的另一版本或基准版本
- 已安装的 MCP 客户端 ID,或现有的 REA 连接/CLI 环境信息
- 可用的分析引擎及路径/环境变量,例如 Ghidra、JADX、tshark、WABT
- 已打开浏览器或 Electron 实例的本机回环 CDP 端点(做运行时观察时需要)
- 输出偏好,例如只要摘要、需要完整证据,或指定证据导出路径
- 输出
- 中文分析结论,区分观察、推断和未知,并引用 Evidence ID
- 反编译伪代码、汇编、函数调用关系、字符串和资源清单
- JavaScript/Electron 模块图、功能追踪路径、版本或导出对象差异
- Android 清单、类/方法反编译结果和静态引用关系
- 包、归档或固件的成员清点与按需提取结果
- 已保存网络/信号录制的分析结果,或浏览器/Electron 被动捕获观察
- 可导出的完整 Evidence 包,以及摘要、模块或分页视图
- REA 连接诊断结果和配置修复 dry-run 计划,包含拟写入路径、备份和改动
- 运行环境
- Node.js(REA 要求 ^22.19、^24.11 或 >=26)与 npm/npx;可选 MCP 客户端,如 Codex、Claude Code、Cursor;原生分析需外部 Ghidra、IDA 或 Hopper;Android 需 Java 17+;浏览器/Electron 观察需本机 CDP 端点。
- 依赖
- rea-agents npm 包(通常用 npx 运行,提供 REA CLI/MCP)
- Node.js ^22.19、^24.11 或 >=26,以及 npm/npx
- MCP 客户端(可选),如 Codex、Claude Code、Cursor
- Ghidra(原生、固件、NativeAOT 等分析)
- Java(Ghidra/JADX 需要;Android 需 Java 17+)
- IDA Pro 与 Hex-Rays(可选原生 provider)
- Hopper(可选原生 provider)
- JADX MCP JAR 0.7.1(Android 分析)
- Wireshark 4.x 的 tshark 与 capinfos(PCAP 分析)
- Binwalk 与 Unblob(固件分析,Linux)
- sigrok-cli 0.7.2(逻辑/信号录制分析)
- WABT 1.0.42(WASM 检查)
- pwntools(ELF 布局检查)
- GDB/pwndbg(核心转储调试上下文)
- Wakaru(JavaScript 源码恢复,Linux x64)
- LLDB(observe_native_calls)
- Kuna(可选 provider,通过 REA_KUNA_COMMAND 配置)
- Fiddler Everywhere 的 MCP 服务器(实时流量分析,可选)
- Bun(可选 REA 宿主;不强制执行内存上限)

