IDA工具的基本使用

  • IDA工具的使用
  • 1、文件的打开与关闭
  • 2、窗口介绍:图形 文本 其他窗口
  • 2.1、图形界面:
  • 2.2、文本界面:
  • 2.3、反汇编窗口
  • 2.4、 十六进制窗口
  • 2.5、 文件使用的模块(函数)
  • 2.6、文件导出的模块(函数)
  • 2.7、结构体(IDA识别出来的)
  • 2.8、枚举
  • 3、显示硬编码(ACDU)
  • 3.1、ACDU
  • 3.1.1、A
  • 3.1.2、C
  • 3.1.3、D
  • 3.1.4、U
  • 4、跳转指令 G
  • 5、搜索指令(ALT+T)
  • 6、修改名称(N)
  • 7、创建结构体 修改全局变量 修改局部变量
  • 7.1、创建结构体
  • 7.2、修改全局变量
  • 7.3、修改局部变量
  • 8、注释
  • 8.1、分号注释
  • 8.2、SHIFT加分号注释
  • 8.3、函数注释
  • 9、交叉引用
  • 10、总结


IDA工具的使用

1、文件的打开与关闭

  • 1、F5反编译成C语言
  • java怎么用IDA逆向 从零开始学ida逆向_硬编码

  • 2、关闭选项

java怎么用IDA逆向 从零开始学ida逆向_逆向_02

IDA生成的数据库文件会打包成一个文件,下次使用就不需要打开源文件了,只需要打开这个数据库文件即可。第三个和这个类似

java怎么用IDA逆向 从零开始学ida逆向_逆向_03

第一个选项会生成四个文件

java怎么用IDA逆向 从零开始学ida逆向_逆向_04

当IDA很大的时候,这个选项会把很多不用的内存释放掉,保证文件占用的空间很小

java怎么用IDA逆向 从零开始学ida逆向_全局变量_05

关闭的时候此次做的操作不保留。IDA中唯一回退的方式。

2、窗口介绍:图形 文本 其他窗口

2.1、图形界面:

java怎么用IDA逆向 从零开始学ida逆向_java怎么用IDA逆向_06

2.2、文本界面:

java怎么用IDA逆向 从零开始学ida逆向_java怎么用IDA逆向_07

图形界面与文件界面的切换使用空格键

2.3、反汇编窗口

java怎么用IDA逆向 从零开始学ida逆向_ida_08

进入IDA的默认窗口

2.4、 十六进制窗口

java怎么用IDA逆向 从零开始学ida逆向_全局变量_09

2.5、 文件使用的模块(函数)

java怎么用IDA逆向 从零开始学ida逆向_硬编码_10

查看文件使用了哪些模块(函数),其实是根据导入表生成的

2.6、文件导出的模块(函数)

java怎么用IDA逆向 从零开始学ida逆向_ida_11

2.7、结构体(IDA识别出来的)

通过符号表识别出来的

java怎么用IDA逆向 从零开始学ida逆向_java怎么用IDA逆向_12

2.8、枚举

java怎么用IDA逆向 从零开始学ida逆向_硬编码_13

3、显示硬编码(ACDU)

java怎么用IDA逆向 从零开始学ida逆向_ida_14


java怎么用IDA逆向 从零开始学ida逆向_全局变量_15

输入框中填写硬编码的长度,最大16。(我们的可执行程序都是由硬编码组成)。我们改成10看看效果,如下图:

java怎么用IDA逆向 从零开始学ida逆向_全局变量_16

图中的部分就是硬编码。每一行硬编码对应着一行汇编代码。

3.1、ACDU

随便用一段代码举例说明,原始如下:

java怎么用IDA逆向 从零开始学ida逆向_逆向_17

3.1.1、A

把当前的数据按照字符串来显示

转换成字符串:

java怎么用IDA逆向 从零开始学ida逆向_硬编码_18

3.1.2、C

把当前的数据按照代码来显示

java怎么用IDA逆向 从零开始学ida逆向_java怎么用IDA逆向_19

3.1.3、D

把当前的数据用按照数据来显示

java怎么用IDA逆向 从零开始学ida逆向_全局变量_20

按一下表示单字节显示,按两下双字节显示,按三下表示四字节显示,按三下表示八字结显示

3.1.4、U

把当前的数据按照未定义(原始的字节)来显示

java怎么用IDA逆向 从零开始学ida逆向_java怎么用IDA逆向_21

4、跳转指令 G

按一下G

java怎么用IDA逆向 从零开始学ida逆向_逆向_22

在输入框中输入地址就可以进行跳转。

5、搜索指令(ALT+T)

按下alt+t:

java怎么用IDA逆向 从零开始学ida逆向_全局变量_23

6、修改名称(N)

当我们分析一段汇编的时候,分析完成需要对一个函数或一个变量我们有自己的理解,我们需要对它改成我们想要的名称时按N来修改。

例如:

java怎么用IDA逆向 从零开始学ida逆向_ida_24

按N修改:

java怎么用IDA逆向 从零开始学ida逆向_硬编码_25


java怎么用IDA逆向 从零开始学ida逆向_逆向_26

7、创建结构体 修改全局变量 修改局部变量

7.1、创建结构体

在我们使用IDA的时候,我们对一段汇编代码进行解读的时候,发现其为一个结构体,此时IDA并未识别出来,那么我们可以在Structures文件中增加一个结构体。

点击Edit 选择 add struct type。

java怎么用IDA逆向 从零开始学ida逆向_java怎么用IDA逆向_27

此时会让我们输入结构体的名称,我们随便输入一个,如下:

java怎么用IDA逆向 从零开始学ida逆向_java怎么用IDA逆向_28

java怎么用IDA逆向 从零开始学ida逆向_全局变量_29

此时AAA结构体已经出来了,那么如何向结构体中增加整数,字符,数组,结构体呢?

操作如下:

  • 添加普通类型(db、dw、dd):

选中我们创造的结构体第一哥成员,按D

java怎么用IDA逆向 从零开始学ida逆向_逆向_30

此时就添加了一个成员,此时field_0的类型为一个字节,我们选中db然后按D就可以更改其字节数(一字节,两字节,四字节)。

此时名称我们也需要修改成我们想要的名称,怎么办呢?

如上面讲解,按N就可以修改

java怎么用IDA逆向 从零开始学ida逆向_ida_31

此时名称修改成了a,宽度修改成了两字节。

  • 添加结构体类型

如上述方式先按D添加一个成员。然后选中成员按下alt+q就可以识IDA已有的所有结构体,添加自定义结构体需先自己添加好,如图:

java怎么用IDA逆向 从零开始学ida逆向_ida_32

随便选择一个即可。修改结构体的名称和上述一样,按下N即可。

  • 添加数组
    如上述方式先按D添加一个成员。

java怎么用IDA逆向 从零开始学ida逆向_硬编码_33

右键我们的成员(db),选择数组,然后修改数组的大小即可。

java怎么用IDA逆向 从零开始学ida逆向_ida_34


java怎么用IDA逆向 从零开始学ida逆向_硬编码_35


java怎么用IDA逆向 从零开始学ida逆向_逆向_36

修改名称一样按N修改,我们修改为C,此时就定义了一个数组名称为C,类型为dw(双子节),长度为10.

java怎么用IDA逆向 从零开始学ida逆向_硬编码_37

此时我们就在IDA中创建了一个结构体。我们就可以在我们的代码中引用这个结构体了。

java怎么用IDA逆向 从零开始学ida逆向_全局变量_38

7.2、修改全局变量

比如说我们选中一个全局变量,我们要修改其为我们刚刚添加的结构体,怎么做呢?

很简单选中这个变量,按下alt+q,此时会列举出这个IDA所有识别出来的结构体,选择我们刚刚添加的结构体即可。

改完他的类型,IDA会自动给我们生成一个名字,这个名称我么也可修改,并且后续用到的这个变量的地方都将修改成我们修改的名称。

7.3、修改局部变量

当我们修改局部变量的时候,快捷键是T,我们需要找到这个结构体并选中结构体的成员点击确定就可以修改了。(IDA会按照偏移把相应的值列出来)

java怎么用IDA逆向 从零开始学ida逆向_全局变量_39


java怎么用IDA逆向 从零开始学ida逆向_ida_40

我们逆向的过程,就是给函数起名字,分析结构体,分析出结构体类型,分析出全局变量类型,分析出参数类型,当我们把这些全都分析好,整个逆向的过程也差不多了。

8、注释

注释有三种方式

8.1、分号注释

在一句代码的末端按下分号(;)会跳出一个文本框,此时我们输入注释,则就会在代码的末尾添加上注释。

java怎么用IDA逆向 从零开始学ida逆向_java怎么用IDA逆向_41

这么做的话,他不仅会在本行的末尾添加注释,也会在其他跳转到本行的地方也会添加一段注释。有利有弊。

8.2、SHIFT加分号注释

上面我们说了分号注释他不仅会在本行的末尾添加注释,也会在其他跳转到本行的地方也会添加一段注释。那么我们不希望在跳转的地方也显示注释怎么办呢?

shift + ; 注释就可以在其他跳转到本行的地方不会添加注释了

8.3、函数注释

那么,我们在向写C语言函数的时候,我们想在函数的前面加上注释(函数名,参数、返回值等信息)的时候,我们选中函数名,按下分号,此时就可以添加注释了。

java怎么用IDA逆向 从零开始学ida逆向_硬编码_42

9、交叉引用

比如说我们遇到一个函数,我们想看他还被谁引用了,怎么做呢?

当然在函数名的右下角也有显示,但是补全,如下:

java怎么用IDA逆向 从零开始学ida逆向_硬编码_43

那我们如何查看完整的引用呢?

首先选中函数名,点击上方菜单栏的的view,选择open subviews,在选择cross reference,就可查看所用引用这个函数的地方了。

java怎么用IDA逆向 从零开始学ida逆向_全局变量_44

java怎么用IDA逆向 从零开始学ida逆向_java怎么用IDA逆向_45

当然我这里找的是main韩式只有一个。

10、总结

IDA的功能还有很多很多,掌握上面流出的一些基本操作,基本的逆向的操作基本是没有问题的,如果还有其他欢迎补充,谢谢。