- 献词
- 致谢
- 前言
- 第一部分 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 交叉引用
10.1 控制台模式 IDA
IDA 所有控制台版本的核心是一个叫做 TVision 的 Borland 控制台 I/O 库,它已经被移植到各种平台上,包括 Windows、Linux 和 Mac OS X 等。Hex-Rays 在它的 IDA 下载页面1 上向付过费的 IDA 用户提供当前 TVision 的源代码。
1. 参见 http://www.hex-rays.com/idapro/idadown.htm 。
在各种平台上使用同一个库可以使所有控制台版本的用户界面保持一致。但是,在由一个平台迁移到另一个平台时,还要注意一些问题,如鼠标支持、尺寸调整以及 IDA 应用程序使用热键的能力。在下面针对不同平台的几节内容中,我们将讨论其中一些问题及其解决办法。
10.1.1 控制台模式的共同特性
顾名思义, 控制台模式 (console mode )是指基于文本的 IDA 版本全都在一个终端或某种 shell 中运行。这些控制台对于尺寸调整和鼠标的支持各不相同,因而导致了各种你需要了解的限制。具体存在哪些限制因你使用的平台和终端程序而异。
控制台用户界面由窗口上方的菜单栏和窗口下方的常用操作栏组成,菜单栏显示菜单选项和状态,而操作栏则与基于文本的工具栏类似。控制台使用热键或通过鼠标(如果支持)进行操作。GUI 版本中的几乎每一个命令在控制台版本中都有对应的操作。同时,控制台版本还保留了 GUI 版本的热键。
IDA 显示窗口位于上方的菜单栏和下方的命令栏之间。但是,无论你使用什么终端程序,你都面临着一个同样的限制:如果屏幕仅限于显示 80 ×25 个字符,并且不显示图形时,你并没有多少显示空间可供使用。因此,IDA 的控制台版本通常在默认情况下打开两个显示窗口:反汇编窗口和消息窗口。为了更接近于 GUI 版本中的标签显示窗口,IDA 使用 TVision 库的重叠窗口功能来显示文本窗口,并使用热键 F6(代替窗口标题标签)在打开的窗口之间切换。每个窗口都按顺序进行编号,窗口 ID 位于窗口的左上角。
如果你的控制台支持鼠标,你就可以通过单击并拖动显示窗口的右下角来调整窗口的大小。要移动显示窗口,可以单击并拖动窗口的上边框。如果控制台不支持鼠标,你可以使用 Windows ▶ Resize ▶Move(CTRL+F5)命令,然后使用箭头键移动窗口的位置,或在按下 SHIFT 键的同时,使用箭头键调整活动窗口的大小。如果你的终端程序可以使用鼠标调整大小,IDA 将接受新的终端尺寸,并相应地放大(或缩小),以适应新的尺寸。
由于不具备图形功能,集成反汇编图形模式将无法使用,反汇编代码清单窗口左侧也不会显示控制流箭头。但是,控制台版本仍然可以打开 GUI 版本中的所有子窗口。和在 GUI 版本中一样,绝大多数的子窗口都可以通过 View ▶Open Subviews 菜单访问。一个主要的不同在于,十六进制窗口并不作为一个单独的子窗口出现。你可以使用 Options ▶Dump/Normal View(CTRL+F4)命令在反汇编窗口与十六进制窗口之间切换。要同时打开一个反汇编窗口和一个十六进制窗口,你必须打开另一个反汇编窗口(View ▶Open Subviews ▶Disassembly),并将其切换到十六进制形式。遗憾的是,你没有办法让新的十六进制窗口与现有的反汇编窗口同步。
如果控制台支持鼠标,浏览反汇编代码清单的方法基本与 GUI 版本类似:双击任何名称,反汇编窗口将跳转到对应的地址。另外,将光标放在一个名称上并按下 ENTER 键,反汇编窗口将跳转到对应的已命名位置(在 GUI 版本中,这项操作的功能相同)。如果将光标放在一个栈变量名称上并按下 ENTER 键,将打开相关函数的详细栈帧视图。如果控制台不支持鼠标,使用菜单导航的 ALT+x 方法同样可以实现控制台的许多其他功能,这里的 x 是当前屏幕上突出显示的一个字符。
10.1.2 Windows 控制台
Windows cmd.exe(在 Windows 9x 系列中为 command.exe )终端并不十分灵活,但它能够相当完美地支持 IDA 的控制台版本。Windows 控制台版本的 IDA 叫做 idaw.exe ,而 GUI 版本的 IDA 名为 idag.exe ,对应版本的 64 位二进制文件(由高级版本的 IDA 提供)分别为 idaw64.exe 和 idag64.exe 。
为了使在 Windows 上运行的 IDA 支持鼠标,你必须在你运行的终端上禁用 QuickEdit 模式。要将 QuickEdit 模式配置为终端的一个属性,右击终端标题栏并选择 Properties,然后在 Options 选项卡上取消选中 QuickEdit mode。你必须在启动 IDA 之前禁用 QuickEdit 模式,因为在 IDA 运行时,这项操作并不能立即生效。
与在 X Windows 下运行的 Linux 终端不同,cmd.exe 不能使用鼠标来扩展从而放大窗口。只有在 Windows 中,IDA 的控制台版本才提供 Window ▶Set Video Mode (窗口▶设置视频模式)菜单选项,可在 6 个固定的终端大小之间切换 cmd.exe,最大的尺寸为 255×100。
虽然反汇编窗口不显示图形,但你仍然可以使用 IDA 的外部绘图模式。选择 View ▶Graphs 菜单,IDA 将启动配置图查看器(如 qwingraph)显示生成的图形。在 Windows 版本的 IDA 中,你可以一次打开几个图形,并在打开图形时继续使用 IDA
10.1.3 Linux 控制台
Linux 版本的 IDA 叫做 idal(或 idal64 ——用于分析 64 位二进制文件)。在 IDA 6.0 之前,Linux 和 OS X 控制台版本是 IDA 的标准组件。因此,在你将这些控制台版本复制到 Linux 或 OS X 平台时,你还必须复制 IDA 密钥文件(ida.key )以便控制台版本能够正常运行。需要注意的是,这要求你在 Windows 机器上至少安装一次 IDA ,即使你并不想使用 Windows 版本的 IDA 。至于 Unix 系统,你需要将密钥文件复制到$HOME/.idapro/ida.key。如果你没有创建这个目录,当你第一次启动 IDA 时,IDA 会自动创建 IDA 个人设置目录($HOME/.idapro)。
安装 IDA 6. x 的过程非常简单。因为你购买的 IDA 6. x 针对的是特定的平台,因此,要安装该版本,你只需安装 GUI 版本、控制台版本,然后将 IDA 密钥文件复制到适当位置即可。
在 Linux 版本中,基本的导航与 Windows 控制台版本中类似。本节讨论几个有关 Linux 版本的问题。通常,由于用户对 Linux 版本的喜好各不相同,他们选择的 Linux 终端程序也各不相同。IDA 包含一个名为 tvtuning.txt 的文件,说明如何配置各种类型的终端,包括远程 Windows 终端客户端,如 SecureCRT 和 PuTTY 。
使用 Linux 终端程序时你面临的一个最大挑战在于如何将所有热键原封不动地保留给 IDA 使用,而不致被终端程序占用。例如,热键 ALT+F 打开的是 IDA 的 File 菜单,还是控制台的 File 菜单呢?有两种方法可以解决这个问题,一是使用一个热键与 IDA 无重叠的终端程序,二是编辑 IDA 的配置文件,重新设置与命令对应的热键,并使用终端没有使用的热键。如果选择重新设置热键,可能需要在使用 IDA 的每一台机器上更新热键设置,以免造成混淆。同时,你会发现,你很难与使用默认设置的其他 IDA 用户交互。
如果选择使用标准的 Linux 文本显示,你的 IDA 控制台将采用固定大小,鼠标支持将取决于你是否使用了 GPM(Linux 控制台鼠标服务器)。如果你没有使用 GPM 提供鼠标支持,在启动 IDA 时,你需要为 TVision 指定 noGPM 选项,如下所示:
# TVOPT=noGPM ./idal [file to disassemble]
控制台模式下的颜色选择相当有限,需要调整颜色设置(Options ▶Colors ),以确保所有文本都正常显示,不会与背景融合。控制台模式提供 4 种预定义的颜色模板,还有各种选项,用于定制反汇编窗口各个部分所使用的颜色(共 16 种)。
如果你正运行 X,那么你可能会运行 KDE 的 konsole
、Gnome 的 gnome-terminal
、 xterm
或其他一些终端。除 xterm
外,多数终端都提供它们自己的菜单和相关联的热键,这些热键可能与 IDA 的热键重叠。因此,使用 xterm
运行 IDA 也是一个不错的选择,虽然它不一定是视觉效果最突出的终端。KDE 的 konsole
是我们首选的 Linux 控制台,因为它提供最整洁的外观、最少的热键冲突以及最流畅的鼠标性能。
为了解决与在各种 X Windows 控制台中使用键盘和鼠标的问题,Jeremy Cooper 为 TVision 库开发了一个本地 X11 端口2 。使用这个改良后的 TVision,你就可以在它的 X 窗口中运行 IDA ,而不必占用整个控制台。编译 Cooper 的 TVision 端口会在替代 libtvision.so ( idal
使用的 TVision 共享库)时造成异常。安装新库后,你可能会收到一条错误消息,称在你尝试运行 IDA 时,有一种 VGA 字体无法加载。如果出现这种情况,你需要安装该 VGA 字体,并告知 X 服务器该字体的位置。请从 http://gilesorr.com/bashprompt/xfonts/ 下载一种合适的 VGA 字体(下载 vga 和 sabvga )。使用本地 X11 端口的另一个特点是:你可以将 X11 窗口转发到另一台机器上。因此,你可以在 Linux 上运行 IDA ,但将 X11 窗口转发到(当然,需要通过 ssh
)一台 Mac 机器上。
2. 参见 http://simon.baymoo.org/universe/ida/tvision/ 。
使用 Hex-Rays 提供的 TVision 库远程访问基于 Linux 的 IDA 时,建议你配置终端软件模拟一个 xterm(请参考 tvtuning.txt 文件和终端模拟器的文档资料,了解更多信息),然后根据 tvtuning.txt 文件中的说明启动 IDA 。例如,你必须指定 TVOPT=xtrack
,以便在将 SecureCRT 作为终端模拟器时,IDA 能够支持鼠标。
当然,也可以导出 TVOPT
设置,免得在每次启动 IDA 时都需要指定这些设置。有关 TVision 选项的全面介绍,请参考 TVision 源代码中的 liunx.cpp 文件。
只有在窗口环境中运行 IDA ,并且已配置 ida.cfg 中的 GRAPH_VISUALIZER
变量指向适当的图形呈现程序3 的情况下,才可以在 Linux 控制台版本中查看外部图形。IDA 6.0 之前的版本只能使用 GDL 生成图形。你可以安装一个 GDL 查看器(如 aiSee4 )并通过编辑 IDA 的主配置文件<IDADIR>/cfg/ida.cfg 来配置 IDA 启动这个新的应用程序。配置选项 GRAPH_VISUALIZER
指定用于查看 IDA 的 GDL 图形(全部为遗留图形)的命令。默认的设置如下所示:
3. 参考 9.2 节。
4. GDL 查看器 aiSee 可在许多平台上运行,并可免费用于非商业用途,其下载地址为 http://www.aisee.de/ 。
GRAPH_VISUALIZER = "qwingraph.exe -remove -timelimit 10"
remove
选项要求 qwingraph
删除输入文件,在你显示临时文件时,将会用到这个选项。 timelimit
选项指定生成一幅完美的图形所用的时间(秒)。如果在这个时间内无法生成完美的图形, qwingraph
将切换到“快速而丑陋的”5 布局算法。从 IDA 6.0 开始, GRAPH_VISUALIZER
选项包含在一个条件块内,用于为 Windows 和非 Windows 平台提供单独的设置。如果你在非 Windows 平台上编辑 ida.cfg 文件,请确保编辑该文件的正确部分。如果你已安装 aiSee 之类的 GDL 查看器,则需要编辑 GRAPH_VISUALIZER
,使它指向你选择的查看器。使用 aiSee 查看器的相关设置如下:
5. 参见 wingraph32
或者 qwingraph
源代码中的 timelm.c 文件。
GRAPH_VISUALIZER = "/usr/local/bin/aisee"
需要注意的是,最好指定 GDL 查看器的完整路径,以方便 IDA 查找。最后,由于 qwingraph 为开源软件,旧版 IDA 用户可从 Hex-Rays 免费下载 qwingraph 的源代码(参见第 9 章),构建该软件,然后将 qwingraph 整合到 IDA 安装中。
10.1.4 OS X 控制台
OS X 的 IDA 控制台版本的名称与 Linux 版本相似(idal 和 idal64 )。和 Linux 及 Windows 控制台版本一样,OS X 版本也依靠 TVision 库支持它的控制台输入/输出。
由于 Mac 键盘与 PC 键盘的布局不同,这给运行 Mac 版本的 IDA 造成了一些挑战。其主要原因在于:就应用程序菜单而言,Mac 的 OPTION/ALT 键与 PC 的 ALT 键的作用并不相同。
鉴于此,要运行 IDA ,最好使用 Mac 的 Terminal 应用程序。在使用 Terminal 运行 IDA 时,一定要将 OPTION 键配置成 IDA 中的 ALT 键。这样,你就可以通过键盘使用 IDA 中与 ALT 键有关的快捷键,如 IDA 的所有主菜单(例如,用 ALT+F 访问 File 菜单)。如果你没有选择这个选项,就必须用 ESC 键代替 ALT 键。因此,按下 ESC 和 F 键将打开 File 菜单。由于在 IDA 中 ESC 具有后退或关闭窗口的功能,我们不推荐使用这种方法。终端检查器对话框如图 10-1 所示,在 Terminal 处于活动状态时,通过 Terminal ▶Preferences 即可打开这个对话框。选择 Use option key as meta key (将 option 键作为元键)复选框,OPTION 键将作为 ALT 键使用。
图 10-1 Mac OS X 终端键盘设置对话框
Terminal 的一个潜在替代者是 iTERM6 ,它不但可实现 OPTION 键的 ALT 键功能,而且提供鼠标支持。许多开发者喜欢使用的另一种终端为 gnome 终端,它已经被移植7 到 OS X 的 X11 上。由于使用这种终端需要安装 XCODE 和 X11,对此我们不做过多讨论。对多数用户而言,使用默认的 Terminal 或 iTERM 就已经足够了。
6. 参见 http://iterm.sourceforge.net/ 。
7. 参见 http://www.macports.org/ 。
在 OS X 上运行 IDA 的另一种方法是安装 X11(在 OS X 安装磁盘的一个可选包中)和 Jeremy Cooper 改良的 TVision 库(用于 OS X 的 libtvision.dylib 文件),将 IDA 作为本地 X11 应用程序运行。你可能希望将/usr/X11R6/bin 添加到系统的 PAT H 中(编辑/etc/profile 中的 PAT H),以便于访问与 X11 有关的库。
在这种配置中,IDA 可能会从一个 xterm 中启动,它将在自己的窗口中运行,并支持鼠标的全部功能。但是,与 OPTION/ALT 键有关的问题仍然存在,因为 X11 把这个键视为 Mode_switch,因而无法将其传递给 IDA 。不过,通过 X11 可使用 xmodmap 实用工具重新设置热键。其中一个解决办法是在你的根目录下创建(或编辑)一个名为.Xmodmap 的文件(如/Users/idabook/.Xmodmap ),其中包含以下命令:
clear Mod1 keycode 66 = Alt_L keycode 69 = Alt_R add Mod1 = Alt_L add Mod1 = Alt_R
默认的 X11 启动脚本(/etc/X11/xinit/xinitrc )中包含启动 X11 时读取.Xmodmap 的命令。如果你已经创建了自己的.xinitrc 文件,它将覆盖默认的 xinitrc 文件,你必须确保其中包含一个与下面类似的命令,否则,.Xmodmap 文件将无法运行。
➊ xmodmap $HOME/.Xmodmap
最后,你需要修改 X11 的默认设置,以防止系统重写已修改的热键设置。X11 Preferences 对话框如图 10-2 所示。
图 10-2 OS X 上的 X11 Preferences 对话框
为了防止系统重写键盘设置,必须取消中间的选项:Follow system keyboard layout (遵照系统键盘布局)。取消这个选项后,重新启动 X11,你修改的键盘设置将会生效,然后,你就可以使用 ALT 键访问 IDA 的菜单。你可以使用 xmodmap
打印当前的键盘修饰符列表,验证 X11 是否能够识别 ALT 键,如下所示:
idabook:~ idabook$ xmodmap xmodmap: up to 2 keys per modifier, (keycodes in parentheses): shift Shift_L (0x40), Shift_R (0x44) lock Caps_Lock (0x41) control Control_L (0x43), Control_R (0x46) ➋ mod1 Alt_L (0x42), Alt_R (0x45) mod2 Meta_L (0x3f) mod3 mod4 mod5
如果 mod1
没有列出 ALT_L
和 ALT_R
,如➋处所示,则表示你的键盘设置并未生效。这时,需要重新运行➊处列出的 xmodmap
命令。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论