默认情况下 IDA 不会打开这些窗口,可通过 View -> Open Subviews 命令打开

Strings 窗口(Strings)

Strings 窗口中显示的是从二进制文件中提取出的一组字符串,以及每个字符串所在的地址

双击 Strings 窗口中的任何字符串,反汇编窗口和十六进制窗口将跳转到该字符串所在的地址

将 Strings 窗口与交叉引用相结合,可迅速定位感兴趣的字符串,并追踪到程序中任何引用该字符串的位置

例如,看到 SOFTWARE\Microsoft\Windows\CurrentVersion\Run 这个字符串,并想知道应用程序为什么会引用这个特殊的 Windows 注册表项

每次打开 Strings 窗口,IDA 都会扫描或重新扫描整个数据库,查找其中的字符串

扫描字符串的操作遵照 Strings 窗口的设置来完成,右击该窗口,在出现的菜单中选择 Setup,即可开始设置

Setup Strings 窗口用于指定 IDA 应扫描的字符串类型

IDA 默认扫描的字符串类型为至少包含 5 个字符的 C 风格、以 null 结尾的 7 位 ASCII 字符串

每次单击 OK 按钮关闭 Setup Strings 窗口后,IDA 都会根据新的设置重新扫描数据库,查找相应的字符串

Display only defined strings(仅显示已定义的字符串),这个选项使 Strings 窗口仅显示 IDA 自动创建或用户手动创建的已命名字符串数据项

在选中这个选项的同时禁用所有其他选项,IDA 将不会自动扫描其他类型的字符串

Ignore instructions/data definitions(忽略指令/数据定义),这个选项会使 IDA 扫描指令和现有数据定义中的字符串

使用这个选项,可以让 IDA 扫描二进制代码中错误地转换成指令的字符串,或扫描数据中非字符串格式(如字节数组或整数)的字符串

这个选项还会导致 IDA 生成许多垃圾字符串,即那些由 5 个或更多 ASCII 字符构成的字符串(无论其是否合法)

使用这个选项的效果类似于使用 strings -a 命令

Names 窗口(Names)

Names 窗口简要列举了一个二进制文件的所有全局名称

名称是指对一个程序虚拟地址的符号描述

名称可以按字母排序,也可以按虚拟地址排序(升序或降序)

双击 Names 窗口中的名称,可跳转到显示该名称的反汇编视图

Names 窗口中显示的名称采用了颜色和字母编码:

f 为常规函数,IDA 认为这些函数不属于库函数

i 为导入的名称,通常为共享库导入的函数名称

它与库函数的区别在于:导入的名称没有代码,而库函数的主体将在反汇编代码清单中显示

D 为数据,已命名数据的位置通常表示全局变量

C 为命名代码,这些是已命名的程序指令位置,IDA 认为它们不属于任何函数

当 IDA 在程序的符号表中找到一个名称,但没发现对程序位置的任何调用时,就会出现这种情况

A 为字符串数据,这是一个被引用的数据位置,其中包含的一串字符符合 IDA 的某种已知的字符串数据类型,如以 '\0' 字节结束的 ASCII 字符串

在对一个程序进行反汇编的过程中,IDA 会为所有直接作为代码(分支或调用目标)或数据(读取的、写入的或使用的地址)引用的位置生成名称

如果一个位置已在程序符号表中命名,IDA 将采用该名称

如果符号表中某一程序位置没有名称,则 IDA 会生成一个默认的名称,以在反汇编过程中使用

在 IDA 给某个位置命名时,它会使用该位置的虚拟地址和一个表示该位置的类型的前缀进行命名

将虚拟地址合并到生成的名称中,可确保生成的所有名称的唯一性,因为没有两个位置的虚拟地址是相同的,这种自动生成的名称并不在 Names 窗口中显示

用于自动生成名称的一些常用前缀:

sub_xxxxxx:地址 xxxxxx 处的子例程

loc_xxxxxx:地址 xxxxxx 处的一个指令

byte_xxxxxx:位置 xxxxxx 处的 8 位数据

word_xxxxxx:位置 xxxxxx 处的 16 位数据

dword_xxxxxx:位置 xxxxxx 处的 32 位数据

unk_xxxxxx:位置 xxxxxx 处的大小未知的数据

段窗口(Segments)

段窗口显示的是在二进制文件中出现的段的简要列表

在讨论二进制文件的结构时,IDA 术语段(segment)常称为节(section)

段窗口中显示的信息包括段名称、起始和结束地址以及许可标志

起始和结束地址代表程序段在运行时对应的虚拟地址范围

双击段窗口中的任何条目,IDA 将跳转到反汇编窗口中该段的起始位置

右击一个条目,IDA 将显示一个上下文菜单,你可以选择添加新段、删除现有段、或者编辑现有段的属性

段窗口所对应的命令行工具包括 objdump (-h) 、 readelf (-s) 和 dumpbin (/HEADERS)

签名窗口(Signatures)

签名窗口显示的是 IDA 对打开的二进制文件所使用的签名

签名用于识别由编译器生成的常用启动顺序,以确定可能已被用来构建给定二进制文件的编译器

签名还可用于将函数划归为由编译器插入的已知库函数,或者因为静态链接而添加到二进制文件中的函数

IDA 对该二进制文件应用了 vcseh 签名(来自<IDADIR>/sigs目录),并在这个过程中将 0 个函数识别为库函数

至少在两种情况下,需要知道如何对二进制文件应用其他签名:

第一种情况:IDA 无法识别用于构建二进制文件的编译器,因而无法选择所需的相应签名

这时,需要根据自己的初步分析,确认 IDA 应尝试使用的签名,并迫使 IDA 使用一个或几个签名

第二种情况:IDA 中没有针对某些库的现成签名,这时需要自己为这些库创建你自己的签名

类型库窗口(Type libraries)

类型库保存 IDA 积累的一些信息,即 IDA 从最常用的编译器的头文件中搜集到的有关预定义数据类型和函数原型的信息

通过处理头文件,IDA 可确定常用库函数所需的数据类型,并为反汇编代码提供相应的注释

IDA 还可从这些头文件中了解复杂数据结构的大小和布局所有这些信息都收集在 TIL 文件(<IDADIR/til 目录>)中,并可在任何时候应用于分析的二进制文件

与应用签名时一样,在选择加载一组适当的 TIL 文件之前,IDA 必须首先确定一个程序所使用的库

要请求 IDA 加载其他类型库,可以在类型库窗口中按下 INSERT 键,或右击窗口并在出现的菜单中选择 Load Type Library(加载类型库)

函数调用窗口(Function calls)

如果 Y 函数直接调用 X 函数,或者 X 函数直接调用 Y 函数,则称 Y 函数是 X 函数的近邻

打开函数调用窗口时,IDA 会确定光标所在位置的函数的“近邻”

函数 ___pow5mult_D2A 被 ___gdtoa 从 3 个不同的位置调用,被 ___strtodg 从 2 个不同的位置调用,而这个函数又调用了另外 9 个函数

双击函数调用窗口中的任何一行,IDA 将跳转到反汇编窗口中对应的调用或被调用函数(即调用方或被调用方)

IDA 交叉引用(xrefs)是用于生成函数调用窗口的机制

问题窗口(Problems)

IDA 在问题窗口中显示它在反汇编二进制文件时遇到的困难,以及它如何处理这些困难

每个问题都注明了问题发生的地址、问题的类型以及问题所在位置的指令

在上图中,有一个 NODISASM 问题和一个 DECISION 问题

DECISION 问题通常表示 IDA 决定将一个地址上的字节作为指令而非数据进行反汇编,即使这个地址在递归下降指令遍历过程中从未被引用也是如此

IDA Pro 权威指南学习笔记(七) - 其他 IDA 显示窗口的更多相关文章

  1. IDA Pro 权威指南学习笔记(八) - 基本 IDA 导航

    导航目标 在分析阶段,IDA 会通过检查二进制文件的符号表生成符号名称,或根据二进制文件引用位置的方式自动生成一个名称 反汇编窗口中显示的任何名称都是导航目标 双击任何一个符号,IDA 将跳转到相应的 ...

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

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

  3. IDA Pro 权威指南学习笔记(一) - 启动 IDA

    启动 IDA 启动 IDA,有一个欢迎界面 之后有一个对话框 选择 New 将启动一个对话框来选择将要分析的文件 选择 Go 将使 IDA 打开一个空白的工作区 如果要选择分析的文件,可以直接拖到 I ...

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

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

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

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

  6. IDA Pro 权威指南学习笔记(五) - IDA 主要的数据显示窗口

    在默认配置下,IDA(从 6.1 版开始)会在对新二进制文件的初始加载和分析阶段创建 7 个显示窗口 3 个立即可见的窗口分别为 IDA-View 窗口.函数窗口和消息输出窗口 可以通过 View - ...

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

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

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

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

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

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

随机推荐

  1. java JVM 随笔

    先说重点: 对象在堆区 方法在栈区 变量在方法区,常量池在方法区 为什么要了解Java 虚拟机 ? 这个问题一直困惑了我很长一段时间,其实在我们开发的过程中,即使我们不了解JVM也能正常的开发,但是当 ...

  2. wireshark捕获到的TCP包图示

    wireshark抓到的包与对应的协议层如下图所示: wireshark捕获到的TCP包中的每个字段如下图所示:

  3. 016对象——__set __get get_class_methods get_class_vars

    <?php /** */ //http://phpbasic.com/004object/16.php?type=admin /*session_start(); $_SESSION['utyp ...

  4. LeetCode OJ:Add Two Numbers (相加链表之数)

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  5. Android中Application是什么?

    Application是什么? Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象, ...

  6. json 和 table控件

    <!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content= ...

  7. 任务调度 Spring Task 4(一)

    深入浅出spring task定时任务 在工作中有用到spring task作为定时任务的处理,spring通过接口TaskExecutor和TaskScheduler这两个接口的方式为异步定时任务提 ...

  8. HTML5编写规范

    HTML和CSS编码规范内容 一.HTML规范 二.CSS规范 三.注意事项: 四.常用的命名规则 五.CSS样式表文件命名 六.文件命名规则 一.HTML规范: 1.代码规范 页面的第一行添加标准模 ...

  9. (八)js函数二

    1.变量 a)局部变量:在所有函数内部定义的变量,或者在函数内部未使用var声明的变量也属于全局变量. b)全局变量:在所有函数外部定义的变量. eg: 1)     var a = 5,b = 4, ...

  10. 使用Audition录制自己的歌曲

    Audition专为在照相室.广播设备和后期制作设备方面工作的音频和视频专业人员设计,可提供先进的音频混合.编辑.控制和效果处理功能.最多混合 128 个声道,可编辑单个音频文件,创建回路并可使用 4 ...