admin管理员组文章数量:1533099
2024年1月5日发(作者:)
火星信息安全研究院 By:obaby
IDA批量模式
整体说来ida的批量模式并不能算是真正的批量模式,只是可以通过各种手段来执行多个ida进行分析。众所周知ida是不支持多线程的,并且按照官方的说明看来在将来也不准备支持多线程。那么要想进行批量处理就只能使用自己的一些办法,自己去写个程序用命令来调用ida进行处理。
对于其他平台下的ida的批量模式这里并不准备介绍,简单的说一下Windows下的批量模式。如果用过ida的话应该比较清楚ida其实是提供了两种不同的界面,基于Gui的和基于Console的。两者都支持参数调用,但是命令行下的程序可以节省更多的资源,并且有更快的运行效率,如果同时运行数个ida那么建议使用命令行下的版本。
命令参数如下:
idag -A - input_file
官方的原始的idc脚本的内容是下面的样子:
static main()
{
RunPlugin("myplugin", 0); // run myplugin with argument 0
}
在执行脚本中调用了一个自定义的插件,那么其实这里也可以全部用脚本实现想要的功能。如果没有其他的要求可以把执行脚本锁定为,这个脚本会在文件分析完毕之后生成idb的数据库,并且生成相关的asm代码。需要注意的是这里的S和脚本之间没有空格,并且脚本的搜索目录为ida的安装目录下的idc文件夹,所以最好把自己的脚本放入这个文件夹下。
除此之外IDA还支持另外的两个参数-B和-c,所有参数的定义如下:
-A 让ida自动运行,不需要人工干预。也就是在处理的过程中不会弹出交互窗口,但是如果从来没有使用过ida那么许可协议的窗口无论你是否使用这个参数都将会显示。
1
火星信息安全研究院 By:obaby
-c 参数会删除所有与参数中指定的文件相关的数据库,并且生成一个新的数据库。
-S 参数用于指定ida在分析完数据之后执行的idc脚本,该选项和参数之间没有空格,并且搜索目录为ida目录下的idc文件夹。
-B 参数指定批量模式,等效于-A –c –.在分析完成后会自动生成相关的数据库和asm代码。并且在最后关闭ida,以保存新的数据库。
熟悉了ida的批量模式之后比较关键的就是批量启动ida了,为了节省资源建议启动idaw进行数据分析,大家可以发挥自己的想象力来编写程序动态的调用ida。下面是我写的一段python脚本(主要是最近在研究PySide的内容,嘎嘎。所以直接用Python写了,大家可以选择自己喜欢的语言编写):
1. #########################################
2. #Ida batch mode test code by obaby
3. #2012.03.12
4. #Mars Security
5. #
6. #Email:root@
7. #########################################
8. import sys
9. import os
10. import subprocess
11.
12. global idcScriptFileName
13. global ida32qFilePath
2
火星信息安全研究院
14. global ida64qFilePath
15. global ida32wFilePath
16. global ida64wFilePath
17.
By:obaby
18. # File these feilds with ur own ida file path and the idc file u want
to execute!
19. idcScriptFileName = ""
20. ida32qFilePath = '"E:IDA "'
21. ida64qFilePath = "E:IDA "
22. ida32wFilePath ='"E:IDA "'
23. ida64wFilePath = "E:IDA "
24. #The binary file list text
25. TargetList = "c:/"
26.
27. TargetFile_object = open(TargetList, "r").readlines()
28. for eachline in TargetFile_object:
29. #print eachline,
30. #print eachline
31. eachline = e('n','').replace('r', '')
32. if (eachline):
33. tmpExecStr = ida32wFilePath +" -B -S"+idcScriptFileName +" " +
eachline
34. print tmpExecStr,
35. #(tmpExecStr) singl process with cmdwindow
36. #(tmpExecStr) singl process without cmdwindow
37. (tmpExecStr) #mulity process with cmd window
38.
39. print ("All Process have been started!")
40.
41.
42.
Txt中的文件列表如下:
C:
C:
C:
C:
C:
最终执行效果就是下面的样子,嘎嘎:
3
火星信息安全研究院 By:obaby
整体来说,效果还是不错的。在代码中用到的idc脚本如下所示:
1. //by obaby
2. #include <>
3.
4. static main()
5. {
6. // turn on coagulation of data in the final pass of analysis
7. SetShortPrm(INF_AF2, GetShortPrm(INF_AF2) | AF2_DODATA);
8.
9. Message("Waiting for the end of the ");
10. Wait();
11. Message("nn------ Creating the --------n");
12. auto file = GetIdbPath()[0:-4] + ".asm";
13. WriteTxt(file, 0, BADADDR); // create the assembler file
14. auto str_gdlpath,str_idbpath;
15. str_gdlpath = GetInputFilePath();
16. str_idbpath =
substr(str_gdlpath,0,strlen(str_gdlpath)-4)+".idb";
17. str_gdlpath =
substr(str_gdlpath,0,strlen(str_gdlpath)-4)+".gdl";
18. GenCallGdl(str_gdlpath, "Call Gdl", CHART_WINGRAPH);
19. SaveBase(str_idbpath,0);
4
火星信息安全研究院 By:obaby
20. Message("Gdl file have been saved to %s",str_gdlpath);
21. Message("All done, ");
22. Exit(0); // exit to OS, error code 0 -
success
23. }
24.
相关代码大家可以按照自己的要求进行修改,上面的代码会在分析完成之后生成一下的文件:
参考文档:
1. On batch analysis /?p=53
2. 《The IDA Pro Book》
5
版权声明:本文标题:IDA批量模式 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1704440562a90948.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论