from:http://www.zhihu.com/question/20317296
有幸被邀請回答,不過不知道您要瞭解的'系統機制'有多深入?
按照意圖和深度的話,大概有這麼幾種途徑與資源:
為了學習架構,提升開發水平,可以看看私人API列表。iOS (Cocoa Touch)的各私人API都可以通過runtime查看獲得,您可以自己寫個method browser。如果覺得麻煩的話可以到Github看現成的,我收藏了倆: https://github.com/kennytm/iphone-private-frameworks 和 https://github.com/nst/iOS-Runtime-Headers ,但還是推薦自己來即時擷取,因為iOS在更新,API也在更新。在App Store產品中使用私人API是違反蘋果規定的,所以能不用這些API而實現一些功能是iOS工程師水平的體現。
對iOS工程師而言,如果只是開發的話(1)也就差不多了。如果您十分有愛,想瞭解API以下的東西的話,依然可以利用Obj-C的runtime。可以在這裡看到 http://opensource.apple.com/source/objc4/objc4-493.11/runtime/ ,尤其是objc-runtime.m,這裡提供了很多學慣用的"工具"。比如經典的method_exchangeImplementations(),您可以用它研究很多黑箱過程的來龍去脈。值得一提的是,這種技巧(method swizzling)是合法的,可以在App Store 中使用! 蘋果曾給使用了相關技巧的開發人員發過郵件,表示出於安全性和穩定性最好不再使用,但沒有禁止。
如果是對系統本身感興趣的話,不妨越獄看看。iOS和Mac OS X類似,基於Darwin,是一種UNIX系統。越獄後你就有了root權,可以安裝個Terminal,裝gcc都沒問題的哈哈~ 接下來就像您研究Linux那樣擺弄就好了。對於開發人員來說,有了root權也就可以寫一些system tweak或全域的代碼,自然也可以用來深入瞭解系統、原生app等。這方面我很久沒折騰了,所以不敢瞎說。
如果您是想成為一名iOS Hacker的話,最近有本書挺火的: http://www.amazon.com/iOS-Hackers-Handbook-Charlie-Miller/ 我沒空看不知道咋樣,但作者很神。另外現在iOS越獄界也有了自己的大會,可以看看“越獄夢之隊”的演講和文檔: http://absinthejailbreak.com/dream-team-presentation-at-hitbsecconf-videos/ 。如果您還是沒有滿足的話,可以看看從硬體入手的逆向工程和調試,分享一個我收藏的寶貝: http://wenku.baidu.com/view/dae22c30eefdc8d376ee32c9.html
另外說iOS代碼是封閉/閉源的其實不全對,蘋果算是開源界的一面大旗了,比如WebKit。iOS的組成部分也一樣是開源的,可以在官網 http://opensource.apple.com/ 看到,最新的iOS 5.1.1在這: http://opensource.apple.com/release/ios-511/ 。但是如您所見,這裡並沒有iOS作業系統的代碼,而是一些庫和編譯器、調試器...其中JavaScriptCore和WebCore很有用,這兩者是WebKit的基礎,可以說WebKit是iOS最重要的組成之一,截止iOS 5 (6我還沒下呢=___=),所有多於一行文字的控制項其實都是WebKit標準的(不可思議吧?!)。很多iOS的Hack都是從這裡開始的。說到WebKit,之前Comex大神的Spirit越獄(那個"Slide to Jailbreak")就是利用Safari->WebKit->PDF Engine->TIFF字型的漏洞實現了代碼注入!所以每一個系統組件都可能是iOS逆向/Hack的突破口!
水平有限,如有錯誤和遺漏還請各位糾正、補充