- 献词
- 致谢
- 前言
- 第一部分 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 交叉引用
11.1 配置文件
IDA 的许多默认行为由各种配置文件中的设置控制。多数情况下,配置文件存储在<IDADIR>/cfg 目录中。插件配置文件是唯一的例外,它的位置为<IDADIR>/plugins/plugins.cfg(plugins.cfg 将在第 17 章中介绍)。你可能已经注意到,主要配置目录中有相当多的文件,但是绝大多数的文件都被处理器模块使用,并且只适用于分析某些类型的 CPU 。其中 3 个主要的配置文件分别为 ida.cfg 、idagui.cfg 和 idatui.cfg 。通常,适用于所有 IDA 版本的选项保存在 ida.cfg 文件中,而 idagui.cfg 和 idatui.cfg 中的选项分别针对 IDA 的 GUI 版本和文本模式的版本。
11.1.1 主配置文件:ida.cfg
IDA 的主配置文件为 ida.cfg 。早在启动过程中,IDA 就读取了这个文件,给各种文件扩展名分配默认的处理器类型,并调整 IDA 的内存使用参数。指定处理器类型后,IDA 会再次读取这个文件,以处理其他配置选项。ida.cfg 中包含的选项适用于所有版本的 IDA ,无论你使用什么用户界面。
如第 9 章所述,ida.cfg 中的常规选项包括内存调整参数( VPAGESIZE
)、是否创建备份文件( CTEATE_BACKUPS
)以及外部图形查看器的名称( GRAPH_VISUALIZER
)。
有时候,在处理非常大的输入文件时,IDA 可能会报告内存不足,因而无法创建新数据库。在这种情况下,增大 VPAGESIZE
,然后重新打开输入文件即可解决问题。
ida.cfg 中还包含大量用于控制反汇编行格式的选项,包括通过 Options▶General 访问的许多选项的默认值。它们包括要显示的操作码字节数的默认值( OPCODE_BYTES
)、指令的缩进距离( INDENTATION
)、栈指针偏移量是否应与每条指令一起显示( SHOW_SP
)、每一行反汇编代码中显示的交叉引用的最大数量( SHOW_XREFS
)。其他选项则控制图形模式下反汇编代码的格式。
为已命名程序位置(相对于栈变量)指定最大名称长度的全局选项为 MAX_NAMES_LENGTH
,它同样位于 ida.cfg 中。这个选项的默认设置为 15 个字符,如果你输入的名称的长度超出了这个限制,IDA 将显示一条警告消息。这个默认值较小,因为有些汇编器无法处理超过 15 个字符的名称。如果你不打算在汇编器中运行 IDA 生成的反汇编代码,就可以安全地增加这个限制。
用户指定的名称中允许使用的字符列表由 NameChars
选项控制。默认情况下,这个列表允许使用字母字符及 4 个特殊的字符: _、$、?
和 @
。当你为位置或栈变量分配新名称时,如果 IDA 不支持你希望使用的字符,这时,你可能想要在 NameChars
字符集中增加额外的字符。例如,如果你想要在 IDA 名称中合法使用点字符,就需要修改 NameChars
选项。不过,你应该避免在名称中使用分号、冒号、逗号和空格字符,因为它们可能会造成混淆。通常,这些字符用于将反汇编行的各个部分分隔开来。
最后两个需要注意的选项会影响 IDA 在解析 C 头文件(见第 8 章)时的行为。 C_HEADER_PATH
选项指定 IDA 在解析 #include
依赖关系时搜索的目录列表。默认情况下,这个选项会列出微软的 Visual Studio 使用的一个常见目录。如果你使用一个不同的编辑器,或者你的 C 头文件位于非标准位置,这时你应该考虑编辑这个选项。 C_PREDEFINED_MACROS
选项可用于指定一个预处理宏默认列表,无论 IDA 在解析 C 头文件时是否遇到这些宏,它都会合并这个列表。处理那些在你无法访问的头文件中定义的宏时,这个选项提供了一种有限的解决方案。
ida.cfg 的另一半包含特定于各种处理器模块的选项。对于这些选项,IDA 提供的唯一参考信息是与每个选项有关的注释(如果有的话)。通常,ida.cfg 中特定于处理器的选项规定了 IDA 最初的“文件加载”对话框中 Process Options
部分的默认设置。
处理 ida.cfg 的最后一步是搜索一个名为<IDADIR>/cfg/idauser.cfg 的文件。如果存在1 ,这个文件将作为 ida.cfg 的一个扩展,其中的任何选项都将重写 ida.cfg 中的对应选项。如果不喜欢编辑 ida.cfg ,你应该创建 idauser.cfg ,并在其中添加你想要重写的所有选项。此外,使用 idauser.cfg ,你可以更直接地将定制的选项由一个 IDA 版本迁移到另一个 IDA 版本。例如,使用 idauser.cfg ,每次升级 IDA 后,你不再需要重新编辑 ida.cfg 文件,而只需要将现有的 idauser.cfg 复制到新版的 IDA 中。
1. IDA 并没有自带这个文件。如果希望 IDA 找到这个文件,用户必须自己创建这个文件。
11.1.2 GUI 配置文件:idagui.cfg
GUI 版本的 IDA 的配置选项位于它们自己的文件<IDADIR>/cfg/idagui.cfg 中。这个文件大致分为 3 个部分:默认的 GUI 行为、键盘热键对应关系和 File▶Open 对话框中的文件扩展名配置。本节将讨论其中几个比较重要的选项。有关所有可用选项,请查阅 idagui.cfg 文件,多数情况下,每个选项都有描述其用途的注释。
用户可使用 HELPFILE
选项指定一个次要帮助文件。但是,这里指定的任何文件都不会代替 IDA 的主要帮助文件。这个选项的作用是,为逆向工程任务提供补充信息。如果指定了一个补充帮助文件,按下 CTRL+F1,IDA 将打开这个文件,并在其中搜索与光标所在位置的单词相匹配的主题。如果没有找到相匹配的主题,IDA 将进入这个帮助文件的目录。比方说,除非你依赖自动注释,否则 IDA 不会提供任何与反汇编代码清单中指令助记符有关的帮助信息。如果你正分析一个 x86 二进制文件,你可能希望得到一份有关 x86 指令的文档资料。如果你能够找到一个帮助文件,其中碰巧包含与每条 x86 指令有关的信息2 ,那么,要想获得任何指令的帮助信息,只需按下一个热键即可。关于补充帮助文件,唯一需要注意的是:IDA 仅支持旧版的 WinHelp 帮助文件(.hlp ),不支持将已编译 HTML 帮助文件(.chm )作为次要帮助文件。
2. Pedram Amini 更喜欢 http://pedram.redhive.com/openrce/opcodes.hlp 中提到的 WinHelp32 文件。
说明 微软 Windows Vista 及其后续版本并不支持 32 位 WinHelp 文件,因为这些系统中没有 WinHlp32.exe 文件。欲了解更多信息,请参阅微软知识库文章“917607 ”3 。
3. 参见 http://support.microsoft.com/kb/917607 。
在使用 IDA 时,人们常常提出同一个问题:“我如何使用 IDA 修补二进制文件呢?”简单地说,这个问题的答案是:“你不能修补。”我们在第 14 章中再讨论这个问题的细节。使用 IDA ,你所能做的是修补数据库,以合适的方式修改指令或数据。在我们讨论编写脚本(参见第 15 章)后,你会发现,修改数据库并不是十分困难。但是,如果你对于学习 IDA 的脚本语言不感兴趣,或者缺乏相关的背景知识,那该怎么办呢?别担心,IDA 提供一个数据库修补菜单,默认情况下,IDA 隐藏了这个菜单。 DISPLAY_PATCH_SUBMENU
选项用于显示或隐藏 IDA 的补丁菜单,这个菜单通过 Edit ▶Patch Program 访问。我们将在第 14 章中讨论这个菜单中的选项。
IDA 工作区底部的单行输入框称为 IDA 命令行。你可以用 DISPLAY_COMMAND_LINE
选项控制是否显示该输入框。默认情况下会显示该命令。如果你的屏幕空间紧张并且预计不需要输入单行脚本,那么关闭此功能可帮助你获得少量的 IDA 显示空间。需要注意的是,这个命令行并不允许你执行操作系统命令,就像你在命令提示符后输入命令那样。
idagui.cfg 的热键配置部分用于指定 IDA 操作与热键组合之间的对应关系。热键重新分配可用在许多情况下,包括通过热键执行额外的命令,将默认的热键组合更改为更加易于记忆的热键组合,或者更改某些热键,避免它们与操作系统或终端应用程序(主要用于控制台版本的 IDA )使用的其他热键造成冲突。
这部分几乎列出了 IDA 通过菜单项或工具栏按钮提供的每一个选项。遗憾的是,这里的命令名称与 IDA 的菜单文本并不匹配,因此,你可能需要付出一定的努力,才能将配置文件中的选项与特定的菜单选项对应起来。例如,Jump▶Jump to Problem(跳转▶跳转到问题)命令等同于 idagui.cfg 中的 JumpQ 选项(这恰好与它的热键 CTRL+Q 相匹配)。此外,许多命令带有描述其用途的注释,但许多命令根本就没有任何注释,因此,你必须根据命令在配置文件中的名称,来决定这个命令的作用。有助于你确定与一个配置文件操作对应的菜单项的技巧是在 IDA 的帮助系统中 搜索 该操作。一般而言,通过这种搜索,你就可以找到与这项操作对应的菜单项的说明。
下面是在 idagui.cfg 中分配热键的例子:
"Abort" = 0 // Abort IDA, don't save changes "Quit" = "Alt-X" // Quit to DOS, save changes
第一行代码是 IDA 的 Abort 命令的热键分配,在这里,它并没有分配到热键。不带引号的 0 值表示 IDA 没有给命令分配热键。第二行代码是 IDA 的 Quit
操作的热键分配。热键组合用一个带引号的字符串指定。在 idagui.cfg 中有大量热键分配的例子。
idagui.cfg 的最后一个部分将文件类型说明与它们相关的文件扩展名关联起来,并指定在 File▶Open 对话框的文件类型下拉列表中显示哪些文件类型。配置文件已经描述了大量文件类型,但是,如果你需要经常使用一种配置文件并未描述的文件类型,可能需要编辑文件类型列表,将你的文件类型添加到这个列表中。 FILE_EXTENSIONS
选项描述了 IDA 已知的所有文件关联(file association)。例如,下面的代码行是文件类型关联的一个典型例子。
CLASS_JAVA, "Java Class Files", "*.cla*;*.cls"
这个代码行包括 3 个以逗号分隔的部分:关联的名称( CLASS_JAVA
)、一段说明和一个文件名模式。在文件名模式中可以使用通配符,多个模式则用分号分隔开。另一种文件关联可将几个现有的关联组合到单独一个关联中。例如,下面的代码行将所有名称以 EXE_
开头的关联组合到一个名为 EXE
的关联中。
EXE, "Executable Files", EXE_*
值得注意的是,这里的模式指示符并没有带引号。我们可以定义自己的文件关联,如下所示:
IDA_BOOK, "Ida Book Files", "*.book"
我们可以为关联选择任何名称,只要 IDA 还没有使用这个名称。但是,仅仅将一个新的关联添加到 FILE_EXTENSIONS
列表中,这个关联并不会在 File▶Open 对话框中显示出来。 DEFAULT_FILE_FILTER
选项列出了所有在 File▶Open 对话框中出现的关联的名称。要使新创建的关联生效,还需要将 IDA_BOOK
添加到 DEFAULT_FILE_FILTER
列表中。
与 idauser.cfg 文件一样,idagui.cfg 的最后一行提供一条指令来包含一个名为<IDADIR>/cfg/ idauserg.cfg 的文件。如果不想编辑 idagui.cfg,就需要创建 idauserg.cfg 文件,并将你希望重写的所有选项添加到这个文件中。
11.1.3 控制台配置文件:idatui.cfg
对控制台版本的 IDA 用户而言,与 idagui.cfg 类似的文件为<IDADIR>/cfg/idatui.cfg。这个文件的布局和功能与 idagui.cfg 非常相似。此外,它的热键分配方法也和 idagui.cfg 完全相同。既然这两个文件如此相似,这里我们仅介绍它们之间的差异。
首先, DISPLAY_PATCH_SUBMENU
和 DISPLAY_COMMAND_LINE
这两个选项在控制台版本中无效,因此,idatui.cfg 文件中并不包含这些选项。相对于 GUI 版本中的 File ▶Open 对话框,控制台版本中的对话框要简单得多,因此,idatui.cfg 文件中没有 idagui.cfg 文件所包含的全部文件关联命令。
另一方面,有少数选项 仅对 控制台版本的 IDA 有效。例如,你可以用 NOVICE
选项让 IDA 以入门模式启动,在这种模式中,IDA 禁用了它的一些复杂功能,以降低学习 IDA 的难度。入门模式与完整模式的一个明显不同在于,入门模式几乎不提供任何子窗口。
控制台用户需要更多地依赖于热键。为实现常用热键组合的自动操作,控制台模式的 IDA 提供了键盘宏定义语法。你可以在 idatui.cfg 文件中找到几个宏实例,不过<IDADIR>/cfg/idausert.cfg(控制台版本中与 idauserg.cfg 对应的文件)才是你保存你所创建的宏的理想位置。默认的 idatui.cfg 文件中包含一个样本宏,如下所示(在真正的 idatui.cfg 中,这个宏并没有注释):
➊ MACRO ➋ "Alt-H" // this sample macro jumps to "start" label { "G" 's' 't' 'a' 'r', 't' "Enter" }
宏定义由 MACRO
关键字(➊)引入,后面紧跟这个宏的热键(➋)。宏序列在大括号中指定,它是一个由键名字符串或字符组成的序列,这些字符串或字符可能本身就是热键组合。这个宏使用 ALT+H 激活,它打开通过热键 G 打开的 Jump to Address 对话框,然后在对话框中输入 start 标签,一次一个字符,最后使用 ENTER 键关闭这个对话框。注意,我们不能使用语法“start ”输入符号的名称,因为 IDA 可能会将它当成是热键的名称,因而导致错误。
说明 宏和入门模式对 GUI 版本的 IDA 无效。
最后,关于配置文件选项,需要注意的是,如果 IDA 在解析配置文件时遇到任何错误,它都会立即终止,并显示一条错误消息,尝试描述问题的本质。在这个问题得到修复之前,你无法启动 IDA 。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论