Install
openclaw skills install @holdyounger/ida-reverseopenclaw skills install @holdyounger/ida-reverse定位:流程规范,不是场景手册。无论分析对象是崩溃转储、可疑样本、闭源协议还是自家二进制,只要通过 IDA MCP 做逆向,本技能即生效。
http://127.0.0.1:13337/mcp,无鉴权仅本机),且任务涉及反编译/函数分析/崩溃转储/二进制研究,任一即触发。rename(或 set_comments)。分析不落库 = 白干,下个会话全丢。guess_ 前缀,注释标 TODO(user)。xrefs_to 确认调用关系,不改全局名/导出名。memory/YYYY-MM-DD.md),保证跨会话可追溯。链路前缀__阶段_动作(如 clr 逆向的 PrepareMethod__GetArgInfo1、PrepMD_Queue_ExecuteGate),开链时定一次前缀约定(如 PrepMD_),全链统一,聚合阅读/检索两便。import ida_hexrays; ida_hexrays.init_hexrays_plugin(); ida_hexrays.rename_lvar(func_ea, "v9", "pMD_records") —— 先 decompile 确认用途再改;IDA 9.4 MCP 的 set_type.edits variable 路径报参数错,用 rename_lvar 替代。declare_type 落库——只写在注释里的结构等于没还原;vtable/状态表用 data rename + set_comments 标偏移含义。S=~/.openclaw/workspace/scripts/ida-mcp/ida_mcp_client.py
# 单步
python3 $S decompile '{"addr":"0x18005a8bc"}'
# 多步分析一次跑完(decompile → 注释 → 改名)
printf '%s\n' \
'{"tool":"decompile","args":{"addr":"0x18005a8bc"}}' \
'{"tool":"set_comments","args":{"items":[{"addr":"0x18005a8e6","comment":"crash: [rax+70h] 未判空"}]}}' \
'{"tool":"rename","args":{"batch":{"func":[{"addr":"0x18000e968","name":"Module__FindDomainFile"}]}}}' \
| python3 $S --batch
~/.openclaw/workspace/references/IDA-MCP-工具速查.mddisasm(addr, include_total=true) 估函数规模,超大函数改用 py_eval 局部取伪码,防止挤爆上下文;hex-rays 直接报错时改用 disasm 分页 + 行号区间本地 grep 还原(2026-09-10 PrepareMethod 链路全函数还原即走此路)。import x; print(y) ❌;用 __import__('idaapi').get_func(...) ✅。rename.batch / set_comments.items / set_type.edits 是「对象或数组」二选一,单条传对象、批量传数组。max_depth/max_nodes 不设会刷回巨量边。init_hexrays_plugin() 先行;对 0x1012B77D 等函数 decompile 成功率随会话恢复(重进 IDA 或多试)。lookup_funcs 定位函数边界。decompile 崩溃函数 + 一层 callees,形成假设。xrefs_to 验证调用方 → 确认后 rename + set_comments 落库(含崩溃指令注记)。imports/find_regex 建立攻击面清单(危险 API、可疑字符串)。xrefs_to 反向定位可达路径,再 decompile 确认——自底向上,不逐函数扫。set_comments 标 PATCH-DELTA:。list_funcs(带分页)+ imports + find(string/immediate)三轮建立初判。py_eval 单表达式验证,结论落 set_comments。guess_ 前缀。find(常量)+ find_bytes 定位特征常量(魔数、S-box、CRC 表)。set_type + declare_type 修类型,让伪码先「变干净」再解读。declare_type 落库,只写在注释里的结构等于没还原。68 88 00 00 00 B8 ... 序列 find_bytes)→ 逐函数 disasm 分页还原,grep 过滤时保留原始行文件(grep 会丢指令,误报需用原始数据复核)。*_pred + gate *_Gate,用注释记录 A/B 状态差(如「+3: 0x0B(登记)→0x39(JIT)」)。