專訪沙梓社:做個“Think Different”的技術牛人

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

有這么一個人,他既是個技術狂,又是個懂得生活的人;他也是iOS越獄社區骨灰級活躍份子,對蘋果的研究癡迷到連女朋友都沒有的地步;他為人低調,就連照片都不愿提供,本期筆者要采訪的就是這位神秘的技術牛人,他就是《iOS應用逆向工程》的圖書作者沙梓社,請他分享iOS開發的經驗之道。




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開發書籍多如牛毛,參差不齊,但這個地球上竟然還不存在既公開,又同時能系統、全面、面向菜鳥、手把手帶你入門的逆向教程。既然需求存在卻不被滿足,那么做這件事就有意義。所以在航哥的邀請下,我參與撰寫了這樣一本書。如果馬后炮地看這本書的誕生與發展,我就是做了一件大公司們都不愿意做,但切中一個小眾群體痛點的事,從而避其鋒芒、韜光養晦,最終破土萌芽。這個過程與創業并無二致,想想還挺帶感的。


有四類讀者人群會對這本書感興趣:


  1. iOS發燒友;

  2. 高級iOS開發者。在掌握了App開發后對iOS的理解有更深的訴求;

  3. 架構師。通過逆向那些經典的App并學習它們的架構方式,是提高自己架構能力最高效的途徑之一;

  4. 在其他操作系統中從事逆向工程,同時對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開發者的逆向思維,碰撞出一些另類的火花。這只是一隅之見,無論如何,祝愿大家都能有錦繡的前程和開心的生活。謝謝!




CSDN現開啟圖書作者專訪欄目,歡迎推薦采訪人或自薦,來分享你的成長經歷和相關技術,相關信息請發送郵件至:xiamz#csdn.net(#換成@)。


CSDN 2015-08-23 08:51:41

[新一篇] 送你一個社交網絡方程式

[舊一篇] 數據格式之戰:JSON vs XML
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表