关于 binary-triage
binary-triage 是用于在深入分析前快速检查二进制文件的技能。它帮助分析者识别程序结构与显著行为、标记值得关注的区域,并生成按优先级排列且可执行的后续任务。
主要功能
- 01内存区段检查
- 02字符串与导入项检查
- 03函数与交叉引用审查
- 04选择性初步反编译
- 05按优先级整理后续任务
适用场景
- 01开展恶意软件二进制文件的初步评估
- 02查找待调查的可疑 API 或字符串
- 03规划对加壳或剥离符号二进制文件的深入分析
MCP 相关
该技能使用 ReVa 的 MCP 工具检查程序文件、内存、字符串、符号、函数、引用关系和反编译结果。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ cyberkaida/ reverse-engineering-assistant --skill binary-triage安装后在 Claude Code 中输入/binary-triage确认已加载。
详细介绍
二进制初步分析
说明
我们正在对一个二进制文件进行初步分析,以快速了解其功能。这是初步调查,而非深入分析。我们的目标是:
- 识别关键组件和行为
- 标记可疑或值得关注的部分
- 创建后续深入调查的任务清单
使用 ReVa 进行二进制初步分析
按照以下系统化工作流程使用 ReVa 的 MCP 工具:
1. 识别程序
- 使用
get-current-program查看当前活动程序 - 或使用
list-project-files查看项目中可用的程序 - 记下
programPath(例如,"/Hatchery.exe"),供后续工具使用
2. 调查内存布局
- 使用
get-memory-blocks了解二进制文件的结构 - 检查关键区段:
.text- 可执行代码.data- 已初始化数据.rodata- 只读数据(字符串、常量).bss- 未初始化数据
- 标记异常特征:
- 区段异常大
- 加壳或加密的区段
- 可执行数据区段
- 可写代码区段
3. 调查字符串
- 使用
get-strings-count查看字符串总数 - 使用
get-strings分页查看(每次 100–200 个字符串) - 查找表明功能或恶意行为的迹象:
- 网络:URL、IP 地址、域名、API 端点
- 文件系统:文件路径、注册表项、配置文件
- API:函数名、库引用
- 消息:错误消息、调试字符串、日志消息
- 可疑关键词:admin、password、credential、token、crypto、encrypt、decrypt、download、execute、inject、shellcode、payload
4. 调查符号和导入项
- 使用
get-symbols-count并设置includeExternal=true统计导入项 - 使用
get-symbols并设置includeExternal=true和filterDefaultNames=true - 重点关注外部符号(从库导入的符号)
- 按类别标记有趣或可疑的导入项:
- 网络 API:connect、send、recv、WSAStartup、getaddrinfo、curl_*、socket
- 文件 I/O:CreateFile、WriteFile、ReadFile、fopen、fwrite、fread
- 进程操作:CreateProcess、exec、fork、system、WinExec、ShellExecute
- 内存操作:VirtualAlloc、VirtualProtect、mmap、mprotect
- 加密:CryptEncrypt、CryptDecrypt、EVP_、AES_、bcrypt、RC4
- 反分析:IsDebuggerPresent、CheckRemoteDebuggerPresent、ptrace
- 注册表:RegOpenKey、RegSetValue、RegQueryValue
- 记录导入项与符号总数的比例(大量使用导入项可能表明程序依赖库)
5. 调查函数
- 使用
get-function-count并设置filterDefaultNames=true统计命名函数 - 使用
get-function-count并设置filterDefaultNames=false统计所有函数 - 计算命名函数与未命名函数的比例(未命名函数占比高 = 二进制已剥离符号)
- 使用
get-functions并设置filterDefaultNames=true列出命名函数 - 识别关键函数:
- 入口点:
entry、start、_start - 主函数:
main、WinMain、DllMain、_main - 可疑名称:如果符号未被剥离,查找揭示性函数名
- 入口点:
6. 对关键发现进行交叉引用分析
- 对第 3 步中发现的有趣字符串:
- 使用
find-cross-references并设置direction="to"和includeContext=true - 确定哪些函数引用了可疑字符串
- 使用
- 对第 4 步中发现的可疑导入项:
- 使用
find-cross-references并设置direction="to"和includeContext=true - 确定哪些函数调用了可疑 API
- 使用
- 这有助于确定哪些函数需要优先进行详细检查
7. 有选择地进行初步反编译
- 对入口点或主函数使用
get-decompilation- 将
limit=30设置为初始获取约 30 行 - 将
includeIncomingReferences=true设置为查看调用者 - 将
includeReferenceContext=true设置为获取上下文片段
- 将
- 对第 6 步中发现的 1–2 个可疑函数使用
get-decompilation- 将
limit=20-30设置为快速了解概况
- 将
- 留意高层模式:
- 循环(加密/解密例程)
- 网络操作
- 文件操作
- 进程创建
- 可疑的控制流(混淆迹象)
- 暂时不要进行深入分析——这一步只是为了了解总体行为
8. 记录发现并创建任务列表
- 使用
TodoWrite工具创建可执行的任务列表,可包含以下条目:- “调查字符串 'http://malicious-c2.com'(在 0x00401234 处被引用)”
- “反编译函数 sub_401000(调用 VirtualAlloc、memcpy 和 CreateThread)”
- “分析函数 encrypt_payload 中的加密用法(使用 CryptEncrypt)”
- “追踪反调试检查(0x00402000 处调用 IsDebuggerPresent)”
- “检查已打包的节 .UPX0,寻找解包例程”
- 每项待办都应:
- 具体(包含地址、函数名和字符串)
- 可执行(明确需要调查什么)
- 按优先级排序(最可疑的排在前面)
输出格式
请按以下结构向用户呈现初步分析结果:
程序概览
- 名称:[programPath 中的程序名称]
- 类型:[可执行文件类型——PE、ELF、Mach-O 等]
- 平台:[Windows、Linux、macOS 等]
内存布局
- 总大小:[大小,以字节/KB/MB 为单位]
- 关键节:[列出主要节及其大小和权限]
- 异常特征:[任何已打包/加密/可疑的节]
字符串分析
- 字符串总数:[get-strings-count 的计数]
- 值得注意的发现:[有上下文的有趣字符串项目列表]
- 可疑迹象:[发现的 URL、IP、可疑关键词]
导入分析
- 符号总数:[get-symbols-count 的计数]
- 外部导入:[外部符号数量]
- 关键库:[导入的主要库]
- 可疑 API:[按类别列出的可疑导入]
函数分析
- 函数总数:[filterDefaultNames=false 时的计数]
- 具名函数:[filterDefaultNames=true 时的计数]
- 符号剥离状态:[是/否,根据比例判断]
- 入口点:[地址和名称]
- 主函数:[地址和名称]
- 关键函数:[已识别的重要函数列表]
可疑迹象
[按严重程度排序的红旗项目列表]
建议的后续步骤
[呈现第 8 步创建的任务列表]
- 每项都应具体且可执行
- 按严重程度/重要性排序
- 包含地址、函数名和上下文
重要说明
- 速度优先于深度:这是初步分析,不是完整分析。请快速完成各步骤。
- 使用分页:不要一次请求数千条字符串/函数。每次使用 100–200 条的分块。
- 关注异常:标记不寻常、可疑或值得关注的内容。
- 上下文至关重要:使用交叉引用时,启用
includeContext=true以获取代码片段。 - 创建可执行的待办事项:每个后续步骤都应具体到其他 Agent 可以执行。
- 系统化开展:按顺序完成全部 8 个步骤,以确保全面覆盖。
评论
支持 Markdown