ida是什么
IDA Pro是一款世界顶级的交互式反汇编工具,IDA Pro全名Interactive Disassembler Professional(交互式反汇编器专业版),是Hex-Rays公司的旗舰产品,目前最新版为IDA Pro7.0。主要用在反汇编和动态调试等方面,支持对多种处理器的不同类型的可执行模块进行反汇编处理,具有方便直观的操作界面,可以为用户呈现尽可能接近源代码的代码,减少了反汇编工作的难度,提高了效率。
同样IDA Pro的分析技术也是最为称赞的一点,他具有更好的反汇编、深层分析、可以看到跳到指定的位置的jmp的命令位置和保存静态汇编等优点,适用于恶意代码分析、漏洞研究、COTS验证、隐私保护、其他学术研究。
它具有以下功能:
1、可编程性
IDA Pro包含了一个由非常强大的类似于宏语言组成的完全开发环境,可用于执行简单到中等复杂的自动化任务。对于一些高级任务,我们的开放式插件架构对外部开发人员是没有限制的,这样可以完善IDA Pro的功能。比如,每个人可以用MP3播放器来扩展IDA Pro并且发现恶意软件。
2、交互性
目前,电脑在遇到未知事物时,是无法和人类大脑相比的。而IDA Pro拥有完全的互动性,与前者相比,IDA可以让分析师重写决策或者提供相应的线索。交互性是内置程序语言和开放式插件架构的最终要求。
3、调试器
在现实生活中,事情并不是我们想象的那样简单,恶意代码通常总与分析不一致。病毒,蠕虫和木马往往是被其他东西修饰过而造成混淆,这就要求有一个更加强大的工具来识别出来。IDA Pro调试器补充了反汇编的静态分析功能:允许分析师通过代码一步一步来调查,调试器经常会绕过混淆,并得到一些能够对静态反汇编程序进行深入处理的数据,包括有助于得到的数据的功能更强大的静态反汇编器将能够在深度处理。远程调试器对人们想要对潜在的有害程序进行深入时起到了很大的作用。有些IDA调试器也可以运行在虚拟环境的应用上,这使得恶意软件分析更有成效。
4、反汇编
作为一个反汇编器,IDA Pro为可用在那些源代码不总是可用的二进制程序的探索开发,创建程序执行图。一个反汇编器最大的益处就在于它可以通过符号表示,也就是汇编语言来为在执行的处理器提供说明。如果一个你刚刚安装的友好的屏幕存储器在探视你的网上银行会话或者登陆你的邮箱,反汇编器就可以将它显示出来。然而,汇编语言是很难搞懂的,这也是为什么这种先进的技术被应用在IDA Pro上从而能确保代码的可读性,甚至在某些情况下和二进制文件产生的源代码非常相似。该程序图的代码可以为进一步的调查提供后期处理。有些人已经将它作为其根源用在病毒的基因分类上。
下载及其安装
链接:https://pan.baidu.com/s/17dHZFBA5Hz7vd-4xGBywdA?pwd=poge
提取码:poge
下载后解压缩,运行ida
或点击IDA Freeware (hex-rays.com),选择download
然后根据安装提示操作即可
ida的使用
1.文件打开
把随便一个程序拖入ida
如下图,左侧窗口为函数列表窗口,右侧窗口为IDA反汇编所得的汇编代码,最下侧窗口为文件在反汇编过程中的信息。
2.文件关闭
说一下这几个选项。
- 第一个Dont pack database就是不打包文件,把生成的4个数据库文件分开放
- 第二个pack database(Store)就是打包4个数据库文件然后生成一个idb文件,但是会把原先的4个文件删除
- 第三个pack database(Deflate)就是打包4数据文件并且把原先的文件压缩
- 第四个collect garbage 可以勾选清理一些没用的内存
- 第五个dont save the database就是给我们一次重开的机会,(ida不能撤回没有退路)
3.IDA窗口介绍
图形窗口页面和文本页面
这是文本页面,按空格切换图形窗口
再来看看这几个窗口
IDA View-A:反汇编窗口,打开程序的时候,一般都是停留在反汇编窗口
Hex View-1:想看当前程序的十六进制文件,可以点击这个窗口
Structures:结构体(结构体是由一批数据组合而成的一种新的数据类型。组成结构型数据的每个数据称为结构型数据的“成员”。)
Enums:枚举类型
Imports:看当前程序用了哪些模块,用了哪些模块的哪些函数
Export:想看当前程序导出了哪些函数,可以点击export
4.菜单
- File:用于打开、新建、装载、保存、关闭一个文件或是数据库
- Edit:用于编辑反汇编代码
- Jump:用于跳转到某个位置、地址或是一个窗口
- Search:用于搜索代码段、数据、错误等等
- View:用于显示文件内容的显示方式
- Debugger:调试器,集成在IDA中
- Lumina:对元数据进行各种操作
- Options:可以进行一些个性化的设置
- Windows:窗口
- Help :帮助
5.显示硬编码(ACDU)
点击option–>Gernal–>Disassembly有一行是Number of opcode bytes(non-geaph)它可以制定每一行硬编码显示多少硬编码一行最多是十六个字节
- 我们这里设置成8试试看
- 图中蓝色的就是硬编码。每一行硬编码对应一行汇编代码
- A:把当前的数据按照字符串来显示
- C:把当前的数据按照到吗的形式来显示
- D:把当前的数据用数据的形式来显示
- U:把当前的数据用普通的原始字节形式来显示
6.跳转
按G实现,输入地址就行
7.搜索指令
- 按下alt+T
String:搜索的值
Search up:向上搜索
8.N指令
- 修改名称用n指令
- 当分析完成一个函数或一个变量我们有自己的理解,要该名称时候按n
- 引用网上一句话:“一个真正的逆向分析就是一个 起名字的过程”
原先的样子
按n之后:
9.创建结构体 修改全局变量 修改局部变量
- 对一段代码进行解读时候,发现其中一个结构提,此时ida并没有识别出。此时就可以在Structure文件加一个结构体
- 然后随便输入一个名字abc
- 那么想在结构体里面添加成员,选择按D,就会给我们新增一个成员
此时field_0的类型为一个字节,我们选中db然后按D就可以更改其字节数(一字节,两字节,四字节)。
此时名称我们也需要修改成我们想要的名称,怎么办呢?
如上面讲解,按N就可以修改按D修改类型(dd、dw、db) - db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1
- dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2
- dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4
10.修改全局变量
- 比如说我们选中一个全局变量,我们要修改其为我们刚刚添加的结构体,怎么做呢?
- 很简单选中这个变量,按下alt+q,此时会列举出这个IDA所有识别出来的结构体,选择我们刚刚添加的结构体即可。
- 改完他的类型,IDA会自动给我们生成一个名字,这个名称我么也可修改,并且后续用到的这个变量的地方都将修改成我们修改的名称。
11.修改局部变量
当我们修改局部变量的时候,快捷键是T,我们需要找到这个结构体并选中结构体的成员点击确定就可以修改了。
12.注释
注释分:分号注释、shift+分号注释、函数注释
分号注释:点“;”弹出框中直接输入即可
shift+分号注释:可以在其他跳转到本行的地方不添加注释
函数注释:那么,我们在向写C语言函数的时候,我们想在函数的前面加上注释(函数名,参数、返回值等信息)的时候,我们选中函数名,按下分号,此时就可以添加注释了。