了解了一些iOS逆向工程的理论,就要使用各种工具实践这些理论了。相对于正向开发,逆向工程使用的工具并不那么“智能”,很多工作需要我们手工完成。但是对工具的熟练使用能够极大地提高逆向工程的效率。iOS逆向工程的工具可以分为四大类:监测工具、反汇编工具(disassembler)、调试工具(debugger),以及开发工具。
在iOS逆向工程中,起到嗅探、监测、记录目标程序行为的工具统称为监测工具。这些工具通常可以记录并显示目标程序的某些操作,如UI变化、网络活动、文件访问等。iOS逆向常用的监测工具有Reveal、snoop-it、introspy等。
图1-4所呈现的是一款监测工具——Reveal,它可以用来实时监测目标App的UI布局变化。
图1-4 Reveal
Reveal能够辅助定位App中我们感兴趣的部分,让我们能够迅速从UI层面切入代码层面。
从UI层面切入代码层面后,就要用到反汇编工具来梳理代码了。反汇编工具把二进制文件作为输入,经过处理后输出这个文件的汇编代码;在iOS逆向工程中,常用的反汇编工具主要是IDA和Hopper。
作为老牌反汇编工具,IDA是逆向工程中最常用的利器之一。它支持Windows、Linux、OSX平台和多种处理器架构,如图1-5所示。
Hopper是一款近年面世的反汇编工具,它主要针对的是苹果系操作系统,如图1-6所示。
把二进制文件反汇编之后,就要阅读生成的汇编代码了。这是iOS逆向工程中最具挑战,也是最有意思的部分,具体会在第6章详细讲述。本书主要以IDA作为反汇编工具,但我们会在http://bbs.iosre.com 交流Hopper的使用心得。
图1-5 IDA
图1-6 Hopper
iOS开发者对调试工具应该不陌生,在App开发中,少不了在Xcode中调试代码。我们可以在某一行代码上设置断点,使进程能够停止在那一行代码上,并实时显示进程当前的状态。在iOS逆向工程中,用到的调试工具主要是LLDB。图1-7是使用LLDB进行调试的示例。
图1-7 LLDB
从UI层面切入代码层面,用反汇编工具和调试工具分析过二进制文件后,就可以整理分析结果,用开发工具写程序了。对于App开发者来说,Xcode是最常用的开发工具。但是我们一旦将战场从AppStore转移到越狱iOS,开发工具的种类就得到了扩充,不但有基于Xcode的iOSOpenDev,还有偏命令行的Theos。从个人体验来说,Theos是让笔者最为兴奋的开发工具,在知道Theos之前,笔者感觉自己一直都被限制在AppStore中,直到掌握了Theos的用法,才突破了AppStore,完整地认识了整个iOS系统。本书主要以Theos作为开发工具,关于iOSOpenDev的问题,可以到http://bbs.iosre.com 交流讨论。