交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为IDA Pro,或简称为IDA。是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器!IDA Pro是一款交互式的,可编程的,可扩展的,多处理器的,交叉Windows或Linux WinCE MacOS平台主机来分析程序, 被公认为最好的花钱可以买到的逆向工程利器。IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。它支持数十种CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。
交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为IDA Pro,或简称为IDA,是总部位于比利时列日市(Liège)的Hex-Rayd公司的一款产品。开发IDA的是一位编程天才,名叫Ilfak Guilfanov。十年前诞生时,IDA还是一个基于控制台的MS-DOS应用程序,这一点很重要,因为它有助于我们理解IDA用户界面的本质。除其他内容外,IDA的非Windows和非GUI版本仍然继续采用源于最初DOS版本的控制台形式的界面。
就其本质而言,IDA是一种递归下降反汇编器。但是,为了提高递归下降过程的效率,IDA的开发者付出了巨大的努力,来为这个过程开发逻辑。为了克服递归下降的一个最大的缺点,IDA在区分数据与代码的同时,还设法确定这些数据的类型。虽然你在IDA中看到的是汇编语言形式的代码,但IDA的主要目标之一,在于呈现尽可能接近源代码的代码。此外,IDA不仅使用数据类型信息,而且通过派生的变量和函数名称来尽其所能地注释生成的反汇编代码。这些注释将原始十六进制代码的数量减到最少,并显著增加了向用户提供的符号化信息的数量。
IDA PRO简称IDA(Interactive Disassembler) ,是一个世界顶级的交互式反汇编工具,有两种可用版本。标准版(Standard)支持二十多种处理器。高级版(Advanced)支持50多种处理器。
IDA PRO不存在任何注册机、注册码或破解版,除了测试版和一个5.0 的免费版外,网络上能下载的都是包含用户许可证的正版,因为所有的安装包都是OEM版,所以IDA官网不提供软件下载,并且软件也没有注册的选项(可以正常使用,但这也是一种盗版侵权的行为)。
IDA是Hex-Rays公司的旗舰产品。因此,他们对于未经授权就使用IDA的做法深恶痛绝。过去,该公司发现,盗版IDA的发布与公司销售量的下滑有着直接的因果关系。为此,IDA的前发行公司DataRrscus甚至将盗版者的姓名张贴在他的“耻辱堂”(Hall of Shame)中。为打击盗版,IDA采用了几项反盗版技术,并实施了许可限制。
用户需要了解的第一种技术是:每一份IDA都带有水印,以将它与购买者一对一地对应起来。如果一份IDA出现在盗版软件站中,Hex-Rays就能够通过水印追踪到购买者,并将其列入销售黑名单。我们常常可以在Hex-Rays的IDA支持论坛上发现有关IDA 的“泄露”版本的讨论。
为实施许可策略,IDA采用的另一种技术,是扫描在局域网中运行的其他IDA程序。例如,Windows版本的IDA启动后,它会在端口23945上广播一个UDP包,并等待响应,看相同子网中是否有其他使用相同许可证密钥的IDA实例在运行。然后,IDA会将得到的响应数量与使用该许可证的用户数量进行比较,如果发现网络中存在过多的IDA实例,IDA会拒绝启动,但是要注意,用户可以在一台计算机上使用相同的许可证运行多个IDA实例。
IDA实施许可策略的最后一种方法,是使用密钥文件将每一名购买者与产品联系起来。在启动时,IDA会搜索一个有效的ida.key文件。如果无法定位有效地密钥文件,IDA就会立即关闭。密钥文件还用于用户升级IDA的资格。基本上,ida.key文件就像是用户的购买收据,要想在将来获得升级资格,用户必须保管好这个文件。
Hex-Rays为希望了解IDA基本功能的用户提供了一个功能有限的免费版本,但是,该免费版本并不是最新版本的功能。该免费版本为IDA4.9的简化版,除免费版本外,Hex-Rays还提供当前版本的功能有限的演示版。如果你在讨论逆向工程的地方发现的对于IDA的称赞尚不足以吸引你购买IDA ,那么花一些时间熟悉免费版或演示版的功能,将有助于你了解IDA的强大功能及周到服务,促使你购买这一产品。
从功能上看,IDA Pro共有两个版本:标准版和高级版。这两个版本的主要区别,在于他们支持反汇编的处理器体系结构数量不同。快速浏览一下它们所支持的处理器体系结构列表,即可发现:标准版支持30多种处理器,而高级版则支持50多种处理器。高级版支持的其他体系结构包括Itanium、AMD64、MIPS、PPC和SPARC等。
IDA有两种许可证。一种是已命名许可证,与某一特定的用户有关,可安装到该用户使用的任意多个计算机上。另一种是计算机许可证,与某一台特定的计算机有关,任何使用该计算机的用户都可以使用这种许可证,但一次只能允许一名用户使用该许可证。注意,虽然已命名许可证可以让你在任意多台计算机上安装IDA软件,但是只有你才能运行这些IDA软件。而且,对于单个许可证,在某一给定的时刻,IDA只能在其中一台计算机上运行。
说明 与许多其他专有软件的许可证不同,IDA的许可证特别赋予了用户对IDA进行逆向工程的权利。
升级IDA
发布新版本的IDA后,Hex-RAYS通常会在IDA网站上公布升级链接和升级过程中的要求,该要求一般包括升级所适用的产品购买日期。一般情况下,在升级过程中,用户必须向Aex-Rays提交ida.key文件。然后,Hex-Rays会验证用户的密钥,并提供如何获得升级版本的详细信息。如果你发现你的IDA版本过低,没有升级资格,请记得利用Hex-Rays向过期的用户提供的折扣升级价格。
如果不小心丢失密钥文件,未授权用户可能会假冒你提出升级请求,导致你无法升级IDA.
最后,强烈建议在升级IDA时备份现有的IDA版本,或将升级版本安装到一个完全不同的目录,以避免丢失你修改的任何配置文件。为了恢复你之前所做的任何修改,你可能需要编辑升级版本中的相应文件。同样,你还需要重新编译或以替他形式获得新版的IDA 定制插件。
作为一名IDA用户,你可能想知道,如果遇到与IDA有关的问题,该从什么地方需求帮助。如果我们做的还不错的话,本文也许能够解决用户遇到的大多数问题。如果你需要额外的帮助,请参考下面一些常用的资源。
正式的帮助文档。IDA确实提供了Windows风格的帮助文档,但是,该文档主要介绍IDA的用户界面和脚本子系统,它对于我们了解IDA,SDK(软件开发工具包),以及解决类似于“我该如何处理.....”的问题并没有多大帮助。
Hex-Rays的支持页面和论坛。Hex-Rayd运行着一个支持页面,提供各种与IDA有关的资源的链接,包括针对得到许可证的用户的在线论坛。用户会发现,Ilfak经常访问这些论坛,并亲自解答问题。用户可以通过这些论坛获得SDK方面的非正式支持,因为在这里,有许多经验丰富的IDA用户乐于根据他们自己的经验为大家提供帮助。
有关如何使用SDK的问题,人们常常会告诉你“阅读包含文件”。但是,购买IDA产品,并不能获得SDK方面的正式支持。不过,Hex-Rays倒是提供一个年度支持计划,每年收费10000美元。要想了解SDK,Steve Micalle的著作IDA PLUG-IN WRITING IN C/C++是一个非常有用的资源。
Openree.。openree是一个活跃的逆向工程社区,其中包含大量介绍IDA应用的文章,以及一些用户论坛。与Hex-Rays网站上的论坛类似,Openree,org也吸引了许多经验丰富的IDA用户,他们常在论坛上与其他用户彼此交流、分享经验,也许能帮助你解决在使用IDA时遇到的问题。
RCE论坛。逆向代码工程(RCE)论坛中包含大量与使用IDA Pro有关的帖子。这个论坛的内容非常广泛,其主体不仅涉及如何使用IDA Pro,而且涵盖了许多用于对二进制文件进行逆向工程的工具和技巧。
IDA Palace。IDA Palace是一个专门提供IDA相关资源的网站。在这网站上,访问者可以找到大量介绍如何使用IDA的文章的链接,以及用于扩展IDA功能的脚本和插件。
Ilfak的博客。Ilfak的博客中包含许多详细介绍IDA用法的文章,可帮助用户解决通用反汇编、调试及恶意软件分析等各种问题。
从收到崭新的IDA光盘的兴奋中平静下来后,开始安装IDA吧。在打开光盘后,你会看到一下很多内容,这里的EXE文件(ida52.exe)是Windows安装文件。OSX和Linux目录分别包含针对OS X和Linux系统的IDA安装程序的tar压缩文件gzip)。Sdk目录包括IDA SDK,还有他几个实用工具。
Windows
在Windows系统上安装IDA非常简单。启动IDA的Windows安装程序后,你会看到几个对话框,其中只有一个对话框需要你操作。你可以在这个对话框中知道IDA的安装目录,或接受安装程序默认的安装目录。在IDA目录中,你将发现密钥文件ida.key和下列IDA 可执行文件。
Idag.exe: IDA的Window GUI版本。
Idaw.exe: IDA的Iindows文本模式版本。
OSX和Linux
要在OSX或Linux系统上安装IDA,首先必须用gunzip和untar程序解压相应的压缩文件。在Linux系统中,解压命令为:
# tar –xvzf linux52adv.gz
在OS X系统中,解压命令为:
# tar –xvzf Ogx52adv.gz
无论是哪一种情况,你将得到一个名为idaavd或idastd的顶层目录(取决于你购买的版本)。完成IDA的解压后,需要将密钥文件有Windows安装目录复制到新的IDA目录中。另外,你可以创建一个名为﹩HOME/.idapro的目录,并将密钥文件复制到新目录中。
在OS X和Linux系统中,可执行文件的名称均为idal,而且,它们仅提供类似于idaw.exe的文本模式的界面。IDA的Linux版本需要libstdc++.so5才能运行,因此必须确保系统上安装有libstdc++.so5。
在可是使用IDA之前,你不一定需要熟悉IDA安装目录的结构。但是,既然现在讨论的主题是安装IDA ,还是初步了解一下安装目录的基本结构。在本书的后续章节,我们将接受IDA的高级功能,到那时,了解IDA安装目录的结构将变得更加重要。下面简要介绍IDA安装目录中的各个子目录。
Cfg。Cfg目录包含各种配置文件,包括基本IDA配置文件ida,cfg、GUI配置文件idagui.cfg以及文本模式用户界面配置文件idatui,cfg。我们将在后面的章节介绍IDA的一些更加重要的配置功能。
Idc。Idc目录包含IDA的内置脚本语言IDC所需的核心文件。我们将在后面详细介绍如何使用IDC便携脚本。
Ids。Ids目录中包含一些符号文件(IDA语法中的IDS文件),这些文件 用于描述可被加载在到IDA的二进制文件引用的共享库的内容。这些DIS文件包含摘要信息,其中列出了有某一个指定库导出的所有项目。这些项目包含描述某个函数所需的参数类型和数量的信息、函数的返回类型(如果有)以及与该函数的调用约定有关的信息。
Ioaders。Ioaders目录包含在文件加载过程中用于识别和解析PE或ELF等一直文件格式的IDA扩展。
Procs。Procs目录包含已安装的IDA版本所支持的处理器模块。处理器模块为IDA提供机器语言-汇编语言转换功能,并负责生成在IDA用户界面中显示的汇编语言。
Sig。Sig目录包含IDA在各种模式匹配操作中利用的现有代码的签名。通过模式匹配,IDA能够将代码序列确定为一直的库代码,从而节省大量的分析时间。这些签名有IDA 的“快速的库识别和鉴定技术”(FLIRT)生成,这一内容将在第12章详细介绍。
Til。til目录包含一些类型库信息,DIA通过这些信息记录特定于各种编译器库的数据结构的布局。我们讲在第13章详细介绍如何定制IDA类型库。
IDA从MS-DOS继承的特性至今仍然十分明显。无论使用哪一种界面(文本界面或GUI),IDA都大量用到热键。虽然这并非坏事,但是,如果你想当然地认为自己正使用文本输入模式,并且发现几乎每一次点击都会导致相当意外的后果,那就说明IDA执行了某种热键操作。例如,在使用GUI时,如果你定位光标以进行修改,并且希望你输入的内容全部出现在光标位置,这是就可能会出现令人意外的情况(IDA可不像字处理程序)。
从数据输入的角度看,IDA通过对话框接受所有输入。因此,如果你希望在IDA中输入任何数据,则必须调出输入数据的对话框。
最后,需要记住的是:IDA不提供撤销功能,因为你根本找不到。同样,你也无法找到命令历史记录列表,以查明你刚刚执行的操作。
如果你是一名非Windows用户,并且希望使用IDA的GUI界面,基本上,你有两种选择。Linux用户可以考虑使用WINE。据称,IDA可以在WINE下成功运行。就第二个选择,使用主机操作系统只的虚拟软件,在Windows虚拟机中运行IDA。无论采用哪一种选项,都需要运行IDA的Windows版本。因此,如果选择使用IDA的内置调试器进行本地调试(下对于远程调试),你只能调试Windows可执行文件。