- iOS應(yīng)用逆向工程:分析與實(shí)戰(zhàn)
- 沙梓社 吳航 劉瑾
- 2937字
- 2019-03-01 16:16:04
自序
我是一個(gè)熱愛自助旅游的人。在大學(xué)的每個(gè)寒暑假,我都會(huì)抽出7~10天的時(shí)間,挑選國內(nèi)的一個(gè)地方當(dāng)一次背包客。因?yàn)槭亲灾危瑳]有導(dǎo)游幫忙安排一切,所以在出行前,我和同伴需要花費(fèi)不少時(shí)間制定計(jì)劃、確認(rèn)路線、購買車票,考慮路上可能出現(xiàn)的狀況,并思考對(duì)策。都說旅游能夠開闊眼界,尤其是自助游,對(duì)此我深有體會(huì):在路上見到的人和事讓我增長見識(shí),更重要的是,在開始這段旅程前,我就需要對(duì)這段旅程中的點(diǎn)點(diǎn)滴滴有所準(zhǔn)備——當(dāng)身體還站在起點(diǎn)時(shí),我的頭腦就已經(jīng)到達(dá)終點(diǎn)了。這種思維方式對(duì)全局觀的培養(yǎng)是有利的,也讓我在思考其他問題時(shí)養(yǎng)成了從長計(jì)議的習(xí)慣。
在2009年攻讀碩士研究生前,我就曾深入思考過自己想要從事的研究方向。我學(xué)習(xí)的是計(jì)算機(jī)專業(yè),而從本科開始,身邊絕大部分同學(xué)的研究平臺(tái)是Windows。作為一名動(dòng)手能力并不強(qiáng)的普通學(xué)生,如果我繼續(xù)從事Windows的研究,有兩點(diǎn)好處:
?這個(gè)方向有海量成熟資料,我的學(xué)習(xí)之路上不會(huì)缺少參照;
?研究人數(shù)眾多,碰到問題可以請(qǐng)教討論的人比比皆是。
但是,從另一個(gè)側(cè)面來看,這兩點(diǎn)“好處”也并非有百利而無一害:
?參考的資料越多,意味著我會(huì)越多地重蹈前人的“覆轍”;
?研究人數(shù)越多,意味著競(jìng)爭壓力更大。
總的來說,如果我從事與Windows相關(guān)的工作,起步會(huì)很順利,但后續(xù)難保不被淹沒在人海里;如果另尋他路,入門會(huì)很辛苦,但堅(jiān)持下去或能獨(dú)辟蹊徑。
幸運(yùn)的是,我的想法與導(dǎo)師的如出一轍。他推薦我選擇當(dāng)時(shí)國內(nèi)“小荷才露尖尖角”的移動(dòng)開發(fā)方向,而我在這之前一直使用的是一款飛利浦藍(lán)屏手機(jī),對(duì)智能手機(jī)毫無概念,更別說在上面開發(fā)軟件了。但是,導(dǎo)師是我仔細(xì)分析所有碩士生導(dǎo)師特點(diǎn)、與數(shù)名學(xué)長交換意見之后謹(jǐn)慎挑選的師從對(duì)象,他的判斷本身就含有我的判斷,因此,我相信這個(gè)判斷,于是開始搜尋移動(dòng)開發(fā)的相關(guān)資料。僅僅是了解了一些移動(dòng)互聯(lián)網(wǎng)和智能手機(jī)的概念,我就隱隱發(fā)現(xiàn),這個(gè)行業(yè)順應(yīng)了人們對(duì)計(jì)算機(jī)和互聯(lián)網(wǎng)更小、更快、與生活融合更緊的歷史發(fā)展趨勢(shì),一定大有可為,遂將研究方向定為iOS。
萬事開頭難,iOS與我熟悉的Windows有著太多太多的不同:類UNIX、完整生態(tài)系統(tǒng)、全封閉、Objective-C語言,還有影響我最深的“越獄”,這一切的一切在當(dāng)時(shí)幾乎找不到完整的參考資料,有半年多近一年的時(shí)間,我折騰黑蘋果的時(shí)間要以星期為單位。我硬著頭皮把《Objective-C基礎(chǔ)教程》上宛如天書一般的Objective-C代碼敲入Xcode,然后運(yùn)行模擬器看效果,但代碼和畫面完全對(duì)不上號(hào);對(duì)iOS上似UNIX非UNIX的東西(如后臺(tái)運(yùn)行)大肆在Google上搜索,屢敗屢戰(zhàn)。當(dāng)同學(xué)們都發(fā)表了第一篇小論文時(shí),我甚至沒明確自己這個(gè)月究竟在干什么,我缺乏太多的基礎(chǔ)知識(shí);當(dāng)同學(xué)們周末出去K歌、打牙祭時(shí),我一個(gè)人悶在宿舍里對(duì)著電腦啃代碼;當(dāng)同學(xué)們躺在床上睡懶覺時(shí),我一個(gè)人一大早爬起來去實(shí)驗(yàn)室。一個(gè)人是孤獨(dú)的,但這種孤獨(dú)換來的是學(xué)識(shí)的積累,從而轉(zhuǎn)化成內(nèi)心的篤定,到了最后,因?yàn)閮?nèi)在的充實(shí),就不再感到外在的孤獨(dú)了。男人因孤獨(dú)而優(yōu)秀,付出一定會(huì)有回報(bào)。經(jīng)過一年多的磨合,在2011年3月的一天,以前晦澀難懂的代碼突然變得平易近人了,每一句的含義、每一行的關(guān)系都變得清楚了,零散的知識(shí)點(diǎn)在我的腦袋里被連成了線,整個(gè)體系的邏輯慢慢清晰了。于是我快馬加鞭,在2011年4月初完成了畢業(yè)設(shè)計(jì)的程序雛形,并得到了當(dāng)時(shí)對(duì)此方向并不抱太大希望的導(dǎo)師的高度評(píng)價(jià)——“從以前自我感覺良好的優(yōu)越感變成了肚里有貨后的真正自信”,這標(biāo)志著我對(duì)iOS研究的正式入門。明白自己在做什么之后,就能有的放矢,研究效率呈幾何倍率提高。在這兩年里,我知道了Theos從而“勾搭”上了作者DHowett,向Activator的作者rpetrich討教過問題,跟TheBigBoss的管理員Optimo發(fā)生過爭執(zhí),他們是我這一路走來幫我解決實(shí)際問題最多的朋友;在開發(fā)SMSNinja的過程中結(jié)識(shí)了本書另一作者航哥,在不斷深入研究的同時(shí)認(rèn)識(shí)了一票做人低調(diào)、辦事高調(diào)的高手,意識(shí)到自己并不孤單——我們孤膽,我們并肩。
在本書即將出版的時(shí)候回望這4年,我不禁慶幸自己當(dāng)初的選擇是正確的。在iOS方向4年的積淀就足夠出一本書,這在Windows方向是不可想象的,而Apple、Google和Microsoft三大巨頭的不斷發(fā)力和市場(chǎng)反饋也直接證明了這個(gè)行業(yè)一定會(huì)是互聯(lián)網(wǎng)下一個(gè)十年的絕對(duì)主角,能夠親眼見證并參與其中,我三生有幸。人生苦短,必須果敢,所以,少年,不要猶豫了,快到碗里來吧!
在受到航哥的邀請(qǐng)寫作本書時(shí),我是有些猶豫的。中國人口眾多,各行各業(yè)競(jìng)爭都很激烈,自己走了那么多彎路,碰了N鼻子灰才總結(jié)提煉出的這些知識(shí),一股腦兒全都交代出去了,會(huì)不會(huì)有意無意地培養(yǎng)出更多“競(jìng)爭對(duì)手”?這么做是不是把自己的優(yōu)勢(shì)拱手相讓了?但是縱觀越獄iOS的發(fā)展歷史,從基本的Cydia和MobileSubstrate到Theos這樣的開發(fā)利器,再到Activator這樣的神級(jí)插件,這些對(duì)我影響最為深遠(yuǎn)的軟件無一不是開源的,正是因?yàn)檫@些大牛分享了自己的“優(yōu)勢(shì)”,我才能博采眾長、逐漸成長;rpetrich牽頭的tweakweek和posixninja牽頭的openjailbreak也都把寶貴的獨(dú)門秘籍大白于天下,讓更多的愛好者參與越獄iOS生態(tài)環(huán)境的建設(shè)。他們是這個(gè)圈子里的一線開發(fā)者,他們的優(yōu)勢(shì)完全沒有因?yàn)椤胺窒怼倍鴾p少。我是一個(gè)受益于這個(gè)分享鏈條的人,怎么能在小有所成之后就過河拆橋、斷掉我這一環(huán)節(jié)呢?況且,我是打算在這條路上繼續(xù)求索的,如果我不停下,我的優(yōu)勢(shì)就會(huì)一直保持——我的競(jìng)爭對(duì)手只有我自己。相信我們的分享會(huì)幫到很多和當(dāng)年的我一樣在門外苦苦徘徊的開發(fā)者,集大家的智慧創(chuàng)造出的作品能夠更好地讓科技服務(wù)于人,而且我也能結(jié)交更多志同道合的朋友,精神生活得到更大滿足。這也聊可算作是從長計(jì)議吧。
啰啰唆唆說了很多,有些嚴(yán)肅,但這也正是我對(duì)待科學(xué)技術(shù)的態(tài)度。本書的內(nèi)容適合國內(nèi)絕大多數(shù)不滿足于折騰App Store的iOS愛好者,通篇干貨,童叟無欺,比我的碩士畢業(yè)論文要實(shí)在得多。更多后續(xù)的內(nèi)容還請(qǐng)關(guān)注本書的官方微博@iOS應(yīng)用逆向工程。讓我們一起提升中國iOS開發(fā)者在國際上的地位!
在這里,我要感謝母親對(duì)我事業(yè)的全力支持,使我在鉆研學(xué)術(shù)之時(shí)能盡可能少地因瑣事分心。感謝我的爺爺為我的英語啟蒙,良好的英語素養(yǎng)是跟國際同行交流的必要條件。感謝我的導(dǎo)師授我以漁,讓我在碩士3年經(jīng)歷脫胎換骨的成長。感謝DHowett、rpetrich和Optimo等大牛對(duì)我的無私幫助和尖銳批評(píng),讓我在快速成長的同時(shí)認(rèn)識(shí)到差距巨大,不敢懈怠。感謝Daniel、gradetwo、zhuliang、大老、Vincent等前輩對(duì)本書的審核與建議,以及對(duì)我這個(gè)初學(xué)者的點(diǎn)撥。感謝我的家人和朋友們,他們的支持與鼓勵(lì)是我前進(jìn)下去的不竭動(dòng)力。還要感謝我未來的女朋友,你26年來的缺席讓我能一心一意地學(xué)習(xí)知識(shí),本書稿費(fèi)啊有我的一半也有你的一半。事業(yè)、親情、友情、愛情是我等凡人的畢生追求,但往往只能求二爭三,不可四者兼得,因?yàn)檫@個(gè)原因而有意、無意冒犯、傷害過的人,我欠你們一聲“對(duì)不起”,感謝你們對(duì)我的成全。
最后跟大家分享一首我喜愛的詩,啊!人生多么奇妙。
未選之路
黃色的樹林里分出兩條路,
可惜我不能同時(shí)去涉足,
我在那路口久久佇立,
我向著一條路極目望去,
直到它消失在叢林深處。
但我卻選了另外一條路,
它荒草萋萋,十分幽寂;
顯得更誘人、更美麗,
雖然在這兩條小路上,
都很少留下旅人的足跡。
那天清晨落葉滿地,
兩條路都未見腳印痕跡。
呵,留下一條路等改日再見!
但我知道路徑延綿無盡頭,
恐怕我難以再回返。
也許多少年后在某個(gè)地方,
我將輕聲嘆息把往事回顧:
一片樹林里分出兩條路,
而我選了人跡更少的一條,
從此決定了我一生的道路。
(謹(jǐn)以此書紀(jì)念我已仙逝的外祖父劉漢民、祖母吳朝玉)
snakeninny
- Learning LibGDX Game Development(Second Edition)
- Software Defined Networking with OpenFlow
- Responsive Web Design with HTML5 and CSS3
- Learning DHTMLX Suite UI
- Android開發(fā)案例教程與項(xiàng)目實(shí)戰(zhàn)(在線實(shí)驗(yàn)+在線自測(cè))
- Node.js全程實(shí)例
- Image Processing with ImageJ
- 平面設(shè)計(jì)經(jīng)典案例教程:CorelDRAW X6
- Akka入門與實(shí)踐
- 數(shù)字媒體技術(shù)概論
- 寫給青少年的人工智能(Python版·微課視頻版)
- 實(shí)驗(yàn)編程:PsychoPy從入門到精通
- Mapping with ArcGIS Pro
- C# 7 and .NET Core 2.0 Blueprints
- 菜鳥成長之路