飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 326|回复: 1

[其它] [IDA使用技巧]#008: 引擎下的批量处理模式

[复制链接]
  • TA的每日心情
    开心
    2019-3-15 11:00
  • 签到天数: 262 天

    [LV.8]以坛为家I

    发表于 2024-3-14 11:35:04 | 显示全部楼层 |阅读模式
    翻译:梦幻的彼岸
    上次我们简单介绍了批量处理模式,但基本功能并不总是足够的,所以我们来讨论一下如何自定义它。
    基本用法
    概括地说,可以使用此命令行调用批量处理模式:
    1
    ida -B -Lida.log <other switches> <filename>

    IDA 将加载文件,等待分析结束,并将完整反汇编写入<filename>.asm
    工作原理
    事实上,-B是-A -Sanalysis.idc的简写:

    • -A:启用自动模式(使用默认选项回答所有查询)。
    • -Sanalysis.idc:加载文件后运行脚本analysis.idc。

    您可以在 IDA install 的idc子目录中找到analysis.idc。在 IDA 7.5 中,它看起来如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    static main()
    {
        // turn on coagulation of data in the final pass of analysis
        set_inf_attr(INF_AF, get_inf_attr(INF_AF) | AF_DODATA | AF_FINAL);
        // .. and plan the entire address space for the final pass
        auto_mark_range(0, BADADDR, AU_FINAL);
        msg("Waiting for the end of the auto analysis...\n");
        auto_wait();
        msg("\n\n------ Creating the output file.... --------\n");
        auto file = get_idb_path()[0:-4] + ".asm";
        auto fhandle = fopen(file, "w");
        gen_file(OFILE_ASM, fhandle, 0, BADADDR, 0); // create the assembler
        file
        msg("All done, exiting...\n");
        qexit(0); // exit to OS, error code 0 - success
    }


    因此,要修改批量处理模式的行为,您可以
    • 要么修改标准analysis.idc
    • 或使用-S<myscript.idc>指定不同的脚本
    例如,要输出 LST 文件(其中包括地址前缀),请更改gen_file调用:

    1
    gen_file(OFILE_LST, fhandle, 0, BADADDR, 0);

    批量反编译
    如果你有目标文件架构的反编译器,也可以在批处理模式下运行。
    例如,反编译整个文件:
    1
    ida -Ohexrays:outfile.c:ALL -A <filename>

    只反编译函数main:
    1
    ida -Ohexrays:outfile.c:main -A <filename>

    这使用了反编译器插件的内置功能,其工作原理与analysis.idc脚本类似(等待自动分析结束,然后将指定函数反编译到outfile.c)。
    自定义批量反编译
    如果默认功能不够,可以编写一个插件,通过C++ API 驱动反编译器。不过,要编写脚本,使用 Python 可能更方便。与 IDC 类似,Python 脚本也可以使用-S选项,在加载文件后自动运行。
    本帖附有一个示例脚本。使用方法如下:
    1
    ida -A -Sdecompile_entry_points.py -Llogfile.txt <filename>

    加快批量处理速度
    在迄今为止的示例中,我们一直在使用 IDA 的完整图形用户界面版本ida可执行文件。尽管在批处理模式下用户界面实际上并不显示,但它仍需要加载和初始化所有依赖的用户界面库,这可能会花费不可忽略的时间。因此,使用文本模式可执行文件(idat)通常更好,因为它使用轻量级文本模式用户界面。不过,即使在批处理模式下,它仍然需要终端。如果需要在没有终端的情况下运行(例如在后台运行或从守护进程运行),可以使用以下方法:
    • 设置环境变量TVHEADLESS=1
    • 重定向输出
    例如
    1
    TVHEADLESS=1 idat -A -Smyscript.idc file.bin >/dev/null &

    下载

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 2418 天

    [LV.Master]伴坛终老

    发表于 2024-3-18 11:25:49 | 显示全部楼层

    Urgently needed: partner for fun, one night only

    Life is too short for boring relationships.
    Authentic Maidens
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表