推荐序一
前一段时间跟吴航在微博上私信聊天,他说正在写一本iOS方面的图书,我让他书出来的时候送一本给我。之后他在私信上跟我说书写完了,让我给写个序,我当即表示“压力山大”,但还是欣然答应了。
我认识吴航是在2011年9月,当时安全管家在找iOS开发高手,吴航作为我们安全管家iOS开发组的第一个工程师进来了,他和我们从零开始搭建iOS团队,并着手安全管家越狱版的开发。到了2012年年中,我认识到iOS自身的安全性非常好,在非越狱的iOS上我们能做的关于安全的事情并不多,而越狱行为本身就是一个最大的安全风险,是用户主动选择的结果,跟我们自身的安全理念不符,因此无须投入太多关注,恰好吴航本人也想出去做自己的事情,于是我支持了他的决定。
在那大半年的接触中,我发现吴航是个难得的技术人才,在技术的钻研上有股子狠劲,拥有丰富的开发实战经验,又善于利用各种工具解决问题,因此在他带团队的时候,评估出来的开发进度基本上都能达成。我印象深刻的有两件事,第一件是在开发越狱版安全管家时,由于这方面官方公开的资料几乎没有,很多涉及系统底层的开发,需要自己摸着石头过河,并得反复尝试。当时我们制定了一个比较紧的开发周期,希望在较短的时间内开发出越狱版安全管家的原型。吴航的压力不小,他接连几个月都在研究系统底层,向各路高人请教,通过Google找寻国外网站上的资料,没日没夜地想办法,后来终于在既定的时间内完成,这让我看到了吴航不仅不惧困难,而且敢于负责任。另一件事是在开发App Store版安全管家时,有个版本在我的手机上在不同页面间快速切换时会有极小的概率导致安全管家崩溃,我就反馈给了吴航。虽然只是小概率事件,但他亲自反复高强度测试,细致地排查代码,最终揪出了导致这个问题的内存指针Bug,这足见其严谨的技术态度和对质量高标准的追求。
虽然我不做开发很多年了,但是至今仍忘不了年轻时作为一个工程师,非常渴望与更高水平的人交流,希望聆听高手们实战经验分享的情景。吴航愿意把他的经验总结成书,是广大iOS开发者的福音,这本书能够带给大家实实在在的干货,让大家都能在技术的道路再攀高峰。
赵岗
安全管家创始人
推荐序二
In our lives we pay very little attention to things that work. Everything we interact with hides a fractal of complexity—hundreds of smaller components all of which serve a vital role each disappearing into its destined form and function. Every day millions of people take to the streets with phones in their hands and every day hardware firmware and software blend into one contiguous mass of games photographs phone calls and text messages.
It holds then that each component retains leverage over the others. Hardware owns firmware firmware loads and reins in software and software in turn directs hardware. If you could take control of one of them could you influence a device to enact your own desires?
iOS 8 App Reverse Engineering provides a unique view inside the software running on iOS? the operating system that powers the Apple iPhone? and iPad?. Within you will learn what makes up application code and how each component fits into the software ecosystem at large. You will explore the hidden second life your phone leads wherein it is a full-fledged computer and software development platform and there is no practical limit to its functionality.
So young developer break free of restricted software and find out exactly what makes your iPhone tick!
(在生活中,我们经常会忽略许多习以为常的事物。事实上,那些我们每天都与之打交道的东西,往往都蕴含了一种“复杂”的美感——它们由成百上千的微小组件构成,各个微小组件各司其职,在各自的岗位上发挥着不可替代的关键作用。现代生活中,智能手机已经成了我们每天必不可少的工具,通过硬件、软件和固件协同合作,它为我们带来了好玩的游戏、有趣的照片,以及便利的沟通渠道——电话和短信。
在一个巴掌大的手机里,各个组件之间的关系错综复杂,互相影响。硬件为固件的运行提供支撑平台,固件掌管软件,而软件又回过头来调度硬件。如果你能控制它们之中的哪怕一个,不就可以让手机听命于你了吗?但App Store的插手,又为你对它们的控制加上了重重阻力。
本书从独特的角度剖析iOS应用,你会从比App Store App更低一级的深度去了解软件的各个组件在构造整个软件时起到的作用,你会由此发现手机的“里世界”——它的能力远不止App Store所许可的那样有限,确切地说,它是一台功能齐全的计算机,在它的“里世界”里,一切皆有可能。
年轻的开发者,从这里开始打破App Store的限制,重新认识真正的iPhone吧!)
Dustin L. Howett
iPhone Tweak 开发者
第2版序
转眼,本书第1版面世已经快1年了,在这一年里,因为有大家的认可与推广,本书得到了广泛关注。与此同时,iOS逆向工程也在国内iOS开发者圈子里“漫延”开来,并达到了前所未有的高度,正是因为大家的努力,才使得该技术得到发展,而我们作者团队也贡献了一点力量,甚感欣慰!
随着盘古、太极等国内越狱团队的横空出世,以及各种第三方市场的蓬勃发展,iOS技术层面的较量已经从App开发转向底层研究;随着WireLurker等病毒的出现,一些深藏不露的安全问题也开始浮出水面,苹果构建的封闭系统正在出现一条条裂缝。不管是进攻还是防守,都离不开iOS逆向工程技术的使用。在可以预见的未来,苹果将进入恶意软件重度防御时
代,iOS逆向工程的应用一定会越来越广泛,让我们拭目以待。
自本书第1版上市后,反响一直不错,京东等各大网店的好评率高达95%以上。随着iOS 8的发布,我们清楚地意识到第1版的内容已经不再适合最新的iOS 8。同时根据一年多以来跟大家不断的沟通和交流,也意识到第1版存在缺憾和不足,例如讲解不够细致,术多道少等,影响了书的可读性。因此,在即将推出全新升级的《iOS应用逆向工程》里,不但全面支持iOS 8,还大幅更新了章节内容,涵盖更多细节,配备了更多的例子,增加了“道”的分量,比第1版的逻辑性更强,更易读了。在升级版中,我们尝试从抽象的逆向工程中抽离出一个通用的方法论,试图传递给大家一种逆向工程的思想,而不仅仅是工具的使用。
本书第1版上市之后,我曾把书的目录和内容框架发布到国际iOS越狱社区上,得到了非常正面的反馈,包括Cydia的作者saurik、OSX著名研究员fG!、Theos作者DHowett等国际一线开发者均对本书表示了浓厚的兴趣,这也让我萌生了让该书走向国际的想法。在整理这一版时,我与编辑沟通了该想法,没想到还真促成了此事。国际版将由美国CRC出版社在全球出版发行,由8位国外知名研究员(5位美国籍、1位加拿大籍、1位阿根廷籍、1位丹麦籍)审核,全球iOS逆向工程社区对国际版寄予了厚望。在第1版的前言里,航哥曾提到我夸下的海口:“弟的目标远大,要玩就朝着国际一线大牛的目标去!”虽然离这个目标还差得很远,但我已经在朝这个目标努力迈进了,不是么?
前 言
为什么要写这本书
两年前我正式从传统网络设备行业转行进入移动互联网行业,当时正是移动应用开发市场最火爆的时候,创业公司如雨后春笋般的成立,尤其社交类App更是大受追捧,只要有一个不错的构想就可能拿到千万级投资,高价挖人组队的信息更是让人眼花缭乱。那时我已经开发了几个颇具难度的企业应用类App,对于那些轻量级的普通社交App不是太看得上,想着要玩点比较酷的技术,机缘巧合进入了安全管家(北京安管佳科技有限公司),从零开始搭建iOS团队,负责包括越狱方向在内的iOS开发。
其实iOS越狱开发的基础就是iOS逆向工程,那个时候我并没有这方面的经验,面向的是一个完全未知的领域,不过好在有Google,国内国外的信息多少还是能够搜到点,而且对于iOS开发者,越狱开发和逆向工程并不是一个完全隔离的世界,虽然被分享出来的都是零零散散甚至重复度很高的知识,但是只要投入大量精力,把知识归纳总结,慢慢可以整理出一幅完整的图谱。
然而独自一人学习的过程是孤独的,尤其是遇见困难和问题无人交流,让人一筹莫展。每次一个人扛下所有问题的时候,总是感叹:要是有一个水平不错的交流者该是多么幸福?虽然也可以给Ryan Petrich等一线大牛发邮件请教,但很多在我们看来当时解决不了的难题在这类高手眼中很可能就是个低级问题,不苦心钻研一番根本不好意思去问。这个阶段大概持续了有大半年,直到2012年在微博上遇到本书的另一作者snakeninny,那时他还是一个面临毕业的研究生,整天“不务正业”地研究iOS底层,而且研究得还相当有深度。我曾和他提过:“你看,有多少人都投入到App领域捞钱去了,你咋不去呢?”他说:“弟的目标远大,要玩就朝着国际一线大牛的目标去!”小兄弟,你够狠!
不过,多数时候我们都是自己在折腾,只是偶尔在网上交流一下问题及解决方法,但往往能碰撞出一些有价值的内容。在一起合写本书之前,我们曾经合作逆向分析过陌陌,做了一个插件用于在陌陌iOS版上把美女的位置标注在地图上。当然我们都是善意的开发者,主动将这个漏洞告诉了陌陌,他们很快就修复了。这次,我们再次合作,将iOS逆向工程方向的知识整理出版,呈现给各位读者。
在接触越狱开发、逆向工程的这些年,个人感觉最大的收获就是看待App时,完全以一种庖丁解牛的眼光去审视:App如何构成、性能如何,可以直接反映出开发团队水平高低。这些经验知识不仅可用于越狱开发,也适用于传统的App开发,至于带来的影响,有正有负吧!我们不能因为苹果不提倡越狱就否定这个领域的存在,盲目地相信本书曝光的安全问题不存在不过是掩耳盗铃罢了。
有经验的开发者都明白,知识掌握得越深,越会接触到底层技术。比如sandbox保护机制具体体现在哪些方面?runtime只用来研究理论知识是不是有点大材小用了?
在Android领域,底层技术已经被扩散开,而在iOS领域,这个方向展现出来的内容还只是冰山一角。虽然国外也有几本iOS安全方向的书籍,比如《Hacking and Securing iOS Applications》、《iOS Hacker’s Handbook》,但是内容太难,绝大多数人根本读不懂,即使我们这些有一定经验的开发者,读这些书也非常吃力,效果不好。
阳春白雪不为我们这些喜欢实践的技术宅所好,那么来点下里巴人的,不必遮遮掩掩,直接全面展开这些知识岂不是更痛快?于是就有了我们这本书,书中的内容以概念、工具、理论、实战的形式全面、系统地展开知识点,由浅入深,图文并茂,带着读者一步步地探索App的内在。我们不会像一些技术博客那样貌似很高深地独立分析某一片段的代码,也不纠结“茴”字有几种写法,而是尽我们所能将一个完整的知识体系呈现给读者,提供一整套iOS应用逆向工程的方法论,相信读者一定会有所收获。
近些年,国内投入在越狱iOS这个方向的人越来越多,但都比较低调,他们开发出的越狱工具、App助手、Cydia插件影响着整个iOS的发展。他们积累的技术非我们这些散兵游勇所能及,但我们更愿意分享这些知识,希望能够抛砖引玉。
读者对象
本书主要面向以下读者:
iOS狂热爱好者。
中高级iOS开发人员。他们在掌握了App开发之后对iOS有更深的渴求。
架构师。在逆向App的整个过程中,架构师能学习那些优秀App的架构设计,以这种方式博采众长,提高自己的架构设计能力。
在别的系统上从事逆向工程,想要转向iOS逆向工程的工程师。
如何阅读本书
本书将分为四大部分,分别是概念、工具、理论和实战。前三部分介绍iOS逆向工程这个领域的背景、知识体系,以及相应的工具集、理论知识;第四部分则以4个具体案例将前面的知识以实战的方式展开,让读者可以实践验证前面学到的知识,加深对iOS逆向工程的理解。
如果读者不具备iOS逆向工程经验,建议还是从头开始按顺序阅读,而不要直接跨越到第四部分去模拟实战。虽然实战的成果很炫,但知其然而不知其所以然也没意思,对不对?
勘误和支持
由于作者的水平有限,编写的时间也很仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正,欢迎访问本书的官方论坛http://bbs.iosre.com,全球的iOS逆向工程师都在这里聚集,你的问题应该会得到满意的解答。如果你有更多的宝贵意见,也欢迎你通过微博@iOS应用逆向工程或官方论坛与我们联系,我们很期待能够听到你们的真挚反馈。
致谢
首先要感谢evad3rs、盘古、太极、saurik等顶级团队与高手,他们奠定了越狱iOS的基石;还要感谢DHowett,是他提供了Theos这个强大的开发工具使我得以迈进iOS逆向工程的大门。
感谢安全管家,为我进入iOS逆向工程领域提供了一个充分发挥的环境,虽然我早已离开,但希望它发展得更好。
感谢微博上每一位热心的朋友——唐巧_boy、卢明华、你在瓦西里、isdada、Jagie、onevcat、戴铭、费西FISH、xuzhanji、Life无法Debug、移动开发小冉、HorseLuke、网络蝎子、hongjiang_wang、月之舞狼、StayNStay、bluesea哈哈哈、郑州IOS、青年土豆的烦恼、木土吉吉,以及这个仓促写就的名单之外的更多朋友,感谢你们对我的支持和鼓励。特地感谢唐巧_boy的引荐,他的热心帮助促成了本书的出版。
感谢机械工业出版社华章公司的编辑杨绣国老师,感谢她的魄力和远见,在这三个月的时间里始终支持我的写作,她的指点和帮助引导我们顺利完成全部书稿。
谨以此书献给我最亲爱的家人,以及众多热爱iOS开发的朋友们。
吴航(hangcom2010)