三、IDA文件目录介绍及其扩展功能

一、*IDA文件目录简介*

IDA的文件目录一般如下图所示,接下来介绍其几个文件夹的作用

在这里插入图片描述

cfg:cfg目录包含各种配置文件,包括基本的IDA配置文件ida.cfg,GUI配置文件idagui.cfg以及文本模式用户界面配置文件idatui.cfg。

dbgsrv: 在linux动态调试 ELF 文件对应的组件。

idc:idc目录包含IDA的内置脚本语言IDC所需的核心文件。

ids:ids目录包含一些符号文件(IDA语法中的IDS文件),这些文件用于描述可被加载到IDA的二进制文件引用的共享库的内容。这些IDS文件包含摘要信息,其中列出了由某一个指定库导出的所有项目。这些项目包含描述某个函数所需的参数类型和数量的信息,函数的放回类型以及与该函数的调用约定有关的信息。

Loaders:loaders目录包含在文件加载过程中用于识别和解析PE或ELF等已知文件格式的IDA扩展。

platform:系统运行需要的库文件

plugins:plugins目录包含专门为IDA提供附加功能的IDA模块。

procs:procs目录包含已安装的IDA版本所支持的处理器模块。处理器模块为IDA提供机器语言-汇编语言转换功能,并负责生成在IDA用于界面中显示的汇编语言。

Sig:sig目录包含IDA在各种模式匹配操作中利用的现有代码的签名。通过模式匹配,IDA能够将代码序列确定为已知的库代码,从而节省大量的分析时间。这些签名有IDA的“快速的库识别和鉴定技术”(FLIRT)生成。

til:til目录包含一些类型库信息,IDA通过这些信息记录特定与各种编译器库的数据结构的布局

二、*IDA扩展功能*

IDA Pro作为功能强大的静态反汇编器,具有良好的交互性、可编程性、可扩展性及对多处理器的支持。对于IDA Pro的可扩展性表现在两个方面,一是采用内置的脚本语言IDC写脚本;二是采用Hex-rays提供的SDK写插件Plug-in。简单的任务交由脚本完成,复杂的任务则需要定制满足需求的插件。

*2.1 IDC脚本*

IDA的功能虽然强大,但是显然不能满足每一位用户的一切需求,于是IDA集成了一个脚本引擎,让用户从编程的角度对IDA的操作进行全面控制。IDA的脚本可以看作一个宏,又或者一种查询语言,它能以编程的方式 访问IDA的数据库的内容。IDA的脚本语言叫做IDC,之所以取这个名称,可能是因为他的语法与C语言的语法非常相似。

常用IDC:https://www.cnblogs.com/LyShark/p/13100048.html

IDC脚本编写语法:https://my.oschina.net/u/4261514/blog/4197562

接下来介绍IDC脚本的使用方法和常用的IDC脚本,使用IDC脚本主要有两种方法:

\1. File->Script File 或使用热键Alt+F7打开以“.IDC”为后缀名的IDC文件执行。

\2. File->Script command… 或使用热键Shfit+F2,打开“Execute script”窗口编写并执行IDC文件。

在这里插入图片描述

IDC示例1:关键字段定位脚本

该脚本实现查找范围关键字段如“push ebp”和"mov ebp, esp",并返回其地位地址,脚本源码:

#include <idc.idc>

static main() {

auto currAddr,startSeg,endSeg;

auto array_ptr = CreateArray(“array”);

auto ptr = GetArrayId(“array”);

SetArrayString(ptr,0,“push ebp”);

SetArrayString(ptr,1,“mov ebp, esp”);

Jump(0x0401000); // 光标跳转到起始位置

currAddr = ScreenEA(); // 反回当前光标所在地址

startSeg = SegStart(currAddr);

endSeg = SegEnd(currAddr);

Message(“OEP = %x 起始地址: %x 结束地址: %x \n”,currAddr,startSeg,endSeg);

while(startSeg < endSeg)

{

auto x = 0;

auto count=0;

for(x=0;x<2;x++)

{

auto op = GetDisasm(startSeg);

auto st = GetArrayElement(AR_STR,ptr,x);

if(strstr(op,st) == 0) {

count = count +1;

if(count == 2)

{

msg(“匹配地址: %x \n”,startSeg–);

}

}

startSeg++;

}

}

DeleteArray(ptr);

}

Shift + F2调出IDC窗口,填写源码,点击“Run”执行

在这里插入图片描述

执行结果

在这里插入图片描述

在这里插入图片描述

*2.2 IDA软件开发工具包*

IDA Pro的功能由四大模块(modules)支持,分别是(基于Windows/IA-32平台):

Plug-in 插件:利用SDK提供的API,完善IDA Pro的功能,扩展名plw。

Loaders 加载器:将可执行文件载入内存,进行分段,扩展名ldw。

Processor 处理器:将可执行程序的机器码反汇编成汇编代码,扩展名w32。

Debuggers 调试器:IDA Pro自带的调试器。

上述四个模块均能通过Hex-rays公司提供的SDK得到扩展,因为 SDK提供了大量的API,这些API可以涉及到IDA Pro软件的系统层,用户通过编写调用这些API的C++程序达到扩展IDA Pro功能的目的。目前使用最为广泛的就是利用SDK开发IDA Pro插件。

*2.3 IDA 插件的安装和使用*

IDA的插件是IDA的可扩展性的重要体现,其安装目录下的plugin文件夹就是专门位插件扩展服务的,而且随着IDAPython的引入,IDA插件的扩展变得十分的便捷。接下来介绍几个常见的IDA插件

Github上有人整理了IDA的插件汇: https://github.com/onethawt/idaplugins-list

1. *Hex-Ray*

Hex-Ray可能是所有IDA插件得“始祖”,他是一个反编译插件,能够为已编译得32位X86二进制文件中得函数生成“类似C语言的伪代码”。要安装这个插件,只需将提供的插件文件复制到plugin目录即可。

安装完毕后,可以通过View->Open Subviews->Pseudocode(热键F5)激活这个反编译器,接着IDA会打开一个新的窗口,包含生成的伪代码,如下图:

在这里插入图片描述

2. *IDAPython*

IDA Pro内置的脚本语言IDC太过简陋,由Gergely Erdelyi完成的IDAPython插件将python语言集成到IDA Pro中,将python脚本语言的灵活性和IDA Pro反汇编器的强大功能完美结合起来。

对于DIA Pro 6.8之后的版本,IDAPython是自带的插件,IDAPython的安装非常简单,

项目地址:https://github.com/idapython
IDA Python手册:https://www.hex-rays.com/products/ida/support/idapython_docs/

1:将解压后plugins目录下文件拷贝到 IDA Pro安装目录下的plugins中。

2:将解压后的python python64两个目录下的文件拷贝到 IDA Pro安装目录下。

重启 IDA Pro,对某个文件分析时,发现FILE菜单里多出了python的相关条目,证明安装成功。

3. ****IDA7.0安装findcrypt插件****

参考链接:https://www.cnblogs.com/mke2fs/p/10938455.html

Findcrypt是IDA Pro一个插件,其功能是可查找加密常量

在这里插入图片描述

安装成功的话,快捷键Ctrl+Alt+F可以调出上图的窗口,识别一些常见的算法,插件链接放上:https://github.com/polymorf/findcrypt-yara

只装插件是会报错的,还需要一些必要的运行库,需要安装yara-python和Microsoft Visual C++ Compiler for Python 2.7

*首先********安装********yara-python*

https://www.cnblogs.com/Fightingbirds/p/13840265.html

在这里插入图片描述

*安装Microsoft Visual C++ Compiler for Python 2.7支持库*

下载链接:https://www.microsoft.com/en-us/download/details.aspx?id=44266

点击Download下载后安装

在这里插入图片描述

安装两个支持库都装好后,把插件解压后把下图中的两个文件添加到IDA7.0的plugins目录

在这里插入图片描述

接着重启IDA,使用快捷键Shift+Alt+F,打开Findcrypt result窗口。

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值