在默认配置下,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 主要的数据显示窗口的更多相关文章

  1. IDA Pro 权威指南学习笔记(三) - IDA 桌面简介

    IDA 的默认桌面如下图 工具栏区域(1)包含与 IDA 的常用操作对应的工具,可以使用 View -> Toolbar 显示或隐藏工具栏 可以使用 View -> Toolbars -& ...

  2. IDA Pro 权威指南学习笔记(四) - IDA 用户界面的基本规则

    基本规则: IDA 不提供撤销功能 如果由于不小心按下某个键,导致数据库文件发生意外,这时需要将显示窗口恢复到以前的状态 几乎所有的操作都有其对应的菜单项.热键和工具栏按钮 IDA 的工具栏高度可配置 ...

  3. IDA Pro 权威指南学习笔记(二) - IDA 数据库文件

    生成数据库文件 把要分析的文件用 IDA 打开后,会生成 3 个数据库文件 扩展名分别为 .id0,id1,nam .id0 文件是一个二叉树形式的数据库 .id1 文件包含描述每个程序字节的标记 . ...

  4. IDA Pro权威指南学习笔记(一)

    一直不懂逆向,最近刚好不忙,于是学习逆向,用来做笔记,顺便和大家分享交流. 参考书籍<IAD PRO权威指南> 工具: PETools: ETools 是另一款很好的PE文件编辑工具,以前 ...

  5. IDA Pro 权威指南学习笔记(七) - 其他 IDA 显示窗口

    默认情况下 IDA 不会打开这些窗口,可通过 View -> Open Subviews 命令打开 Strings 窗口(Strings) Strings 窗口中显示的是从二进制文件中提取出的一 ...

  6. IDA Pro 权威指南学习笔记(十四) - 操纵函数

    IDA 无法定位一个函数调用,由于没有直接的方法到达函数,IDA 将无法识别它们 IDA 可能无法正确确定函数的结束部分,需要手动干预,以更正反汇编代码中的错误 如果编译器已经将函数分割到几个地址范围 ...

  7. IDA Pro 权威指南学习笔记(十三) - 基本代码转换

    IDA提供的代码转换包括: 1.将数据转换为代码 2.将代码转换为数据 3.指定一个指令序列为函数 4.更改现有函数的起始或结束地址 5.更改指令操作数的显示格式 代码显示选项 通过 Options ...

  8. IDA Pro 权威指南学习笔记(十二) - IDA 中的注释

    注释有助于以一种更高级的方式描述汇编语言指令序列 IDA 提供了几种不同类型的注释,每种注释适用于不同的目的 使用 Edit -> Comments 命令的选项,可以为反汇编代码清单中的任何一行 ...

  9. IDA Pro 权威指南学习笔记(十一) - 名称与命名

    多数情况下,要修改一个名称,只需单击想要修改的名称(使其突出显示),并使用快捷键 N 打开更名对话框 右击需要修改的名称,并在出现的上下文菜单中选择 Rename 选项,也可以更改名称 参数和局部变量 ...

随机推荐

  1. 5.8 页面对象(Page Object)模式

    页面对象(Page Object)模式是目前自动化测试领域普遍使用的设计模式之一,此模式可以大大提高测试代码的复用率,提高测试脚本的编写效率和维护效率,是中级自动化测试工程师的必备技能之一. 1.页面 ...

  2. Robot Framework(一)

    一. 定义 Robot Framework是一款python编写的功能自动化测试框架,具有良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行 二. Robot ...

  3. 自定义音频条形图--p52

    package com.zzw.qunyingzhuan2; import android.content.Context; import android.graphics.Canvas; impor ...

  4. monkey 原理,环境搭建、命令详解

    一.monkey测试的相关的原理 monkey测试的原理就是利用socket通讯的方式来模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常.当Monkey程序在模拟器或设备运行的时候, ...

  5. poscms仿站知识点总结(二)

    1.相同类型div添加不同class 遇到一个样式上的问题,模板页面有8个子项,样式都是一样,至于数据是可以用for循环来添加的,但是for循环的时候,每个div的 类名是无法及时更改的,但是模板页面 ...

  6. canvas 创建颜色渐变柱状图

    最终结果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...

  7. (一)canvas简介

    <canvas>元素主要用来图形的绘制,通过脚本来完成(通常时js来实现): 可以利用其实现图表,游戏等项目的开发. getContext 获取画布的摸板是2d还是3d strokeRec ...

  8. 【转】C# Socket编程(5)使用TCP Socket

    [转自:https://www.cnblogs.com/IPrograming/archive/2012/10/18/CSharp_Socket_5.html] TCP 协议(Transmission ...

  9. 阿里云接口异常-Can not find endpoint to access

    最近在做公司的资产盘点,需要请求阿里云的接口获取公司的云服务器信息.在获取实例列表的过程中,通过异常机制捕获了 Can not find endpoint to access 这个错误.经过多次排查, ...

  10. Sentry的授权模型

    首先在jdbc中指定的hive用户是一个linux的用户(必须和一个同名linux用户一一对应):这个用户如果是管理员用户,那么可以进行管理工作:比如创建.删除角色,查看角色和用户绑定情况等等:如果不 ...