You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将.exe文件按函数级转换为多个汇编文件?

如何将EXE文件的反汇编函数分离为独立文件

下面是用主流逆向工具实现函数分离的具体操作:

IDA Pro 实现方案

  • 加载目标EXE文件,等待IDA完成自动分析,确认左侧Functions窗口里所有函数已被识别。
  • 用Python脚本批量导出最高效,打开IDA脚本窗口(快捷键Shift+F2),粘贴以下代码后运行:
    import idautils
    import idc
    import os
    
    # 创建存放函数的目录
    output_dir = "extracted_functions"
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    # 遍历所有识别到的函数
    for func_ea in idautils.Functions():
        func_name = idc.get_func_name(func_ea)
        func_end = idc.get_func_attr(func_ea, idc.FUNCATTR_END)
        # 逐行提取反汇编代码
        disasm_lines = []
        ea = func_ea
        while ea < func_end:
            disasm_lines.append(idc.generate_disasm_line(ea, 0))
            ea = idc.next_head(ea, func_end)
        # 写入独立文件
        with open(os.path.join(output_dir, f"{func_name}.txt"), "w", encoding="utf-8") as f:
            f.write("\n".join(disasm_lines))
    
  • 运行后,所有函数会以[函数名].txt的格式保存在extracted_functions目录中。

Ghidra 实现方案

  • 将EXE导入Ghidra,完成自动分析后打开Function Manager窗口。
  • 编写Ghidra Python脚本批量导出:在Script Manager中新建脚本,粘贴以下代码并运行:
    from ghidra.app.script import GhidraScript
    import os
    
    class ExtractFuncScript(GhidraScript):
        def run(self):
            output_dir = "ghidra_extracted_funcs"
            if not os.path.exists(output_dir):
                os.makedirs(output_dir)
            # 遍历程序所有函数
            for func in currentProgram.getListing().getFunctions(True):
                func_name = func.getName()
                body = func.getBody()
                # 提取函数范围内的所有反汇编行
                disasm_lines = []
                for code_unit in currentProgram.getListing().getCodeUnits(body, True):
                    disasm_lines.append(code_unit.toString())
                # 写入文件
                with open(os.path.join(output_dir, f"{func_name}.txt"), "w", encoding="utf-8") as f:
                    f.write("\n".join(disasm_lines))
    
  • 执行完成后,每个函数的反汇编内容会单独保存在指定目录下。

Radare2 命令行实现方案

  • 终端中执行以下步骤:
    1. 先创建存放函数的目录:mkdir -p functions
    2. 生成函数列表:r2 -q -c "aaa; af > funclist.txt" your_file.exe
    3. 批量导出每个函数的反汇编:
      while read func; do
          r2 -q -c "pD \$F{$func}" your_file.exe > "functions/${func}.txt"
      done < funclist.txt
      
  • 上述命令会把每个函数的反汇编内容输出到functions目录下的对应文件中。

注意点

  • 如果目标EXE加壳,必须先脱壳再进行分析,否则工具无法正确识别所有函数。
  • 脚本默认会导出所有识别到的函数,包括系统导入函数(如kernel32.dll中的API),可在脚本中添加判断逻辑过滤掉不需要的函数。

内容的提问来源于stack exchange,提问作者Homayoon Soleimani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:01:08