2003/05/25

反汇编工具IDA Pro

IDA Pro是DataRescue开发的专业反汇编工具, 全称是An Advanced Interactive Multi-Processor Disassembler. 在我所知道的反汇编工具中, IDA Pro的反汇编能力最强, 远甚于W32asm, SoftIce等, 因此IDA Pro也成为了很多Hacker, Reverse engineerer的必备工具.
1)概述
从IDA的名字可以看出, IDA的最主要的两个特性是交互(Interactive)和多处理器(Multi-Processor). 多处理器特性容易理解, 是指IDA可以反汇编多种处理器平台上的软件产品(但注意IDA本身是运行于Windows下的), 基本上, IDA支持所有常见的通用处理器. 比如可以在Windows平台下使用IDA来反汇编运行于MIPS平台的PocketPC程序, 这种交叉反汇编能力给使用者带来极大的便利.

2) 交互
IDA的另一个最重要的特性之一是其"交互"的工作方式, 一般的反汇编工具在反汇编过程中总会遇到其"不能理解"的代码, 或者说不能产生便于理解,易读的反汇编结果, 原因是现在的软件编译器众多, 各种开发库更是花样百出, 在IDA不能理解这些因素时, 操作者(运行IDA的人)的指令显得尤为重要, 在反编译过程中, IDA可以完全和操作者相互交互, 操作者可以通过对IDA的交互来指导IDA更好的反汇编, 比如人工指定编译器类型/版本, 开发库类型/版本等, 甚至IDA的反汇编结果也完全可定制, 函数名, 变量名, 结构定义, 数组定义等等完全可以由操作者自定义, 加强反汇编结果. 这样的交互能力在反汇编大型软件时显得尤为重要.

3)FLIRT
IDA另外一个卓越的能力是FLIRT(Fast Library Identification and Recognition Technology) - 快速的库鉴定/识别技术. 通常的反汇编软件对于各种开发库显得无能为力, 只能给出其反汇编结果, 而不能给出库函数的名称/意义, 这样的反汇编结果虽然是正确的, 但却是无意义的, 试想你希望看到strcmp被展开成大段的汇编代码吗? IDA使用FLIRT技术可以正确识别大多数的流行的开发库, 如MFC, OWL, BCL等等. 并在反汇编结果中正确标记出所调用的库函数名称. 这样就极大的提高了反汇编结果的可读性. 事实上, FLIRT能力是IDA可以被称为专业的反汇编工具的重要因素之一.

4) 嵌入式语言IDC
IDA能够称之为专业的另一个重要因素就是IDC - IDA的嵌入式语言, 类似于微软产品中的VB Script, IDC的存在极大的提高了IDA的扩展性, IDC本身是一种类C的语言, 简单易学, 一方面使得IDA中很多的自动化的任务可以交由IDC来完成, 另一方面, 一些特殊反汇编任务需要IDC的协助, 如对代码段进行加密的程序, 可以用IDC先写一段解密的代码, 在解密后再反汇编就可以得到正确的反汇编结果.

5) 用户界面
作为交互式的反汇编工具, IDA的用户界面则显得非常重要, 早期版本的IDA使用了文本模式的Borland窗口界面(类似于Borland C++ 3.1的风格), 新版本则同时提供了Windows下的界面, 相比较而言, 我更喜欢Windows下的界面(信息量更大), IDA的用户界面为IDA的交互特性提供了很好的支持. 使得用户可以充分发挥IDA的交互能力.

6)其他特性
IDA在提供专业的反汇编能力的同时, 也同时提供了很多相当优秀的辅助功能, 这里提两点: 文件补丁的制作和动态调试.
IDA在反汇编的结果中提供了修改能力, 可以对任意看到的结果进行修改, 操作符, 操作数, 甚至是完整的指令, 但对于大多数的文件格式, IDA不支持直接存盘(只提供对DOS下EXE文件的修改存盘支持), 只能存成一个补丁文件, 补丁文件给出原文件和修改后文件的二进制差异, 补丁文件是文本格式, 以便于发布.
动态调试本不属于IDA这个静态反汇编工具的范畴(它是SoftIce的强项), 但由于动态调试与静态反汇编本身的紧密联系, 新版本的IDA提供了动态调试的支持, 这个版本以后, IDA已不再是一个单纯的静态反汇编工具了.

7)缺陷
IDA也不是十全十美, 其最大的缺陷是其反汇编的速度, 由于各种高级功能的引进, IDA在反汇编速度一项上, 落后其他大多数反汇编工具, 虽然IDA引入了后台反汇编机制, 但较慢的反汇编速度仍然成为IDA被批评的最主要因素.
另一个缺陷来自于用户界面, 由于IDA的强大交互性, 导致IDA的界面过于专业, 大量的窗口, 反汇编术语可能导致初级用户的无所适从, 但反过来也可以说, 这样的用户界面又再次加强了IDA在专业领域的地位.

8)结论
专业的反汇编工具, 不适于初级用户.

没有评论: