iOS 如何进行逆向工程
原文:http://www.zhihu.com/question/20317296
季逸超,Peak-Labs创始人/CEO,猛犸浏览器、Rasgue…
有幸被邀请回答,不过不知道您要了解的'系统机制'有多深入? ;-)
按照意图和深度的话,大概有这么几种途径与资源:
- 为了学习框架,提升开发水平,可以看看私有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的突破口!
水平有限,如有错误和遗漏还请各位纠正、补充 ;-)
黄韬,码农,愤青
几个月前在用工具链开发iphone应用时,也想深入了解iOS系统的方方面面,当时从以下方面入手:
1.系统核心。http://www.opensource.apple.com/上有xnu源代码,用来参考低层实现及验证不明白的地方,如iOS中task_port_t等结构信息。
2.bootloader。这个主要从一些开源的项目上了解,如greenpois0n,源码在https://github.com/Chronic-Dev中可以下载。
3.itunes与iOS通信机制实现,这个主要要看一下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/
最后,还是要自已写一些代码去进行验证。
总的感觉是很难,对这些要有基本认识,要花很多时间和精力。
hangcom,iOS App/越狱/逆向
如果只是针对ios app,应该是很容易的,class-dump,没有意外的话,直接出全部的.h文件,而且非常清晰。常见的UI结构,基础的数据对象,有了这些,即使看不到.m中的实现代码,是不是也能看个大概了?
至于ios系统本身,看private api。
再往下,那就是大牛们的事了
最近对陌陌做了逆向,获取Location坐标并在陌陌里加了一个地图页,这应该就属于标准的App逆向,微博的技术贴里提到了相应的技术点,行内人看了应该就会明白,但全部的技术内容暂时应该不会整理出来,毕竟也要尊重一下app的原作者。
suu,iOS Researcher
路过推荐几个工具
iOS端: otool,gdb,vbindiff,class-dump-z,有GUI界面的Flex用来代替class-dump-z效果很好,另iOS5需要ldid
Mac端:Hopper Disassembler(我喜欢这个多过于ida),otool,ida pro
胡江傲,挨踢程序猿!
理由完全很不充分,逆向iOS上的app倒还可以理解也相对比较容易,逆向iOS本身,那就追随那些释放越狱的牛人去吧!
FYI:
http://theiphonewiki.com/wiki/index.php?title=25C3_presentation_%22Hacking_the_iPhone%22
Evan,iT
用hopperapp对frmework反汇编。。。
沈寅,iOS独立开发者,前支付宝工程师
要追求底层 并一定需要逆向 ios很多底层代码还是开源的 http://opensource.apple.com/ 如果要了解系统机制 建议先从macos入手 毕竟ios是从那儿改良的,并且他的限制也没有那么多。当然个人觉得先从文档开始 了解他的设计思路 也不是坏事。
iOS 如何进行逆向工程的更多相关文章
- iOS 符号表恢复 & 逆向支付宝
推荐序 本文介绍了恢复符号表的技巧,并且利用该技巧实现了在 Xcode 中对目标程序下符号断点调试,该技巧可以显著地减少逆向分析时间.在文章的最后,作者以支付宝为例,展示出通过在 UIAlertVie ...
- iOS逆向工程资料
链接: 基于iOS逆向工程的微信机器人 - 猫友会大讲坛第1期 我的失败与伟大 —— 创业必备的素质(狗神经验谈)
- 我也要学iOS逆向工程--全局变量
大家好!很久不见了.我之前去音乐学院进修爵士吉他去了.现在回来了.之前我一直在学windows开发和逆向.后来到了音乐学院,老师推荐了1个录音软件叫logic prox.可惜啊!当时我只有个索尼的笔记 ...
- IOS 逆向工程之砸壳
在<iOS应用逆向工程>4.6.2节中,我们曾推荐使用iPhoneCake源的AppCrackr 1.7版给App砸壳.这种方式简单粗暴,省时省力,但正是因为它过于方便有木有,导致几乎所有 ...
- iOS逆向工程,(狗神)沙梓社大咖免费技术分享。
序言 简介:本文针对于广大iOS开发者,作为一名开发者,仅仅专注于一门语言可能已经不适用现在的市场需求,曾经因高薪和需求量巨大,而火爆一时的移动端开发者(Android,ios),如今的路却是不再那么 ...
- iOS逆向工程概述(转)
逆向工程一词,对很多人来说可能很陌生,在android领域,我们经常会听到“反编译某个apk”,那么逆向工程从某种角度讲也包括反编译这项技术,这样一对比,可能我们就更容易理解逆向工程的定义了. 我们引 ...
- Reveal逆向工程:分析任意iOS应用的UI界面
在iOS逆向工程中,Reveal扮演着重要角色,一般情况下,Reveal在iOS开发过程中可以分析UI界面的状态,同样也可以应用于分析其他任意的App.特别是对于初学者来说,去了解其他优秀App的界面 ...
- 《iOS应用逆向工程:分析与实战》
<iOS应用逆向工程:分析与实战> 基本信息 作者: 沙梓社 吴航 刘瑾 丛书名: 信息安全技术丛书 出版社:机械工业出版社 ISBN:9787111450726 上架时间:2 ...
- ios逆向工程-动态分析
先说说为什么要分析应用吧,如果你想从一个ios应用中获取有用的信息,或者你想修改该应用的一些功能,前提当然是要先知道该app的逻辑和结构了. 动态分享工具比较少,我们先分析个简单的,全民工具Cycri ...
随机推荐
- MyEclipse/Eclipse导入sun.misc.BASE64Encoder jar包步骤
1.右键项目 -->Properties -->Java Bulid Path-> Libraries -->JRE System Library-->Access ru ...
- MySQL table_id原理及风险分析
1. 什么是table_id MySQL binlog文件按格式分为文件头部和事件信息.文件头部占4字节,内容固定为:"\xfe\x62\x69\x6e",接下来就是各个event ...
- 我的web小游戏【持续更新中】
在谷歌浏览器中实测无问题.. 五子棋(双人对战):http://1.waymongame.sinaapp.com/wuziqi/wuziqi2.html 贪吃蛇:http://1.waymongame ...
- 《深入Java虚拟机学习笔记》- 第14章 浮点运算
<深入Java虚拟机学习笔记>- 第13章 浮点运算
- SourceGrid zt
SourceGrid介绍和使用及实例举例 先上图,来一个简单演示: SourceGrid就是一个用于数据显示的表格控件,这个控件比c#自带的 DataGridView要强大很多,先不说他的原理,只说他 ...
- lightoj 1016
水题,排个序直接搞. #include<cstdio> #include<string> #include<cstring> #include<iostrea ...
- 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.2 安装数据库软件)
当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.2 安装数据库软件 这部分简短讲 ...
- 【原】Redis事务管理
Redis高级篇 事务 MULTI, EXEC, DISCARD and WATCH命令用于保证Redis中的事务处理 一个事务中的所有命令被序列化并串行执行. 事务的原子性. 用法 MULTI ...
- adb logcat调试中常用的命令介绍
Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命 令来查看和使用. adb logcat 命令格式 : ad ...
- CUDA学习资料分享(随时更新)
1.Programming_Massively_Parallel_Processors.pdf 2.CUDA_C_Programming_Guide.pdf 3.CUDA范例精解通用GPU编程.pdf ...