用途:将二进制、目标文件或反汇编交给 Claude 时,产出可编译且语义贴近原程序的 C 源码,尤其适合反编译器(Ghidra、IDA、Binary Ninja)输出控制流残缺、无法编译或结构混乱的场景,以及恶意软件与固件分析中需要可重编译代码的任务。
核心思路:LLM 通常把反编译代码当作扁平文本,忽略支配控制流的图结构,导致臆造分支、变量,代码无法编译。HELIOS 从 Ghidra 等工具提取控制流图,按三层编码为结构化提示:第一层 FUNCTION_CONTEXT 给出函数名、签名、目标架构、基本块数、循环数;第二层 CFG_OVERVIEW 用邻接表列出各基本块的后继与结构角色(loop_header、branch_target、exit);第三层 BLOCK_DETAILS 给出每个基本块蒸馏后的 P-Code 指令语义。再附上原始伪 C(RAW_DECOMPILED_CODE),并约束所有分支必须对应 CFG 中的边、不得引入未在原数据中出现的全局变量、保持函数签名、循环结构需匹配检测到的循环头。
工作流概述:提取 CFG 与元数据;生成原始伪 C;依次构建上述四个提示段落;让模型生成 C;用相应编译器编译校验(如 gcc -O0 -o output.o -c output.c)。若编译失败,把编译器报错追加到 [COMPILER_ERRORS] 段落请求修正,仅做一轮反馈。可用测试输入输出做功能校验。
限制:依赖 Ghidra 等工具做 CFG 与 P-Code 提取,缺少该基础设施只能退回纯文本反编译;一次只处理单个函数,跨函数语义(共享全局变量、回调、虚表分派)不覆盖;属于提示框架而非微调模型,特定指令集或 DSP 代码可能不如微调模型;100 个以上基本块的大函数会挤压上下文窗口,需要摘要并损失细节;混淆二进制(控制流平坦化、不透明谓词、虚拟化代码)会产生退化 CFG;编译器反馈仅限一轮,多轮修复的场景支持有限。文中提及可编译率由约 45-71% 提升至 85-94%+,功能正确性最多提升 5.6 个百分点,覆盖 x86、ARM、MIPS。
安装与命令、定价与平台信息:资料暂未提供。