Hex-rays 开发的 IDA 久负盛名,在安全圈内可以说人尽皆知。即便你没有用过 IDA 也一定见过它,足以见 IDA 的江湖地位之高。今年为庆祝 IDA 30 周年,Hex-rays 为全系列产品提供 7 折优惠,土豪公司和土豪个人都可以在优惠期(5 月 24 日到 6 月 13 日)截止前出手囤货。
IDA 最贵的单产品报价接近 4000 美元,折合人民币超过 2.5 万元,价格不菲。以 Windows 平台,IDA Pro 的新售 Floating 许可证为例,程序加上 7 种体系结构的反编译器一共需要 30427 美元,折合人民币接近 20 万元。
IDA 有多种类型的许可证可以选择,目前中国区也有销售代理:
创世者
创造 IDA 的 Ilfak Guilfanov 于 1966 年出生在俄罗斯,21 岁时在莫斯科国立大学获得学士学位,后迁居比利时。
他是 IDA Pro 与 Hex-Rays Decompiler 的作者。根据 BlackHat 的介绍,他现在仍然保持每天参与软件设计与编程,以防止自己脱离技术。
IDA 来了
回到 IDA 草创的 1900 年代,世界上最受欢迎的操作系统还是 DOS、处理器还是 8086 的时代。那时最受欢迎的、也最为昂贵的反汇编工具是 V Communications 开发的 Sourcer。不仅使用很麻烦,而且如果是大文件的话也无法完全放在内存中,而那个时代内存十分紧俏。
实际上并没有真正的反汇编工具提供逆向工程所需的功能,例如自定义函数名称、添加注释等,那个年代多半都是通过在文本编辑器中实现的这些功能。
Ilfak Guilfanov 在 1990 年的秋天萌生了开发 IDA 的想法,在 1991 年 1 月写下了第一行代码。最初的理想很宏大,想要面向多体系架构、使得程序分析更加智能等,但这些都没有在最开始就被实现。
总共花费了六个月的时间,在 1991 年 5 月 21 日,IDA 0.1 开发完成。这时的 IDA 只支持 x86 指令架构,但也实现了最基本的功能。
那时的 IDA 还是控制台版本的,离 GUI 版本还有很遥远的路要走。
1991 年 5 月 22 日,微软发布了 Windows 3.0。同年 9 月,Linus Torvalds 对外发布 Linux。而 1991 年 7 月,Ilfak Guilfanov 就暂停了 IDA 的开发工作。他认为随着时代的发展,汇编语言的使用场景越来越少了,反汇编这件事变得越来越不重要了。幸而后续他又开始了 IDA 的开发工作,并未放弃这个襁褓中的婴儿。
1993 年 9 月 16 日,IDA 完成了 1.8 版本的开发,使用 Turbo Vision 代替了自定义的界面。不过直到此时为止,IDA 仍然是 Ilfak Guilfanov 的一个自己开发的玩具。
从 1994 年 IDA 2.0 开始,Ilfak Guilfanov 开始通过 FTP 和 BBS 论坛进行推广和分发。2.0 版本为 IDA 引入了 IDC 脚本,开始支持更多的处理器类型(如 8080、8085、Z80 等)。因为 Windows 的日益普及,IDA 开始支持适用于 16 位 Windows 操作系统和 OS/2 操作系统的 NE 文件格式,此时 IDA 已经支持八种文件格式。
1994 年,开发 dcc 反编译器的 Cristina Cifuentes 发表了关于“逆向编译技术”的论文。
1995 年 8 月 15 日,微软正式发布了划时代 Windows 95 操作系统。
1996 年,IDA 来到了 3.6 版本。在商业上,DataRescue开始在欧洲销售和推广 IDA、CSO开始在北美销售和推广 IDA。彼时的 IDA 售价为几十美元,Ilfak Guilfanov 也加入了 DataRescue 公司并移居比利时。这一版本,IDA 带来了 FLIRT 标准运行时库识别的功能,同时也在 Windows 95 上提供了 Win32 控制台版的 IDA。
时间转眼来到了 1999 年,在开发了近十年后的 3.84 版本开始支持了插件。同年 9 月,发布了 IDA 4.0 版本。此时才有第一个 GUI 版本的 Windows 程序,也首次确定了经典的 IDA 图标。
千禧年,IDA 4.10 加入了参数识别和函数跟踪的功能。
2001 年,IDA 4.17 在 3 月发布,引入了图形化的流程图。同年,IDA 首次开始了微码的实验。
在那一年,IDA Pro 入围了 PC 年度技术大奖,但是当年惜败给了微软的 Visual Studio .NET。
2002 年 4 月,开始开发 Boomerang 反编译器。6 月,发布 Desquirr 反编译插件。
2003 年 1 月,用户开发了 Windows PE 程序调试插件(Idbg)。3 月,在 IDA 4.5 中就集成了调试器。
2003 年 5 月,在真实的木马上初试反编译的威力。
2003 年 10 月,IDA 4.6 中支持了 AMD 64 的反汇编,IDA 正式迈入 64 位时代。
2004 年 8 月,IDA 4.7 正式支持了 Linux 的控制台版本,IDA 开始提供横跨两大平台的能力。与此同时,该版本支持了远程跨平台调试。IDAPyhton0.5.0 于同年问世。
2005 年 3 月,IDA 4.8 的远程调试也开始支持 64 位。2006 年 3 月, IDA 5.0 内置了图形视图。
此前为 IDA 发展做出巨大贡献的 Pierre 决定在 2007 年退出,由 Ilfak Guilfanov 继续开发。同年发布的 IDA 5.1 开始支持 Intel Mac OS X 调试器,为支持 Mac 系统做铺垫。同年开放了反编译的 SDK ,还在 8 月 8 日上线了官网(www.hex-rays.com)。
2008 年年初,由 Hex-Rays SA 接手了 IDA 的开发工作,从此开发驶入快车道,开发工作不再捉襟见肘。移动浪潮也正式来临,在 IDA 5.3 版本中正式支持了 iPhone 和 Symbian 的调试与多线程调试。IDAPython 在这一年也正式进入 1.0 时代。
2009 年,IDA 接连发布 5.4、5.5、5.6 三个版本。确定了 IDA 的经典布局模式,左侧函数列表,右侧反汇编窗口。增加了 Bochs、GDB、WinDbg、64 位 Linux、64 位 Mac、ARM Linux 的调试器支持,所支持的平台越来越广泛。
2010 年,IDA 在 5.7 版本支持了 ARM 架构的反编译。在 6.0 版本中,使用 Qt 重写了适用于 Windows、Linux 和 Mac 三大平台的 GUI 版本。自此开始,IDA 完整支持三大主流平台。
2011 年,IDA 赏金计划启动,研究人员可为程序提交 Bug。目前,IDA 的赏金计划将会为确定的安全漏洞支付 3000 美元的赏金。
2011 年年底,ARM 正式发布首款支持 64 位指令集的处理器架构 ARMv8。2012 年,IDA 6.3 引入源码级调试。2013 年,IDA 6.4 支持 ARM 64 反汇编。
2014 年,IDA 6.6 正式支持 x64 反编译、IDA 6.7 为反编译器 SDK 开放 Python 接口。
2015 年,IDA 6.9 正式支持 ARM 64 反编译、ARM 64 安卓调试器。
2016 年,IDA 6.95 引入 PPC 反编译器,同时使用苹果官方 Apple debugserver 支持 iPhone 调试器。
2017 年,IDA 7.0 宣布支持全平台的 64 位可执行文件分析。
2018 年,在 IDA 7.1 版本开放反编译器微码 API,在 IDA 7.2 版本宣布 Lumina函数库。
2019 年,IDA 7.3 支持 PPC64 反编译,IDA 7.4 支持 Pyhton3。
2020 年,IDA 7.5 修订了视图窗口并且引入了 MIPS 反编译器。
2020 年底,苹果发布了使用 ARM 架构 M1 芯片的 MacBook。2021 年,IDA 7.6 发布,开始支持 ARM64 macOS。
盗版之殇
IDA 饱受盗版的困扰,仅在 2006 年绘制的盗版地图就显示了全世界盗版 IDA 使用的泛滥。
每一份 IDA 都带有水印,通过水印可以将软件与购买者对应起来。如果一份盗版 IDA 出现在盗版软件站点中,Hex-Rays 就能够通过水印追踪到购买者,并将其列入销售黑名单。IDA 的前发行公司 DataRescue 甚至有一个盗版者的“耻辱堂”,对外公开所有这些盗版者的信息并予以禁售。
插件大赛
IDA 通过开放各种接口来提高其扩展性,通过“可编程能力”的插件赋能 IDA 越来越好。
Hex-Rays 自从 2009 年开始举办插件大赛,到现在已经走过了 12 个年头。所有 IDA 许可证的持有者都可以参赛,插件大赛的头名奖金 3000 美元,第二名奖金 2000 美元,第三名奖金 1000 美元。
以 2020 年的冠军 DynDataResolver为例,DDR 是使用 DynamoRIO 框架插桩二进制文件的 IDA 插件,DDR 可以帮助分析人员从运行中的软件中提取有用的信息。
亚军是 Lucid 和 Grap 并列。Lucid是用于探索 Hex-Rays 微码的 IDA 插件,通过该插件可以更好地理解反编译器是如何工作的。
Grap是在程序和控制流级别匹配二进制文件的工具,通过编写规则对样本进行分类。
季军 efiXplorer是用于 UEFI 固件分析和逆向的 IDA 插件。
自主创新路在何方
某论坛上有用户发问”IDA Pro 开发到底有多难?”,
综合各方观点,大家的讨论主要集中在两点:
长期投入,反汇编、反编译的工作需要有人长期投入,不仅是金钱也需要相应的人才供给
市场转化,研究成果需要转化成收入,不仅面临与 IDA 这一事实上的老大的竞争,也面临盗版泛滥的问题
回顾 IDA 长达 30 年的发展历程,可以发现现如今那个横跨各大平台、支持多种体系架构的“巨无霸”也是一点一点成长起来的,IDA 从雏形到制霸也花了三十年的时间。
2016 年 4 月 19 日,总书记在网络安全和信息化工作座谈会上表示:“可以探索搞揭榜挂帅,把需要的关键核心技术项目张出榜来,英雄不论出处,谁有本事谁就揭榜”。
三十年磨一剑,IDA 成为了二进制文件分析的一把利器。梅花香自苦寒来,希望我们国家自己的 IDA 能够早日诞生。