IDA Pro 权威指南学习笔记(五) - IDA 主要的数据显示窗口
在默认配置下,IDA(从 6.1 版开始)会在对新二进制文件的初始加载和分析阶段创建 7 个显示窗口
3 个立即可见的窗口分别为 IDA-View 窗口、函数窗口和消息输出窗口

可以通过 View -> Open Subviews 菜单打开这些窗口

在 IDA 中,ESC 键是一个非常有用的热键
在反汇编窗口中,ESC 键的作用与Web浏览器的“后退”按钮类似
在打开的其他窗口中,ESC 键用于关闭窗口
反汇编窗口
反汇编窗口也叫 IDA-View 窗口,它是操作和分析二进制文件的主要工具
反汇编窗口有两种显示格式:默认的基于图形的视图和面向文本的列表视图
可以使用空格键在图形视图与列表视图之间切换
IDA 图形视图
图形视图将一个函数分解成许多基本块,以生动显示该函数由一个块到另一个块的控制流程
基本块是一个不包含分支,从头执行到尾的最大指令序列
基本块中的第一条指令通常是分支指令的目标,而最后一条指令则往往是一条分支指令

IDA 使用不同的彩色箭头区分函数块之间各种类型的流
正常流(也叫做普通流)表示指令默认连续执行,跳转流表示当前的指令跳转到(或可能跳转到)某个非连续性位置,调用流表示当前指令会调用一个子例程
根据测试条件,在条件跳转位置终止的基本块可能会生成两种流:Yes 边的箭头(是的,执行分支)默认为绿色,No 边的箭头(不,不执行分支)默认为红色
只有一个后继块的基本块会利用一个正常边(默认为蓝色)指向下一个即将执行的块
在图形模式下,IDA 一次显示一个函数
使用滑轮鼠标的用户,可以使用“CTRL+鼠标滑轮”来调整图形的大小
概况窗口始终显示图形完整的块状结构,并用一个虚线框指出你当前在反汇编窗口中查看的图形区域
可以用鼠标在概况窗口中拖动该虚线框,以迅速将图形视图调整到任何想到的位置

控制图形视图的显示方式:
1.平移。首先,除了使用“图形概况”窗口迅速定位图形外,你还可以通过单击和拖动图形视图的背景来定位图形
2.重新调整块位置。通过单击指定块的标题栏并将其拖动到一个新位置,用户可以移动图形中的每一个块的位置
IDA 会尽可能少地重新设定一个被移动的块的连接线的位置,即连接两个块的带箭头的折线
如果想还原默认的图形布局,可以右击图形,并选择 Layout Graph
可以拖动连接线的顶点,手动更改连接线的路径
在按下 shift 键的同时,在连接线的任何位置双击鼠标,即可在该位置添加一个新顶点
3.分组和折叠块。可以对块分组,每个块单独分组,或者与其他块一起分组,并可将分组后的块折叠起来,以减少显示的混乱程度
折叠块可以帮助追踪已经分析过的块,要折叠块,可以右击块的标题栏,然后选择 Group Nodes
4.创建其他反汇编窗口。如果想要同时查看两个不同函数的图形,可以通过 Views -> Open Subviews -> Disassembly 命令打开另一个反汇编窗口
这样打开的第一个反汇编窗口叫做 IDA View-A,随后的反汇编窗口叫做 IDA View-B、IDA View-C,依次类推
每个反汇编窗口都独立于其他窗口,可以在一个窗口中查看一个图形,在另一个窗口中查看文本列表,或者在 3 个不同的窗口中查看 3 个不同的图形
IDA 文本视图
面向文本的反汇编窗口是查看和操作 IDA 生成的反汇编代码的传统显示窗口
文本显示窗口会呈现一个程序的完整反汇编代码清单(而在图形模式下一次只能显示一个函数),用户只有通过这个窗口才能查看一个二进制文件的数据部分
图形显示窗口中的所有信息均以某种形式存在于文本显示窗口中
在使用图形视图时,获得的有关每一个反汇编代码行的信息似乎要更少一些
因为 IDA 隐藏了许多与每个反汇编行有关的更加传统的信息(如虚拟地址信息),以最大限度地减少显示每个基本块所需的空间
要想显示与每个反汇编行有关的其他信息,可以通过 Options -> General 命令打开 IDA 常规选项,然后在 Disassembly 选项卡的可用的反汇编行部分选择相应的选项
例如,要给每一个反汇编行添加虚拟地址,可以启用“行前缀”

启用行前缀

函数的文本视图列表如下图

窗口中的反汇编代码分行显示,虚拟地址则默认显示
通常,虚拟地址以 [ 区域名称 ]:[ 虚拟地址 ] 这种格式显示,如 .text:00401589
显示窗口的左边部分叫做箭头窗口(1),用于描述函数中的非线性流程
实线箭头表示非条件跳转,虚线箭头则表示条件跳转
如果一个跳转(条件或非条件)将控制权转交给程序中的某个地址(以前的),这时会使用粗线(实线或虚线)
出现这类逆向流程,通常表示程序中存在循环
在上图中,地址 0040158E 至 00401592 之间就有一个循环箭头

位置 1 的声明(也出现在图形视图中)是 IDA 对于函数栈帧布局的最准确估算
IDA 会对函数栈指针及函数使用的任何栈帧指针的行为进行仔细分析,从而计算出该函数的栈帧的结构
栈帧(或激活记录)是在程序的运行时栈中分配的一个内存块,其中包含传递给一个函数的参数和该函数声明的局部变量
栈帧在函数的入口点位置分配,并在函数退出时释放
位置 2 的注释(以分号开头)属于交叉引用
代码交叉引用(而不是数据交叉引用),它表示另一个程序指令将控制权转交给交叉引用注释所在位置的指令
函数窗口
函数窗口用于列举 IDA 在数据库中识别的每一个函数
Functions 窗口中的条目如下所示:

在二进制文件中虚拟地址为 0040E600 的 .text 部分找到 scanf 函数,该函数长为 41 字节(十六进制为 29 字节)
它返回调用方( R ),并使用 EBP 寄存器( B )引用它的局部变量
双击 Functions 窗口中的一个条目,反汇编窗口将跳转到选定函数所在的位置
输出窗口
打开一个新文件时,IDA 工作区底部的输出窗口与其他窗口一起组成了 IDA 的默认窗口
输出窗口是 IDA 的输出控制台,从中可以找到与 IDA 所执行的任务有关的信息
例如,初次打开一个二进制文件时,IDA 将生成消息,指出它在某个时刻所处的分析阶段,以及它为创建新数据库而执行的操作
当你使用数据库时,输出窗口将输出你所执行的各种操作的状态
可以将输出窗口中的内容复制到系统剪贴板中,也可以右击窗口的任何位置,并在出现的菜单中选择相应的操作而完全删除输出窗口的内容
通常,输出窗口是显示 IDA 开发的任何脚本和插件的输出的主要窗口
IDA Pro 权威指南学习笔记(五) - IDA 主要的数据显示窗口的更多相关文章
- IDA Pro 权威指南学习笔记(三) - IDA 桌面简介
IDA 的默认桌面如下图 工具栏区域(1)包含与 IDA 的常用操作对应的工具,可以使用 View -> Toolbar 显示或隐藏工具栏 可以使用 View -> Toolbars -& ...
- IDA Pro 权威指南学习笔记(四) - IDA 用户界面的基本规则
基本规则: IDA 不提供撤销功能 如果由于不小心按下某个键,导致数据库文件发生意外,这时需要将显示窗口恢复到以前的状态 几乎所有的操作都有其对应的菜单项.热键和工具栏按钮 IDA 的工具栏高度可配置 ...
- IDA Pro 权威指南学习笔记(二) - IDA 数据库文件
生成数据库文件 把要分析的文件用 IDA 打开后,会生成 3 个数据库文件 扩展名分别为 .id0,id1,nam .id0 文件是一个二叉树形式的数据库 .id1 文件包含描述每个程序字节的标记 . ...
- IDA Pro权威指南学习笔记(一)
一直不懂逆向,最近刚好不忙,于是学习逆向,用来做笔记,顺便和大家分享交流. 参考书籍<IAD PRO权威指南> 工具: PETools: ETools 是另一款很好的PE文件编辑工具,以前 ...
- IDA Pro 权威指南学习笔记(七) - 其他 IDA 显示窗口
默认情况下 IDA 不会打开这些窗口,可通过 View -> Open Subviews 命令打开 Strings 窗口(Strings) Strings 窗口中显示的是从二进制文件中提取出的一 ...
- IDA Pro 权威指南学习笔记(十四) - 操纵函数
IDA 无法定位一个函数调用,由于没有直接的方法到达函数,IDA 将无法识别它们 IDA 可能无法正确确定函数的结束部分,需要手动干预,以更正反汇编代码中的错误 如果编译器已经将函数分割到几个地址范围 ...
- IDA Pro 权威指南学习笔记(十三) - 基本代码转换
IDA提供的代码转换包括: 1.将数据转换为代码 2.将代码转换为数据 3.指定一个指令序列为函数 4.更改现有函数的起始或结束地址 5.更改指令操作数的显示格式 代码显示选项 通过 Options ...
- IDA Pro 权威指南学习笔记(十二) - IDA 中的注释
注释有助于以一种更高级的方式描述汇编语言指令序列 IDA 提供了几种不同类型的注释,每种注释适用于不同的目的 使用 Edit -> Comments 命令的选项,可以为反汇编代码清单中的任何一行 ...
- IDA Pro 权威指南学习笔记(十一) - 名称与命名
多数情况下,要修改一个名称,只需单击想要修改的名称(使其突出显示),并使用快捷键 N 打开更名对话框 右击需要修改的名称,并在出现的上下文菜单中选择 Rename 选项,也可以更改名称 参数和局部变量 ...
随机推荐
- 复制文件夹的方法 .net
void CopyDirectory(string SourcePath,string DestinationPath) { //创建所有目录 foreach(string dirPath inDir ...
- kindeditor上传本地图片实例
所需插件:kindeditor下载 密码: 5ry4 jsp文件: <script type="text/javascript" language="javas ...
- 使用Monkey对apk做稳定性测试
认识Monkey 官方文档:https://developer.android.com/studio/test/monkey.html 什么是Monkey? Monkey是Android中的一个命令行 ...
- 服务器(Ubuntu 12.04 LTS)上编译基于OpenCV的项目遇到的问题及解决方案
问题1:OpenCV编译安装时出错,错误信息中提到要打开-fPIC 选项重试. 解决方案:使用如下命令运行CMake cmake -DWITH_1394=OFF -DWITH_CUDA=OFF -DW ...
- python基础之多线程与多进程(二)
上课笔记整理: 守护线程的作用,起到监听的作用 一个函数连接数据库 一个做守护线程,监听日志 两个线程同时取一个数据 线程---->线程安全---->线程同时进行操作数据. IO操作--- ...
- 机器学习算法实现解析——libFM之libFM的训练过程之SGD的方法
本节主要介绍的是libFM源码分析的第五部分之一--libFM的训练过程之SGD的方法. 5.1.基于梯度的模型训练方法 在libFM中,提供了两大类的模型训练方法,一类是基于梯度的训练方法,另一类是 ...
- 【Android】Android 学习记录贴
官网 教程学习笔记 Genymotion 安卓虚拟器太慢,用Genymotion(装载eclipse的插件) 利用Genymotion运行Android应用程序 1.首先,点击 来启动或者创建您要使用 ...
- Python基本特殊方法之__format__
__format__()方法 __format__()传参方法:someobject.__format__(specification) specification为指定格式,当应用程序中出现&quo ...
- 安装Oracle数据库操作步骤
第一步: 第二步: 第三步: 第四步: 第五步:输入密码 第六步:继续 第七步: 第八步:进入主页后 第九步:登录进去后是这样子 第十步: 第十一步: 第十二步: 最后一步:看到桌面上有个图标就说明安 ...
- Windows下Python安装lxml
1.下载easy_install的安装包,下载地址:https://pypi.Python.org/pypi/setuptools 我是Windows7,所以直接下载Windows(Simplify) ...