- 献词
- 致谢
- 前言
- 第一部分 IDA 简介
- 第 1 章 反汇编简介
- 第 2 章 逆向与反汇编工具
- 第 3 章 IDA Pro 背景知识
- 第二部分 IDA 基本用法
- 第 4 章 IDA 入门
- 第 5 章 IDA 数据显示窗口
- 第 6 章 反汇编导航
- 第 7 章 反汇编操作
- 第 8 章 数据类型与数据结构
- 第 9 章 交叉引用与绘图功能
- 第 10 章 IDA 的多种面孔
- 第三部分 IDA 高级应用
- 第 11 章 定制 IDA
- 第 12 章 使用 FLIRT 签名来识别库
- 第 13 章 扩展 IDA 的知识
- 第 14 章 修补二进制文件及其他 IDA 限制
- 第四部分 扩展 IDA 的功能
- 第 15 章 编写 IDA 脚本
- 第 16 章 IDA 软件开发工具包
- 第 17 章 IDA 插件体系结构
- 第 18 章 二进制文件与 IDA 加载器模块
- 第 19 章 IDA 处理器模块
- 第五部分 实际应用
- 第 20 章 编译器变体
- 第 21 章 模糊代码分析
- 第 22 章 漏洞分析
- 第 23 章 实用 IDA 插件
- 第六部分 IDA 调试器
- 第 24 章 IDA 调试器
- 第 25 章 反汇编器/ 调试器集成
- 第 26 章 其他调试功能
- 附录 A 使用 IDA 免费版本 5.0
- 附录 B IDC/SDK 交叉引用
6.3 搜索数据库
在 IDA 中,你可以轻松导航到你知道的位置。IDA 设计了许多类型的数据显示来总结特定类型的信息(名称、字符串、导入等),以方便你查找这些信息。但是,哪些功能可帮助你对数据库进行更一般的搜索呢?如果仔细查看一下搜索菜单,你会发现大量选项,它们绝大多数都要求你选择某个类别中的下一个选项。例如,Search ▶Next Code 命令将光标移动到下一个包含指令的位置。你可能还希望了解跳转菜单中的选项,这其中许多选项提供了大量位置供你选择。例如,使用 Jump▶Jump to Function 命令可以打开所有函数,你可以迅速选择一个函数并导航到该函数所在的位置。虽然这些扫描搜索功能通常非常有用,但下面这两种通用搜索功能更值得详细讨论:文本搜索和二进制搜索。
6.3.1 文本搜索
IDA 文本搜索相当于对反汇编列表窗口进行子字符串搜索。通过 Search▶Text(热键:ALT+T)命令启动文本搜索,即打开如图 6-7 所示的对话框。许多直观的选项规定了与搜索有关的细节。如图所示,IDA 允许你搜索 POSIX 类型的正则表达式。这里的 标识符 (Identifier )搜索有些用词不当。实际上,它将搜索限制于仅查找完整的词,并且能够匹配反汇编行中的任何完整的词,包括操作码助记符或常量。对 401116
进行标识符搜索将无法找到名为 loc_401116
的符号。
图 6-7 Text Search (文本搜索)对话框
选择 Find all occurences (查找所有结果),IDA 将在一个新的窗口中显示搜索结果,你可以根据搜索条件轻松导航到任何一个匹配结果。最后,使用 CTRL+T 或 Search▶Next Text (搜索▶下一个文本)命令可重复前一项搜索,以找到下一个匹配结果。
6.3.2 二进制搜索
如果需要搜索特定的二进制内容,如已知的字节序列,这时就不能使用文本搜索功能,而应使用 IDA 的二进制搜索工具。文本搜索针对反汇编窗口进行搜索,但是,你可以认为二进制搜索仅搜索十六进制视图窗口。根据你指定搜索字符串的方式,你可以搜索十六进制或 ASCII 字符串。使用 Search ▶Sequence of Bytes(搜索▶字节序列)或 ALT+B 即可启动二进制搜索。Binary Search(二进制搜索)对话框如图 6-8 所示。要搜索一个十六进制字节序列,应将搜索字符串指定为以空格分隔的两位十六进制值组成的列表,如 CA FE BA BE
,这与搜索 ca fe ba be
的结果相同,无论你是否选中 Case-sensitive (区分大小写)选项都是如此。
图 6-8 Binary Search 对话框
要搜索内嵌的字符串数据(有效搜索十六进制窗口中的 ASCII 字符串),你必须将搜索字符串用引号括起来。使用 Unicode Strings 选项可以搜索你所搜索的字符串的 Unicode 版本。
Case-sensitive 选项可能会引起混淆。在搜索字符串时,它的作用相当简单。如果没有选中 Case-sensitive 选项,则搜索 hello 时会出现 HELLO。但是,在进行十六进制搜索时,如果没有选中 Case-sensitive 选项,情况会有所不同。如果对 E9 41 C3
进行不区分大小写的搜索,你会惊奇地发现, E9 61 C3
出现在了搜索结果中。这是因为,0x41 对应于字符 A,而 0x61 则对应于字符 a,所以 IDA 认为这两个字符串相互匹配。所以,即使你指定了进行十六进制搜索,但 0x41 却等同于 0x61 ,因为你并没有指定进行区分大小写的搜索。
说明 在进行十六进制搜索时,如果希望将搜索限定为完全匹配,你必须选中 Case-sensitive 选项。在你搜索特定的操作码序列而非 ASCII 文本时,这点尤为重要。
使用 CTRL+B 或 Search ▶Next Sequence of Bytes(搜索▶下一个字节序列)可以搜索随后的二进制数据。最后,你并没有必要在十六进制视图窗口中进行二进制搜索。IDA 允许你在活动的反汇编窗口中指定二进制搜索条件,如果你成功找到与搜索条件相匹配的字符串,反汇编窗口将跳转对相应的位置。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论