CSDN:首先请介绍下自已。
沙梓社:大家好,我是沙梓社,是一个目前技术重心放在iOS上的非典型技术男。
CSDN:你是从什么时候开始接触iOS开发的?《iOS应用逆向工程》这本书以iOS应用逆向工程实战为主,什么是逆向工程?它与普通的iOS App开发书籍有什么区别?第一版和第二版侧重点分别是什么?
沙梓社:我是从2010年iPhone 4面世前开始接触iOS开发的,在学习的起步阶段见证了iPhone 4这款神机在全球的爆红。
给你水、面粉、糖、芝麻,让你做烧饼,这是正向工程;给你一个烧饼,让你分析出它是由多少水、多少面粉、多少糖、多少芝麻组成的,这是逆向工程。也就是说,根据图纸制作实物的这个过程是正向工程,而根据实物倒推图纸的这个过程则是逆向工程。
普通的iOS App开发书籍全都可以划归到正向工程这个范畴里,跟逆向工程是两个不同的方向。我们都把自己的舞台设定在iOS中,正向工程是跳芭蕾,逆向工程是唱京剧,虽然我们分属两个艺术类别,但对于台下的观众来说,都是美的享受;君子和而不同。
第一版的侧重点是“术”,主要是介绍了工具和理论在逆向工程实战中的应用,类似于杨过早期对独孤求败前辈所创玄铁剑法的运用;第二版的侧重点是“道”,在第一版的基础上提炼出了一套原创iOS逆向工程方法论,有点杨过后期自创黯然销魂掌的感觉。第二版与第一版的架构几乎一样,但足足多出了120页,是我一年多以来在各种平台上跟读者频繁交流的心得提纯;第一版到第二版的进化,也体现了我本人对iOS理解的不断加深,是一个求索的过程。
CSDN:你怎么会想到写这样一本书呢?这本书的思路是怎样的?对读者而言如何学习这本书,您有哪些建议呢?
沙梓社:从我学习iOS逆向工程到有能力撰写这样一本书的整整4年里,虽然iOS火得一塌糊涂,App开发书籍多如牛毛,参差不齐,但这个地球上竟然还不存在既公开,又同时能系统、全面、面向菜鸟、手把手带你入门的逆向教程。既然需求存在却不被满足,那么做这件事就有意义。所以在航哥的邀请下,我参与撰写了这样一本书。如果马后炮地看这本书的诞生与发展,我就是做了一件大公司们都不愿意做,但切中一个小众群体痛点的事,从而避其锋芒、韬光养晦,最终破土萌芽。这个过程与创业并无二致,想想还挺带感的。
有四类读者人群会对这本书感兴趣:
iOS发烧友;
高级iOS开发者。在掌握了App开发后对iOS的理解有更深的诉求;
架构师。通过逆向那些经典的App并学习它们的架构方式,是提高自己架构能力最高效的途径之一;
在其他操作系统中从事逆向工程,同时对iOS感兴趣的逆向工程师。
这本书由4部分构成,分别是概念、工具、理论和实战。这4部分遵循抽象、具体、抽象、具体的模式,从苹果避而不谈的iOS文件系统结构、文件类型和权限等基本概念入手,逐一介绍class-dump、Theos、Cycript、Reveal、IDA和LLDB等常用逆向工具,再分别从高层语言Objective-C和底层语言ARM汇编的角度切入,总结提炼出一套原创iOS逆向工程方法论,点出全书核心。最后以4个原创实战案例收尾,从易到难地串联全书的内容,循序渐进地描绘逆向的套路。
我的建议是从头至尾顺序精读本书,如果有问题就来我们的论坛bbs.iosre.com上提问,看累了就到我们的Q群251453531上聊天。
CSDN:在《iOS应用逆向工程》一书中提到从UI观察切入代码分析的iOS应用逆向工程方法论,这其中到涉及应用开发的设计、技术、安全等多方面。请问你是如何掌握这么多不同领域的知识,并能总结成书的?
沙梓社:我是把别人喝咖啡的功夫都用在工作上——鲁迅。
这些其实都是逆向工程领域必备的知识,是我4年间通过牺牲睡觉时间、吃饭时间、发呆时间、玩耍时间、恋爱时间换来的;虽然少了很多这样的乐趣,但是平添了更多别样的精彩。
CSDN:逆向工程开发需要的知识是多维度的,你有什么其他书籍或学习材料推荐吗?
沙梓社:如果从广义的计算机逆向工程角度来说,我推荐TiGa的IDA系列教程、Lena151的逆向工程教程、Peter’s GDB Tutorial;如果只是iOS逆向工程,那么一本《iOS应用逆向工程》就够了(再说也没有第二本了)。先看前3个,再看后1个,看之前即使是零基础,但如果能边看边做,理解消化,看之后你就已经是准高手了;接下来与高手之间的差距,就要靠日复一日的实战磨练来慢慢消除了。
CSDN:第一版和第二版面世相差时间不到1年,你如何在进度压力下,享受写书带来的快乐?
沙梓社:我不怕疼痛,只要能够痛并快乐着,我就快乐;我也不惧压力,只要能够留下些什么,那就值得。
CSDN:在你开发的众多应用中,比如SMSNinja、LowPowerBanner、DimInCall,能否以某个为例,谈谈其成功的关键。
最成功的应该是LowPowerBanner,睡一觉下载量就超过3万次了;我在iOS 6后停止更新,直到两年后的今天还会收到用户希望它“复活”的邮件。还是马后炮地看,归根结底是因为我做了一件当时的高手们不屑于做,但切中一个小众群体痛点的事,跟本书的诞生一脉相承、妙不可言。
CSDN:App Store为个人开发者提供了很好的机遇。在你看来,要成为优秀的应用开发人员,需要具备哪些素质呢?
沙梓社:如果这个“优秀”的标准是从技术角度来评判的,保留一颗热爱技术的平常心是必备的,其他都是次要的。技术的发展日新月异,只有热爱技术才能不畏疲倦、紧跟时代;技术的钻研永无止境,只有摆正心态才能处变不惊、修成正果。
如果这个“优秀”的标准是从商业角度来评判的,那么不可或缺的则是开放的心态。许多技术高手认为谈商业是对技术的玷污,我却不以为然;技术是为人类服务的,而商业存活的前提就是它可以为人类提供令人满意的服务。在我看来,大多数技术是由商业推动发展的,美国就是最好的例子。而技术只是组成商业服务的一个部分,其他的诸如设计、推广、销售等部分都缺一不可。如果要成为这个标准下的“优秀”开发者,就需要在编写代码之外跳出技术的框框,去了解商业服务的整个闭环,甚至亲身参与其中。如果非要把自己锁定在技术这条单行道上孤注一掷,那么到最后死路一条的概率就会非常非常大。
如果把语境放在两会上李克强总理提出的“互联网+”概念,那么“优秀”的标准毫无疑问是属于后者的。如果你是个跃跃欲试,想要创业的典型技术人员,或许就有必要重新思考“优秀”的定义了。
CSDN:你现在主要使用哪种语言?为什么?哪里吸引了你?
沙梓社:我现在写程序主要用的是C和Objective-C,在逆向中还会阅读大量的ARM汇编;至于为什么用它们,是因为苹果只提供给了我屈指可数的几个选择,根本轮不到我来选……最吸引我的恐怕就是Objective-C语言的runtime特性了,它是所有tweak能够存在的根本原因,也是我在逆向工程中下功夫最多的地方。
CSDN:我知道你是一位崇尚自由、热爱旅游同时又热爱技术的人,你现在还经常出去旅游吗?你一天的工作节凑是怎样的?很多人称你为iOS越狱社区骨灰级活跃份子,对苹果的研究痴迷到连女朋友都没有的地步。对此,你怎么看?
沙梓社:因为对于行将而立的男性而言,时间的珍贵程度毋庸多言,所以现在旅游比较少,而是一心扑在了事业上。
我每天花在事业上的时间大约在11~12小时,主要是坐在电脑前处理各项工作;其余的时间主要花在确保自己能健康活下去的事情上。
那是我对自己的评价,还比较保守;别人没有这么悲观,而是说我顶多会孤独一生罢了。开玩笑的,只是缘分还没到而已。
CSDN:有没有什么话想对iOS开发者说。
沙梓社:站在技术人员的角度来说,我们这个群体的特点跟电脑程序非常类似:逻辑性强,但脑子轴,不爱变通;有付出就必须有看得见的回报。很多人问我,看你这书有什么用?我没法给出一个确定的答案,比如看完这书你的工资会涨600块钱,或者老板给你晋升一级。
但是乔布斯曾说,要“Think Different”;逆向工程对于正向工程来说,正是一种直截了当的“Think Different”。这本书或许不能马上给你带来物质上的丰厚回报,但却是“Think Different”抽象口号的一个具体实现,而且这个实现得到了国际的认可(目前已有美国和韩国的出版社想要引进本书),又落在了我们熟悉的领域,应该是一次很理想的、接地气的“Think Different”的机会。乔布斯在辍学后旁听的书法课,跟当时的乔布斯八竿子打不着,却对Mac的成功起到了至关重要的作用;从这个角度来说,这本书并不单单是一本技术书籍,我更希望它能激发广大iOS开发者的逆向思维,碰撞出一些另类的火花。这只是一隅之见,无论如何,祝愿大家都能有锦绣的前程和开心的生活。谢谢!