name: "radare2" command: "r2" enabled: true short_description: "二进制分析和逆向工程框架,支持反汇编、调试和脚本分析" description: | Radare2是一个完整的二进制分析和逆向工程框架,支持多种架构和文件格式。 **主要功能:** - 反汇编和反编译:支持多种架构(x86, ARM, MIPS等) - 调试支持:本地和远程调试 - 脚本支持:支持r2pipe脚本和r2命令脚本 - 多种文件格式:ELF, PE, Mach-O, 固件等 - 交互式分析:命令行界面和可视化模式 - 自动化分析:批量分析和脚本化分析 **使用场景:** - 二进制文件分析 - 逆向工程和漏洞研究 - 恶意软件分析 - CTF竞赛中的逆向题目 - 固件分析 - 漏洞利用开发 **注意事项:** - 可以使用 -c 参数执行命令后退出(非交互模式) - 可以使用 -i 参数执行脚本文件 - 可以使用 -q 参数静默模式(不显示启动信息) - 可以使用 -A 参数自动分析二进制文件 - 可以使用 -d 参数附加到进程进行调试 parameters: - name: "target" type: "string" description: | 目标文件、进程ID或特殊值。 **格式:** - 文件路径: "/path/to/binary" - 进程ID: "1234" (需要配合 -d 参数) - 特殊值: "-" (从stdin读取), "--" (交互模式), "=" (从环境变量读取) **示例值:** - 二进制文件: "/tmp/vulnerable" - 进程调试: "1234" (配合 -d) - 从stdin: "-" **注意事项:** - 必需参数,不能为空 - 如果指定进程ID,需要配合 -d 参数使用 - 注意:radare2 要求文件路径必须是最后一个参数,因此 target 使用 position 1 required: true position: 1 format: "positional" - name: "commands" type: "string" description: | 要执行的Radare2命令。可以是单个命令或多个命令(用分号分隔)。 **格式:** - 单个命令: "aaa" (自动分析) - 多个命令: "aaa; pdf @main; VV" (分析、反汇编main函数、可视化) **常用命令:** - "aaa": 自动分析所有函数 - "afl": 列出所有函数 - "pdf @main": 反汇编main函数 - "px 64": 以十六进制显示64字节 - "VV": 进入可视化模式 - "i": 显示文件信息 - "iz": 显示字符串 **示例值:** - "aaa" (自动分析) - "aaa; pdf @main" (分析并反汇编main函数) - "i; iz" (显示信息和字符串) **注意事项:** - 多个命令用分号(;)分隔 - 执行完命令后程序会退出(非交互模式) required: false flag: "-c" format: "flag" - name: "script_file" type: "string" description: | 要执行的脚本文件路径。脚本文件包含Radare2命令,每行一个命令。 **格式:** - 脚本文件路径: "/path/to/script.r2" **示例值:** - "/tmp/analyze.r2" - "./scripts/auto_analyze.r2" **注意事项:** - 脚本文件中的命令会按顺序执行 - 脚本执行完后程序会退出 required: false flag: "-i" format: "flag" - name: "arch" type: "string" description: | 指定目标架构。 **常用架构:** - "x86": 32位x86 - "x86_64": 64位x86 - "arm": ARM架构 - "arm64": ARM64架构 - "mips": MIPS架构 - "ppc": PowerPC架构 **示例值:** - "x86" - "x86_64" - "arm" - "arm64" **注意事项:** - 如果不指定,radare2会尝试自动检测 - 某些架构可能需要额外的配置 required: false flag: "-a" format: "flag" - name: "bits" type: "int" description: | 指定目标位数(16, 32, 64)。 **示例值:** - 16 (16位) - 32 (32位) - 64 (64位) **注意事项:** - 通常与 -a 参数配合使用 - 如果不指定,radare2会尝试自动检测 required: false flag: "-b" format: "flag" - name: "auto_analyze" type: "bool" description: | 自动分析二进制文件。相当于执行 "aaa" 命令。 **使用场景:** - 快速分析二进制文件 - 批量分析 **注意事项:** - 启用后会自动分析所有函数 - 可能需要较长时间 required: false flag: "-A" format: "flag" default: false - name: "debug" type: "bool" description: | 调试模式。可以附加到进程或调试文件。 **使用场景:** - 附加到运行中的进程 - 调试二进制文件 **注意事项:** - 需要适当的权限 - 如果target是进程ID,必须启用此选项 required: false flag: "-d" format: "flag" default: false - name: "quiet" type: "bool" description: | 静默模式。不显示启动信息和提示符。 **使用场景:** - 脚本化使用 - 批量分析 - 自动化工具调用 **注意事项:** - 适合非交互式使用 - 减少输出噪音 required: false flag: "-q" format: "flag" default: false - name: "seek" type: "string" description: | 设置起始地址。可以是十六进制地址或表达式。 **格式:** - 十六进制: "0x400000" - 表达式: "main+0x10" **示例值:** - "0x400000" - "main" - "0x1000" **注意事项:** - 地址可以是十六进制或符号名 - 用于从特定位置开始分析 required: false flag: "-s" format: "flag" - name: "base_address" type: "string" description: | 设置基址(base address)。用于加载地址。 **格式:** - 十六进制地址: "0x400000" **示例值:** - "0x400000" - "0x1000000" **注意事项:** - 用于指定二进制文件的加载地址 - 通常用于分析固件或内存转储 required: false flag: "-B" format: "flag" - name: "eval" type: "string" description: | 设置配置变量。格式为 key=value。 **格式:** - "key=value" - 多个变量用空格分隔: "asm.arch=x86 asm.bits=32" **示例值:** - "asm.arch=x86" - "asm.bits=32" - "scr.color=false" **注意事项:** - 用于设置radare2的配置变量 - 多个变量用空格分隔 required: false flag: "-e" format: "flag" - name: "project" type: "string" description: | 加载或保存项目文件。 **格式:** - 项目文件路径: "/path/to/project.r2" **示例值:** - "./project.r2" - "/tmp/analysis.r2" **注意事项:** - 项目文件保存分析状态和配置 - 可以用于恢复之前的分析 required: false flag: "-p" format: "flag" - name: "additional_args" type: "string" description: | 额外的radare2参数。用于传递未在参数列表中定义的radare2选项。 **可用选项:** - "-C": 强制使用颜色输出 - "-f": 强制打开文件(即使格式不匹配) - "-L": 列出支持的插件 - "-M": 启用写模式 - "-n": 不加载配置文件 - "-N": 不执行脚本 - "-S": 在调试模式下启动 - "-t": 使用线程模式 - "-u": 使用unicorn引擎 - "-v": 显示版本信息 - "-w": 写模式 - "-z": 扫描字符串 - "-X": 执行r2pipe脚本 - "-P patch": 应用补丁 - "-m maddr": 映射地址 **示例值:** - "-w" (写模式) - "-n" (不加载配置文件) - "-M" (启用写模式) - "-z" (扫描字符串) **注意事项:** - 多个参数用空格分隔 - 确保参数格式正确,避免命令注入 - 此参数会直接追加到命令末尾 required: false format: "positional"