1.3 iOS应用逆向工程的过程

要逆向一个App时,应该怎么思考?应该从何入手?这本书的初衷就是引导初学者走进iOS逆向工程的大门,培养读者从逆向的角度思考问题。

一般来说,软件逆向工程可以看作系统分析和代码分析两个阶段的有机结合。在系统分析阶段,要从整体上观察目标程序的行为特征、文件的组织架构,从而找到我们感兴趣的地方,进入代码分析阶段后,则要把软件的核心代码还原出来,最终达到我们的目的。

1.3.1 系统分析

在系统分析阶段,应在不同的条件下运行目标程序,在程序中进行各种各样的操作,观察程序的行为特征,同时寻找我们感兴趣的功能点。比如选择哪个选项会弹框,按下哪个按钮会发声,输入什么内容屏幕会有什么显示,等等。还可以浏览文件系统,观察程序显示的图片、程序的配置文件存放的位置,数据库文件中存放了哪些信息,有没有加密等特征。

以新浪微博App为例,我们在查看它的Documents目录时,会看到如下一些数据库文件:


-rw-r--r-- 1 mobile mobile  210944 Oct 26 11:34 db_46100_1001482703473.dat
-rw-r--r-- 1 mobile mobile  106496 Nov 16 15:31 db_46500_1001607406324.dat
-rw-r--r-- 1 mobile mobile  630784 Nov 28 00:43 db_46500_3414827754.dat
-rw-r--r-- 1 mobile mobile 6078464 Dec  6 12:09 db_46600_1172536511.dat
……

用SQLite工具打开它们,可以看到一些微博关注信息,如图1-3所示。

这样的信息给逆向工程提供了很多线索:数据库文件名、微博用户的ID,用户信息对应的URL等,这些都可以作为逆向工程的切入点。寻找和整理这些线索,从中抽丝剥茧找到我们感兴趣的东西,往往是iOS逆向工程的第一步。

图1-3 新浪微博数据库信息

1.3.2 代码分析

完成系统分析之后,就该对App的二进制文件进行代码分析了。

通过逆向工程,可以推导出这个App的设计思路、内部算法和实现细节,但这是一个非常复杂的过程,可以说是一种解构再重组的艺术。想让自己的逆向工程水平达到艺术的高度,需要对软件开发、硬件原理和iOS系统有透彻的理解。一点一点地分析程序的底层指令绝非易事,也不是一本书能够完全阐述清楚的。

本书的目标仅仅是向初学者讲述iOS逆向工程入门时所用到的工具和一般思路,但技术是不断发展的,书中的内容不可能覆盖所有的知识点。出于这个考虑,笔者搭建了一个iOS逆向工程论坛http://bbs.iosre.com ,供大家讨论和交流最新的技术。