iOS应用逆向工程:分析与实战
上QQ阅读APP看书,第一时间看更新

前言

为什么要写这本书

两年前我正式从传统网络设备行业转行进入移动互联网行业,当时正是移动应用开发市场最火爆的时候,创业公司如雨后春笋般成立,社交类App更是大受追捧,只要有一个不错的构想就可能拿到千万级投资,高价挖人组队的信息更是让人眼花缭乱。那时我已经开发了几个颇具难度的企业应用类App,对于那些轻量级的普通社交App不是太看得上,想着要玩点比较酷的技术,机缘巧合进入了安全管家(北京安管佳科技有限公司),从零开始组建iOS团队,负责包括越狱方向在内的iOS开发。

其实iOS越狱开发就是基于iOS的逆向分析工程,那个时候我并没有这方面的经验,面向的是一个完全未知的领域,不过好在有Google,国内国外的信息多少还是能够搜到点,而且对于iOS开发者,越狱开发/逆向分析并不是一个完全隔离的世界,虽然被分享出来的都是些零零散散甚至重复度很高的知识,但是只要投入大量精力,把知识归纳总结,慢慢也就整理出一幅完整的图谱。

然而独自一人学习的过程是孤独的,尤其是遇见困难和问题无人交流,让人一筹莫展。每次一个人扛下所有问题的时候,总是感叹:要是有一个水平不错的交流者该是多么幸福?虽然也可以给Ryan Petrich(@rpetrich)等一线大牛发邮件请教,但很多在我们看来当时解决不了的难题在这类高手眼中可能就是个低级问题,不苦心钻研一番根本不好意思去问。这个阶段大概持续了有大半年,直到2012年在微博上遇到本书的另一作者snakeninny,那时他还是一个面临毕业的研究生,整天“不务正业”地研究iOS底层,而且研究得还相当有深度。我曾和他提过:“你看,有多少人都投入到App领域捞钱去了,你咋不去呢?”他说:“小弟的目标远大,要玩就朝着国际一线大牛的目标去!”小兄弟,你够狠!

不过,多数时候我们都是自己在折腾,虽然偶尔在网上交流一下问题及解决方法,但往往能分享得到一些有价值的内容。在一起合写本书之前,我们曾经合作逆向分析过陌陌,做了一个插件用于在陌陌iPhone版上把美女的位置标注在地图上,当然我们都是善意的开发者,主动将这个漏洞告诉了陌陌,他们很快就修复了。这次,我们再次合作,将逆向分析这个方向的知识整理出版,呈现给各位读者。

在接触越狱开发/逆向分析的这两年,个人感觉最大的收获就是看待App时,完全以一种庖丁解牛的眼光去审视:App如何构成、性能如何间接反映出开发团队水平高低。这些经验知识不仅可用于越狱开发,也可用于传统的App开发,至于带来的影响,有正有负吧。我们不能因为所谓正统的iOS平台不提倡越狱就否定这个领域的存在,盲目相信那些安全问题不存在不过是掩耳盗铃。

有经验的开发者都明白,知识掌握得越深,越会接触到底层技术。比如sandbox保护机制之外到底有什么?runtime只用来研究理论知识是不是有点大材小用了?

在Android领域,底层技术已经被扩散开,而在iOS领域,这个方向展现出来的内容还只是冰山一角。虽然国外也有几本iOS安全方向的书籍,比如《Hacking and Securing iOS Applications》、《iOS Hacker's Handbook》,但是内容太难,多数人读不出所以然,不适合中国国情,即使我们这些有一定经验的开发者,读这些书也像是在读大学教科书。

阳春白雪不为我们这些喜欢实践的技术宅所好,那么就来点下里巴人的,不必遮遮掩掩,直接全面展开这些知识岂不是更痛快?于是就有了我们这本书,书中的内容以工具+代码的形式全面、系统地展开知识点,由浅入深,图文并茂,旨在带着读者一步步地探索常规iOS App之外的世界。我们不会像一些技术博客那样貌似很高深的独立分析某一片段的代码,而是尽我们所能将一个完整的知识体系呈现给读者,相信读者一定会有所收获。

国内投入在越狱开发这个方向的人并不算少,但都比较低调,而且多集中在大公司中,比如腾讯、360、91、WeiPhone,他们积累的技术非我们这些散兵游勇所能及,不过我们更愿意先将这些知识分享出来,希望能够抛砖引玉。

读者对象

本书主要面向以下读者:

❏对iOS系统有浓厚兴趣的读者;

❏中高级iOS开发人员,他们在掌握了普通App开发之后对iOS有更深的渴求;

❏架构师,因为在逆向App的整个过程中,有心的技术人员能看到那些经典App在结构设计上的经验、优势,并博采众长,有助于整体架构设计水平的提高;

❏在别的系统上从事逆向工程,想要转向iOS系统的逆向工程师。

如何阅读本书

本书将分为四大部分,分别是概念、工具、理论和实战。前三部分介绍iOS逆向分析这个领域的背景、知识体系,以及相应的工具集、理论知识;第四部分则具体以4个实际案例将前面的知识以实战的方式展开,让读者可以实践验证前面学到的知识并进一步更扎实地掌握相应的知识。

如果读者不具备一定的逆向分析经验,建议还是从头开始按顺序阅读,而不要直接跨越到第四部分去模拟实战。虽然实战的成果似乎比较炫,但弄个半懂不懂也没意思对不对?

第一部分为概念篇,将简单介绍iOS逆向分析的概念以及iOS平台系统架构。

第二部分为工具篇,将会介绍一系列基于Mac和iOS平台的配套工具,并且重点讲解其中的class-dump、Theos、Reveal、IDA、GDB等5个工具的使用方法,前3个侧重于使用,后2个侧重于分析。

第三部分为理论篇,除了介绍iOS逆向/越狱这个方向的理论知识之外,还顺带聊了一点iOS逆向/越狱方向的国际一线大牛们的八卦,轻松一下。

第四部分为实战篇,将通过对3个App Store App及1个系统App进行逆向分析的实战操作,让读者能够了解并同步实践已掌握的知识。

勘误和支持

由于作者的水平有限,编写的时间也很仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正,欢迎微博联系 @iOS应用逆向工程,或访问我们的技术论坛http://www.iosre.com,或加入QQ技术群251453531,我们将尽量为读者提供满意的解答。如果你有更多的宝贵意见,也欢迎你通过微博或技术博客与我们联系,我们很期待能够听到你们的真挚反馈。

致谢

首先要感谢Jay Freeman(@saurik)这样的顶级高手,他奠定了越狱iOS的基石。还要感谢Dustin Howett(@DHowett),是他提供的Theos这样强大的开发工具让我得以迈进iOS逆向分析的大门。

感谢安全管家,为我进入iOS逆向领域提供了一个能充分发挥的环境,虽然我早已离开,但希望它发展得更好。

感谢微博上每一位热心的朋友——唐巧_boy、卢明华、你在瓦西里、isdada、Jagie、onevcat、戴铭、费西FISH、xuzhanji、Life无法Debug、移动开发小冉、HorseLuke、网络蝎子、hongjiang_wang、月之舞狼、StayNStay、bluesea哈哈哈、郑州IOS、青年土豆的烦恼、木土吉吉,以及这个仓促写就的名单之外的更多朋友,感谢他们对我的支持和鼓励。特别感谢唐巧_boy的引荐,他的热心帮助促成了本书的合作与出版。

感谢机械工业出版社华章公司的编辑杨绣国老师,感谢她的魄力和远见,在这3个月的时间里始终支持我的写作,她的指点和帮助引导我们顺利完成全部书稿。

谨以此书献给我最亲爱的家人,以及众多热爱iOS开发的朋友们。

吴航(@hangcom2010)