iOS 如何进行逆向工程

原文:http://www.zhihu.com/question/20317296

季逸超Peak-Labs创始人/CEO,猛犸浏览器、Rasgue…

有幸被邀请回答,不过不知道您要了解的'系统机制'有多深入? ;-)

按照意图和深度的话,大概有这么几种途径与资源:

  1. 为了学习框架,提升开发水平,可以看看私有API列表。iOS (Cocoa Touch)的各私有API都可以通过runtime查看获得,您可以自己写个method browser。如果觉得麻烦的话可以到Github看现成的,我收藏了俩: https://github.com/kennytm/iphone-private-frameworkshttps://github.com/nst/iOS-Runtime-Headers ,但还是推荐自己来实时获取,因为iOS在更新,API也在更新。在App Store产品中使用私有API是违反苹果规定的,所以能不用这些API而实现一些功能是iOS工程师水平的体现。
  2. iOS工程师而言,如果只是开发的话(1)也就差不多了。如果您十分有爱,想了解API以下的东西的话,依然可以利用Obj-Cruntime。可以在这里看到 http://opensource.apple.com/source/objc4/objc4-493.11/runtime/ ,尤其是objc-runtime.m,这里提供了很多学习用的"工具"。比如经典的method_exchangeImplementations(),您可以用它研究很多黑箱过程的来龙去脉。值得一提的是,这种技巧(method swizzling)是合法的,可以在App Store 中使用! 苹果曾给使用了相关技巧的开发者发过邮件,表示出于安全性和稳定性最好不再使用,但没有禁止。
  3. 如果是对系统本身感兴趣的话,不妨越狱看看。iOSMac OS X类似,基于Darwin,是一种UNIX系统。越狱后你就有了root权,可以安装个Terminal,装gcc都没问题的哈哈~ 接下来就像您研究Linux那样摆弄就好了。对于开发者来说,有了root权也就可以写一些system tweak或全局的代码,自然也可以用来深入了解系统、原生app等。这方面我很久没折腾了,所以不敢瞎说。
  4. 如果您是想成为一名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
  5. 另外说iOS代码是封闭/闭源的其实不全对,苹果算是开源界的一面大旗了,比如WebKitiOS的组成部分也一样是开源的,可以在官网 http://opensource.apple.com/ 看到,最新的iOS 5.1.1在这:http://opensource.apple.com/release/ios-511/ 。但是如您所见,这里并没有iOS操作系统的代码,而是一些库和编译器、调试器...其中JavaScriptCoreWebCore很有用,这两者是WebKit的基础,可以说WebKitiOS最重要的组成之一,截止iOS 5 (6我还没下呢=___=),所有多于一行文字的控件其实都是WebKit标准的(不可思议吧?!)。很多iOSHack都是从这里开始的。说到WebKit,之前Comex大神的Spirit越狱(那个"Slide to Jailbreak")就是利用Safari->WebKit->PDF Engine->TIFF字体的漏洞实现了代码注入!所以每一个系统组件都可能是iOS逆向/Hack的突破口!

水平有限,如有错误和遗漏还请各位纠正、补充 ;-)



黄韬,码农,愤青

几个月前在用工具链开发iphone应用时,也想深入了解iOS系统的方方面面,当时从以下方面入手:


1.系统核心。http://www.opensource.apple.com/上有xnu源代码,用来参考低层实现及验证不明白的地方,如iOStask_port_t等结构信息。

2.bootloader。这个主要从一些开源的项目上了解,如greenpois0n,源码在https://github.com/Chronic-Dev中可以下载。

3.itunesiOS通信机制实现,这个主要要看一下libimobiledevice这个项目,估计91也是这个原理吧。

4.framwork反向。这个主要是看你的兴趣在哪里了,根据所需用otool反编译对应的框架,了解苹果未公开部分。(需要了解ARM指令。)

5.查看相关wiki。推荐两个:

http://iphonedevwiki.net/index.php/Main_Page

http://theiphonewiki.com/wiki/index.php?title=Main_Page

国内这个blog也不错:http://zhiwei.li/text/

最后,还是要自已写一些代码去进行验证。

总的感觉是很难,对这些要有基本认识,要花很多时间和精力。



hangcomiOS App/越狱/逆向

如果只是针对ios app,应该是很容易的,class-dump,没有意外的话,直接出全部的.h文件,而且非常清晰。常见的UI结构,基础的数据对象,有了这些,即使看不到.m中的实现代码,是不是也能看个大概了?

至于ios系统本身,看private api

再往下,那就是大牛们的事了


最近对陌陌做了逆向,获取Location坐标并在陌陌里加了一个地图页,这应该就属于标准的App逆向,微博的技术贴里提到了相应的技术点,行内人看了应该就会明白,但全部的技术内容暂时应该不会整理出来,毕竟也要尊重一下app的原作者。



suuiOS Researcher

路过推荐几个工具

iOS端: otoolgdbvbindiffclass-dump-z,有GUI界面的Flex用来代替class-dump-z效果很好,另iOS5需要ldid


Mac端:Hopper Disassembler(我喜欢这个多过于ida),otoolida pro


胡江傲,挨踢程序猿!

理由完全很不充分,逆向iOS上的app倒还可以理解也相对比较容易,逆向iOS本身,那就追随那些释放越狱的牛人去吧!

FYI

http://theiphonewiki.com/wiki/index.php?title=25C3_presentation_%22Hacking_the_iPhone%22



EvaniT

hopperappfrmework反汇编。。。



沈寅iOS独立开发者,前支付宝工程师

要追求底层 并一定需要逆向 ios很多底层代码还是开源的 http://opensource.apple.com/ 如果要了解系统机制 建议先从macos入手 毕竟ios是从那儿改良的,并且他的限制也没有那么多。当然个人觉得先从文档开始 了解他的设计思路 也不是坏事。

你可能感兴趣的:(ios)