首页
社区
课程
招聘
[原创]IDA批量模式
发表于: 2012-3-12 18:42 25071

[原创]IDA批量模式

obaby 活跃值
20
2012-3-12 18:42
25071

整体说来ida的批量模式并不能算是真正的批量模式,只是可以通过各种手段来执行多个ida进行分析。众所周知ida是不支持多线程的,并且按照官方的说明看来在将来也不准备支持多线程。那么要想进行批量处理就只能使用自己的一些办法,自己去写个程序用命令来调用ida进行处理。
对于其他平台下的ida的批量模式这里并不准备介绍,简单的说一下Windows下的批量模式。如果用过ida的话应该比较清楚ida其实是提供了两种不同的界面,基于Gui的和基于Console的。两者都支持参数调用,但是命令行下的程序可以节省更多的资源,并且有更快的运行效率,如果同时运行数个ida那么建议使用命令行下的版本。
命令参数如下:
idag -A -Smyscript.idc input_file
官方的原始的idc脚本的内容是下面的样子:
static main()
{
  RunPlugin("myplugin", 0); // run myplugin with argument 0
}
在执行脚本中调用了一个自定义的插件,那么其实这里也可以全部用脚本实现想要的功能。如果没有其他的要求可以把执行脚本锁定为analysis.idc,这个脚本会在文件分析完毕之后生成idb的数据库,并且生成相关的asm代码。需要注意的是这里的S和脚本之间没有空格,并且脚本的搜索目录为ida的安装目录下的idc文件夹,所以最好把自己的脚本放入这个文件夹下。
除此之外IDA还支持另外的两个参数-B和-c,所有参数的定义如下:
-A 让ida自动运行,不需要人工干预。也就是在处理的过程中不会弹出交互窗口,但是如果从来没有使用过ida那么许可协议的窗口无论你是否使用这个参数都将会显示。


-c 参数会删除所有与参数中指定的文件相关的数据库,并且生成一个新的数据库。
-S 参数用于指定ida在分析完数据之后执行的idc脚本,该选项和参数之间没有空格,并且搜索目录为ida目录下的idc文件夹。
-B 参数指定批量模式,等效于-A –c  –Sanylysis.idc.在分析完成后会自动生成相关的数据库和asm代码。并且在最后关闭ida,以保存新的数据库。

熟悉了ida的批量模式之后比较关键的就是批量启动ida了,为了节省资源建议启动idaw进行数据分析,大家可以发挥自己的想象力来编写程序动态的调用ida。下面是我写的一段python脚本(主要是最近在研究PySide的内容,嘎嘎。所以直接用Python写了,大家可以选择自己喜欢的语言编写):
#########################################
#Ida batch mode test code by obaby
#2012.03.12
#Mars Security
#http://www.h4ck.org.cn
#Email:root@h4ck.ws
#########################################
import sys
import os
import subprocess

global idcScriptFileName
global ida32qFilePath
global ida64qFilePath
global ida32wFilePath
global ida64wFilePath

# File these feilds with ur own ida file path and the idc file u want to execute!
idcScriptFileName = "batchmod.idc"
ida32qFilePath = '"E:\IDA 6.2\idaq.exe"'
ida64qFilePath = "E:\IDA 6.2\idaq64.exe"
ida32wFilePath ='"E:\IDA 6.2\idaw.exe"'
ida64wFilePath = "E:\IDA 6.2\idaw64.exe"
#The binary file list text
TargetList = "c:/test.txt"

TargetFile_object = open(TargetList, "r").readlines()
for eachline in TargetFile_object:
    #print eachline,
    #print eachline
    eachline = eachline.replace('\n','').replace('\r', '')
    if os.path.exists(eachline):
        tmpExecStr =  ida32wFilePath +" -B -S"+idcScriptFileName +" " + eachline
        print tmpExecStr,
        #os.system(tmpExecStr) singl process with cmdwindow
        #os.popen(tmpExecStr)  singl process without cmdwindow
        subprocess.Popen(tmpExecStr) #mulity process with cmd window

print ("All Process have been started!")
        
      

      
Txt中的文件列表如下:
C:\testexe\MusiccityDownload.exe
C:\testexe\MASetupCaller.dll
C:\testexe\NOTEPAD.EXE
C:\testexe\regedit.exe
C:\testexe\MAMCityDownload.ocx
最终执行效果就是下面的样子,嘎嘎:

整体来说,效果还是不错的。在代码中用到的idc脚本如下所示:
//by obaby
#include <idc.idc>

static main()
{
  // turn on coagulation of data in the final pass of analysis
  SetShortPrm(INF_AF2, GetShortPrm(INF_AF2) | AF2_DODATA);

    Message("Waiting for the end of the auto analysis...\n");
    Wait();
    Message("\n\n------ Creating the output file.... --------\n");
    auto file = GetIdbPath()[0:-4] + ".asm";
    WriteTxt(file, 0, BADADDR);           // create the assembler file
        auto str_gdlpath,str_idbpath;
        str_gdlpath = GetInputFilePath();
        str_idbpath = substr(str_gdlpath,0,strlen(str_gdlpath)-4)+".idb";
        str_gdlpath = substr(str_gdlpath,0,strlen(str_gdlpath)-4)+".gdl";
        GenCallGdl(str_gdlpath, "Call Gdl", CHART_WINGRAPH);
        SaveBase(str_idbpath,0);
        Message("Gdl file have been saved to %s",str_gdlpath);
    Message("All done, exiting...\n");
  Exit(0);                              // exit to OS, error code 0 - success
}相关代码大家可以按照自己的要求进行修改,上面的代码会在分析完成之后生成一下的文件:



PDF Here: IDA批量模式.pdf

参考文档:
1.        On batch analysis http://www.hexblog.com/?p=53
2.        《The IDA Pro Book》

说明:本文主要是受http://bbs.pediy.com/showthread.php?t=147222&highlight=gdl+%E6%96%87%E4%BB%B6+%E4%BB%B6 文章的启发,后来和这个帖子的作者聊天的时候扯到关于批量处理二进制文件和生成gdl调用图的问题才写了这么一篇文章,并没有其他的意思。所以在idc的代码中才有生成gdl文件的相关代码。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 6
支持
分享
最新回复 (24)
雪    币: 183
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
此帖必火!!!
2012-3-12 19:13
0
雪    币: 1155
活跃值: (4247)
能力值: ( LV5,RANK:69 )
在线值:
发帖
回帖
粉丝
3
IDA6.2  
2012-3-12 20:42
0
雪    币: 66
活跃值: (960)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
在用6.1 的飘过
2012-3-12 20:59
0
雪    币: 14983
活跃值: (5285)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
5
这个功能只需要ida5.5以上的版本就可以了。并不是最新的版本才有的。
2012-3-12 21:07
0
雪    币: 1737
活跃值: (110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
还是看不懂撒~
2012-3-13 08:40
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
7
不知道楼主要表达什么,是个什么意思!
2012-3-13 09:18
0
雪    币: 202
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
很明显,楼主是在向大家宣布,6.2出来了。
2012-3-13 09:27
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
9
要么发出来,要么别炫耀。就这么简单,OK?
2012-3-13 09:53
0
雪    币: 14983
活跃值: (5285)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
10
本文只是说明ida的一个小功能,没有别的意思。
2012-3-13 10:21
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
比你那个啥 编译器语法映射 啥的。 牛B多了。
我觉得楼主发这帖子不是炫耀。
2012-3-13 10:31
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
12
说半天没看懂什么意思,大菜鸟飘过!
2012-3-13 10:38
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
13
如果语言上有得罪,给你道歉:对不起!
2012-3-13 10:39
0
雪    币: 14983
活跃值: (5285)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
14
你这么说我反而不好意思了。
2012-3-13 10:41
0
雪    币: 1559
活跃值: (1795)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wbs
15
把6.2放去来吧 不要勾引大家
2012-3-13 11:02
0
雪    币: 181
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
楼主,赞一个
2012-3-13 11:22
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
17
IDA 6.2冒似没有泄露版的,大多是一些安全厂商自己购买的。
2012-3-13 12:55
0
雪    币: 1121
活跃值: (732)
能力值: ( LV5,RANK:66 )
在线值:
发帖
回帖
粉丝
18
不太了解批量的意义在哪里,到头来还是人来看吧?
2012-3-13 15:28
0
雪    币: 213
活跃值: (512)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
在介绍技术的同时,显示一下用的是6.2,因6.2显然比所介绍的内容更有吸引力。
2012-3-13 20:21
0
雪    币: 5
活跃值: (1131)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
我也放一个以前用的批处理。
set path=%path%;D:\Program Files\ida61

for /f %%i in ('dir /b/s *.*') do (
rem idaw.exe -c -A -Smyexit.idc %%i  rem 这个注释掉的是自动生成idb文件
idau -A -SG:\workspace\Ida\src\ustr.py  %%i
)
2012-3-15 13:29
0
雪    币: 212
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
非常感谢

辛苦了

~~
2012-3-15 14:56
0
雪    币: 3286
活跃值: (3336)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
22
你的 意思是 批量分析东西?
2012-3-15 17:57
0
雪    币: 1644
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
学习....
2012-3-16 08:27
0
雪    币: 585
活跃值: (578)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
24
吧6.2放出来,呵呵,
2012-3-18 14:56
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
相对于批量,6.2对大家更有吸引力,嘿嘿
还希望施主功德圆满啊。
2012-3-19 11:07
0
游客
登录 | 注册 方可回帖
返回
//