IDA Pro(Interactive Disassembler Professional)简介

IDA的交互能力:对变量名、数组、结构等进行定义,人为指定编译器类型等。

IDA支持多平台的多种文件类型:PE,DOS、UNIX、Mac、Java、.NET等。

IDA在反编译程序后会创建一个数据库(一个IDB文件),一旦创建成功,再次分析目标文件时就无需目标文件,只需拥有之前创建的数据库即可。

配置IDA

1.Disassembly

IDA主窗口

1.反汇编窗口IDA-View

反汇编窗口有两种显示模式:图形视图和文本视图,图形视图以程序流程图显示代码,将函数分解成块显示。两种模式可通过按空格键或者右键->‘text view’进行切换

2.添加注释窗口

在代码行后单击';'或右键->‘edit commet’ 可弹出注释窗口在代码行后添加注释

3.导航

单击可直接在跳转到相关的地方,右键->'zoom in' 'zoom out' 可放大或缩小导航条

4.Imports 窗口

该窗口包含了程序调用的函数及其对应的库,双击可在反汇编窗口中跳转到调用处

5.转到地址窗口

在反汇编窗口单击'G',可弹出地址跳转窗口跳转到输入的地址

6.字符串窗口

'view'->'open subviews'->'strings'可打开字符串窗口,其包含了扫描到的字符串,双击在反汇编窗口可跳转到字符串出现的地方

7."shift+F9"或“options”->'view'->'open subviews'->'structures' 打开结构体窗口,在此可以自定义结构体、查看程序使用的已导入的结构体

8“shift+F11"或“options”->'view'->'open subviews'->'type libraries'打开类型库,在此可以添加一些文件,这些文件可能定义了程序使用的结构体,进而可以在反汇编窗口中以结构体的形式显示数据

交叉参考(XREF)

交叉参考用于了解代码的相互调用关系 

图中的“CODE XREF:  :_E_1]xV:02535339| j”就表示交叉参考,提示当前的代码01665945可以从02535339处跳转至此,'|'后面有几种情况:j表示跳转,p表示子程序,o表示子程序。通过单"Enter"可跳转到相应的地方

参考重命名

参考重命名可将反汇编中的一些默认名称改为一些有意义的名称,增加代码的可读性。选择名称后单击'N‘或右键->’Rename‘可弹出重命名窗口

                                                              IDA Pro(Interactive Disassembler Professional)简介_第1张图片

数据与代码转换

有些时候代码可能会被错误的识别为数据,或数据被错误的识别为代码,因此需要将十六进制数据转换为代码显示,或者将代码转换为数据显示,将光标移动到要转换的地方的第一字节:

单击’C‘或"edit"->"Code" :将数据转换为代码

单击'U'或“edit”->"Undefine" : 将代码转换为数据

单击’D‘ :将数据类型在dd、dw、db之间转换

单击’P‘ :定义为子程序

单击‘A’或  “Edit”-> "Strings" -> "ASCII" :转换为字符串,“options”-> "ASCII string style"可以切换字符串识别模式,默认为0字节结束识别

单击‘*’或 “Edit”-> "Array" :在弹窗中设置好数组大小(Array size)、每行项数(Item on a line)、对齐方式(Element print width)等后,可以转换为数组形式显示

代码与数据之间的转换会在遇到第一个错误数据或者指令时停止,或者选择一段数据或代码可在指定范围内进行转换

显示结构体

1.加载常用的结构体

2.自定义结构体

FLIRT(Fast Library Identification and Recognition Technology)库文件快速识别与鉴定技术

IDA可以在一些编译器的标准库文件中找出当前程序调用的函数,并显示,如调用C的printf,一般的反汇编可能显示为call 407F82,而IDA可以显示为call printf,提高了汇编代码的可读性。

FILRT失败的原因:

1.程序中编译器相关的数据被删除,无法识别是什么编译器 

2.程序由某些特定版本的编译器产生,IDA不支持

3.编译器不支持

如果知道编译器且IDA支持但是FILRT没有成功,那么可以尝试启用特定的编译器签名文件:“shift+F5”或“view”->"open subviews"->"signatures" 打开库列表,然后右键->"apply new signature" 添加编译器的签名文件,IDA就会重新分析代码或者“options”->"general"->"analysis"->"reanalysis program"手动让IDA分析代码

如果知道程序调用了某个库的函数,亦可自己创建FLIRT签名文件(.sig),详情请查看FLIRT的帮助文档

IDA动态调试

加载目标文件

IDA调试有2种方式:第一种是IDA加载目标文件后,点击“debugger”->"select debugger"弹出选择调试器窗口,一般选择“win32 debugger”不一般的情况请自行搜索选项相关信息,选择后Debugger菜单栏会发送改变,这时点击“debugger”->"start process"即可开始调试。

第二种是加载正在运行的程序进行调试,“Debugger”->"Attach to process..."或“debugger”->"attach"->"local windows debugger"即可开始调试,这时需要注意的是如果调试的程序是以管理员权限运行的,那么IDA也需要以管理员权限运行才能进行调试。

调试时常用的快捷键

F7 单步步进,遇到 call 时会进入
F8 单步步过,遇到 call 时不会进入
F9 运行程序,直到遇到断点
F4 运行到光标所在行
F2 设置断点在光标所在行

ctrl + F7

运行直到函数返回
ctrl + F2 终止正在运行的程序

 

调试窗口

"IDA View-R(E)IP" : 代码相关

"General registers": 通用寄存器相关

"Threads" : 线程相关

"Stack view" : 堆栈相关

设置断点

有些时候在单击'F7'之后程序并不是单步执行而是像‘F9’一样直接运行程序并没有停止,这时候可以尝试先暂停程序,然后在EIP指令处设置断点(F2),这样点击'F7'程序就可以单步执行了。

修改指令或数据

将光标移动到要修改的指令行,“edit”->"patch program"->"assemble"即可修改指令,或者在Hex View窗口修改亦可,修改后“edit”->"patch program"->"apply patches to input file"可将修改更新到二进制文件

远程调试

 

 

你可能感兴趣的:(调试)