前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IDA批量模式

IDA批量模式

作者头像
obaby
发布2023-02-24 11:03:09
7920
发布2023-02-24 11:03:09
举报
文章被收录于专栏:obaby@mars

整体说来ida的批量模式并不能算是真正的批量模式,只是可以通过各种手段来执行多个ida进行分析。众所周知ida是不支持多线程的,并且按照官方的说明看来在将来也不准备支持多线程。那么要想进行批量处理就只能使用自己的一些办法,自己去写个程序用命令来调用ida进行处理。

对于其他平台下的ida的批量模式这里并不准备介绍,简单的说一下Windows下的批量模式。如果用过ida的话应该比较清楚ida其实是提供了两种不同的界面,基于Gui的和基于Console的。两者都支持参数调用,但是命令行下的程序可以节省更多的资源,并且有更快的运行效率,如果同时运行数个ida那么建议使用命令行下的版本。

命令参数如下:

代码语言:javascript
复制
idag -A -Smyscript.idc input_file

官方的原始的idc脚本的内容是下面的样子:

代码语言:javascript
复制
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写了,大家可以选择自己喜欢的语言编写):

代码语言:javascript
复制
#########################################
#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中的文件列表如下:

代码语言:javascript
复制
最终执行效果就是下面的样子,嘎嘎:

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

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版本!

 
参考文档:

On batch analysis http://www.hexblog.com/?p=53
《The IDA Pro Book》



☆文章版权声明☆
* 网站名称:obaby@mars

 * 网址:https://h4ck.org.cn/

  * 本文标题: 《IDA批量模式》
      * 本文链接:https://h4ck.org.cn/2012/03/ida-batch-mode/
      * 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。
    


分享文章:

相关文章:
IDA批量模式 Python Script[fix] 
QQ音乐导出 
Python加载的文件哪里去了?(2) 
UnGzip Data(PyQt4) By obaby 
阿里云oss 批量检测文件是否存在 
PyDbg安装(《Python 灰帽子》) 
IDA Name Chang via idc Script 
IDA python.plw: can’t load file 
GenGdl File via IDC 
Calling IDA APIs from IDAPython with ctypes 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012年3月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档