打个比喻,iOS逆向工程就像一杆长矛,专门刺破App看似安全的防护盾。有趣的是,很多制作App的公司还没有意识到这样一杆长矛的存在,固步自封地以为自己的盾坚不可摧。
对于微信和WhatsApp之类的IM应用,交流的信息是它们的核心;对于银行、支付、电商类的软件,交易数据和客户信息是它们的核心。所有的核心数据都是需要重点保护的,于是,开发人员通过反调试、数据加密、代码混淆等各种手段重重保护自己App,为的就是增加逆向工程的难度,避免类似的安全问题影响用户体验。
可是目前App防护所用到的技术跟iOS逆向工程所使用的技术根本就不是同一个维度的。一般的App防护,感觉就像是一个城堡,将App的MVC布置在城堡内部,外围圈上厚厚的城墙,看上去易守难攻,就像图1-1所示的这样。
但是当我们站到高处,在天空中鸟瞰这个App所在的城堡,它的内部结构就不再是秘密,如图1-2所示。
这时,所有的Objective-C函数定义、所有的property、所有的导出函数、所有的全局变量、所有的逻辑完全暴露在我们面前,城墙的防护意义荡然无存。处在这个维度,城墙已经不再是阻碍,我们更应该关注的是如何从偌大的城堡里面找到想要找的那一个人。
此时,基于iOS逆向工程技术,可以在不破坏城墙的前提下,选择任意高维度地点进入低维度城堡,巧取而不强夺,通过监视甚至改变App的运行逻辑,从而达到获取核心信息,了解软件设计原理等战术目的。
说得似乎很玄乎,可事实就是如此。就笔者数年来对App和iOS系统本身进行逆向工程的经历和成果来看,iOS应用逆向工程可以“透视”绝大多数App,它们的设计理念与实现细节在逆向工程中暴露无遗。
以上比喻只是iOS逆向工程的一隅之见,但也形象地说明了iOS逆向工程的强大威力。概括起来,iOS逆向工程主要有两个作用:
分析目标程序,拿到关键信息,可以归类于安全相关的逆向工程;
借鉴他人的程序功能来开发自己的软件,可以归类于开发相关的逆向工程。