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 ...
随机推荐
- Spring Bean之间的关系
bean之间的关系:继承和依赖继承bean的配置 Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父bean的bean称为子bean 子bean从父bean中继承配置,包括 ...
- java产生随机数的几种方式(转)
一.在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他就是个100以内的随机,这个在 ...
- UVA 10585 Center of symmetry
题意:给出一个点集,问这个集合有没有中心点使点集对称,这个点可以是点集中的点也可以不是点集的点. 解法:一开始我枚举每两个点连线的中点……结果T了orz当时也不知道怎么想的…… 将点按横坐标排序,如果 ...
- [转] MATLAB快捷键
原文地址:MATLAB快捷键大全 (转载)作者:掷地有声 一.索引混排版 备注:删除了如F1(帮助)等类型的常见快捷命令 SHIFT+DELETE永久删除 DELETE删除 ALT+ENTER属性 A ...
- NGINX(三)HASH表
前言 nginx的hash表有几种不同的种类, 不过都是以ngx_hash_t为基础的, ngx_hash_t是最普通的hash表, 冲突采用的是链地址法, 不过这里冲突的元素不是一个链表, 而是一个 ...
- 安装zabbix server
本文安装的zabbix版本为2.2 步骤 1.安装php 5.3.3 rpm -e `rpm -qa | grep php` rpm -ivh http://mirrors.163.com/cento ...
- Pyhton 一行代码求Fibonacci第N项
递归定义很简单,效率当然很低下,且极易超出栈空间大小. 这样做纯粹是为了体现python的语言表现力而已, 并没有任何实际意义. def fib(x): return fib(x-1) + fib(x ...
- dateline 在数据库中就是 整型字段。date函数是可以转换成可读日期的。
返回数据中的dateline全部用date()函数转换后再返回,是要嵌套循环还是遍历,代码怎么写? //查询我的活动 function user_activity_info_by_uid($uid){ ...
- ffmpeg常见命令
一.安装 下载ffmpeg,解压之后配置环境变量即为安装 打开dos界面,进入目标文件夹例如:E:/ cd E:\BaiduYunDownload\ffmpeg\ffmpeg_simple ...
- 【转】Spark是基于内存的分布式计算引擎
Spark是基于内存的分布式计算引擎,以处理的高效和稳定著称.然而在实际的应用开发过程中,开发者还是会遇到种种问题,其中一大类就是和性能相关.在本文中,笔者将结合自身实践,谈谈如何尽可能地提高应用程序 ...