iOS应用逆向工程:分析与实战.pdf

iOS应用逆向工程:分析与实战.pdf
 

书籍描述

编辑推荐
国内第一本讲解iOS应用逆向工程的实战手册,作者毫无保留地分享了数年来在iOS逆向领域的经验。
内容系统深入,实战性强,从iOS系统架构、文件类型等逆向理论出发,通过多个实用案例,结合Class-dump、Theos、Cycript、Reveal、IDA、GDB等最常用逆向工具阐述了对iOS应用进行逆向分析的思路、方法和技巧

作者简介
沙梓社(snakeninny)
iOS越狱社区骨灰级活跃分子,思路开阔,思想传统,对苹果的研究痴迷到连女朋友都没有的地步。作品见诸Cydia,有SMSNinja、LowPowerBanner、DimInCall等。
吴航(hangcom)?拥有十余年程序开发经验的资深码农,历经方正、NEC、Juniper等国内国外知名IT企业,2011年进入iOS领域,专注于iOS App/逆向等方向的开发,主要作品有安全管家、有康医生、知乎月刊HD等。
刘瑾?北京电子科技学院计算机科学与技术系讲师,教课之余主要从事移动客户端的安全应用程序设计和嵌入式应用程序开发研究,参与编著及翻译多本相关教材,承担过多个项目的研发工作,多次获得各项教学科研奖项。

目录
目 录
推荐序一
推荐序二
自序
前言
第一部分 概念篇
第1章 iOS逆向工程简介 2
1.1 iOS软件逆向工程的要求 2
1.2 iOS软件逆向工程的作用 2
1.2.1 与安全相关的iOS逆向工程 4
1.2.2 与开发相关的iOS逆向工程 5
1.3 iOS软件逆向工程的一般过程 6
1.3.1 系统分析 7
1.3.2 代码分析 7
1.4 iOS软件逆向工程用到的工具 8
1.4.1 监测工具 8
1.4.2 开发工具 9
1.4.3 反编译器 9
1.4.4 调试器 10
1.5 小结 11
第2章 越狱iOS平台简介 12
2.1 iOS系统架构 12
2.1.1 iOS目录结构 13
2.1.2 iOS文件权限 15
2.2 iOS程序类型 16
2.2.1 Application 16
2.2.2 Dynamic Library 19
2.2.3 Daemon 19
2.3 小结 20
第二部分 工具篇
第3章 Mac工具集 22
3.1 class-dump 22
3.1.1 class-dump介绍及下载 22
3.1.2 class-dump使用演示 23
3.1.3 关于class-dump的补充说明 25
3.2 Theos 25
3.2.1 Theos简介 25
3.2.2 Theos安装及编译 26
3.2.3 Theos用法简介 28
3.2.4 Theos开发tweak示例 47
3.3 Reveal 49
3.3.1 Reveal简介 49
3.3.2 Reveal安装及功能扩展 50
3.4 IDA 55
3.4.1 IDA简介 55
3.4.2 IDA使用说明 56
3.4.3 IDA分析示例 65
3.5 其他工具 68
3.5.1 iTools 68
3.5.2 dyld_decache 69
3.5.3 MesaSQLite 69
3.6 小结 70
第4章 iOS工具集 71
4.1 SBSettings 71
4.2 MobileSubstrate 72
4.3 OpenSSH 73
4.4 GDB 74
4.4.1 GDB简介 74
4.4.2 GDB的使用说明 74
4.5 Cycript 85
4.6 其他常用工具 88
4.6.1 BigBoss Recommended Tools 88
4.6.2 AppCrackr 88
4.6.3 iFile 89
4.6.4 MobileTerminal 89
4.6.5 Vi IMproved 90
4.6.6 SQLite 90
4.6.7 top 91
4.6.8 syslogd 92
4.7 小结 92
第三部分 理论篇
第5章 Objective-C相关的iOS逆向理论基础 94
5.1 tweak的作用原理 94
5.1.1 Objective-C语言的特性 94
5.1.2 MobileSubstrate 96
5.2 tweak的编写套路 97
5.2.1 灵感的来源 98
5.2.2 分析文件,寻找切入点 99
5.2.3 定位目标函数 102
5.2.4 测试函数功能 104
5.2.5 解析函数参数 105
5.2.6 class-dump的局限性 108
5.3 实例演示 108
5.3.1 得到灵感 108
5.3.2 分析文件 109
5.3.3 定位函数 115
5.3.4 测试函数 117
5.3.5 编写实例代码 117
5.4 小结 119
第6章 ARM汇编相关的iOS逆向理论基础 120
6.1 ARM汇编基础 120
6.1.1 基本概念 121
6.1.2 ARM/THUMB指令解读 123
6.1.3 ARM调用规则 129
6.2 在IDA中分析目标文件 131
6.2.1 分析函数实现细节 132
6.2.2 验证分析结果 139
6.3 在GDB中分析目标文件 142
6.3.1 跟踪代码执行流程 142
6.3.2 动态更改代码 147
6.4 小结 157
第四部分 实战篇
第7章 实战1:去除OPlayer Lite的广告 160
7.1 OPlayer Lite简介 160
7.2 分析源代码结构,并定位广告横幅的代码 161
7.2.1 class-dump获取.h文件 161
7.2.2 猜测广告横幅的出现位置 161
7.2.3 分析PlayView-Controller.h 162
7.3 去除广告横幅,节省流量 167
7.3.1 找到“准备”广告的位置 167
7.3.2 追溯到网络连接的起点 173
7.4 编写调试代码 175
7.4.1 编写Tweak_OPlayer-Lite.xm 175
7.4.2 编辑control 176
7.4.3 编辑RemoveOPlayer-Ads.plist 176
7.4.4 编辑Makefile 177
7.4.5 编译+打包 177
7.4.6 安装 177
7.5 调试去广告插件 177
7.6 代码结果整理 178
7.7 小结 179
第8章 实战2:WhatsApp消息拦截 180
8.1 WhatsApp简介 180
8.2 分析源代码结构,并定位监听点 180
8.2.1 class-dump获取.h文件 180
8.2.2 导入Xcode 182
8.2.3 找到WhatsAppApp-Delegate 182
8.2.4 找到ChatManager 183
8.3 编写调试代码 184
8.3.1 分析函数列表 184
8.3.2 编写Tweak_Whats-App.xm 185
8.3.3 编辑control 186
8.3.4 编辑monitor.plist 186
8.3.5 编辑Makefile 186
8.3.6 编译+打包 187
8.3.7 安装 187
8.4 调试运行监听插件 187
8.4.1 运行WhatsApp,SSH连接 187
8.4.2 发送/接收消息,监控日志 188
8.4.3 保存数据 189
8.5 代码结果整理 194
8.6 小结 195
第9章 实战3:Instagram图片保存 196
9.1 Instagram简介 196
9.2 分析源代码结构,并定位图片展示点 196
9.2.1 用class-dump获取.h文件 196
9.2.2 导入Xcode 198
9.2.3 找到AppDelegate 198
9.2.4 注入Reveal 199
9.2.5 寻找图片页相关class 200
9.3 保存图片 205
9.3.1 尝试保存图片 205
9.3.2 对.h文件进行瘦身 206
9.3.3 编译测试 208
9.4 弹出提示菜单 208
9.4.1 弹出菜单代码 208
9.4.2 使用Theos新增函数 210
9.4.3 使用runtime新增函数 211
9.5 代码结果整理 214
9.6 小结 215
第10章 实战4:iOS电话操作 216
10.1 常用电话操作 216
10.2 分析源代码结构,并定位电话操作的代码 216
10.2.1 class-dump获取.h文件 216
10.2.2 寻找拨打电话的函数 217
10.2.3 寻找接听电话的函数 229
10.2.4 寻找挂断电话的函数 234
10.2.5 寻找删除通话记录的函数 236
10.2.6 寻找拦截电话的方法 238
10.3 编写调试代码 250
10.3.1 编写Tweak_Phone-Operation.xm 250
10.3.2 编辑control 254
10.3.3 编辑Phone-Operation.plist 255
10.3.4 编辑Makefile 255
10.3.5 编译+打包+安装 255
10.4 调试电话操作插件 255
10.5 代码结果整理 257
10.6 小结 257
编写tweak——新时代的hacking 258

序言
前  言
为什么要写这本书
两年前我正式从传统网络设备行业转行进入移动互联网行业,当时正是移动应用开发市场最火爆的时候,创业公司如雨后春笋般成立,社交类App更是大受追捧,只要有一个不错的构想就可能拿到千万级投资,高价挖人组队的信息更是让人眼花缭乱。那时我已经开发了几个颇具难度的企业应用类App,对于那些轻量级的普通社交App不是太看得上,想着要玩点比较酷的技术,机缘巧合进入了安全管家(北京安管佳科技有限公司),从零开始组建iOS团队,负责包括越狱方向在内的iOS开发。
其实iOS越狱开发就是基于iOS的逆向分析工程,那个时候我并没有这方面的经验,面向的是一个完全未知的领域,不过好在有Google,国内国外的信息多少还是能够搜到点,而且对于iOS开发者,越狱开发/逆向分析并不是一个完全隔离的世界,虽然被分享出来的都是些零零散散甚至重复度很高的知识,但是只要投入大量精力,把知识归纳总结,慢慢也就整理出一幅完整的图谱。
然而独自一人学习的过程是孤独的,尤其是遇见困难和问题无人交流,让人一筹莫展。每次一个人扛下所有问题的时候,总是感叹:要是有一个水平不错的交流者该是多么幸福?虽然也可以给Ryan Petrich(@rpetrich)等一线大牛发邮件请教,但很多在我们看来当时解决不了的难题在这类高手眼中可能就是个低级问题,不苦心钻研一番根本不好意思去问。这个阶段大概持续了有大半年,直到2012年在微博上遇到本书的另一作者snakeninny,那时他还是一个面临毕业的研究生,整天“不务正业”地研究iOS底层,而且研究得还相当有深度。我曾和他提过:“你看,有多少人都投入到App领域捞钱去了,你咋不去呢?”他说: “小弟的目标远大,要玩就朝着国际一线大牛的目标去!”小兄弟,你够狠!
不过,多数时候我们都是自己在折腾,虽然偶尔在网上交流一下问题及解决方法,但往往能分享得到一些有价值的内容。在一起合写本书之前,我们曾经合作逆向分析过陌陌,做了一个插件用于在陌陌iPhone版上把美女的位置标注在地图上,当然我们都是善意的开发者,主动将这个漏洞告诉了陌陌,他们很快就修复了。这次,我们再次合作,将逆向分析这个方向的知识整理出版,呈现给各位读者。
在接触越狱开发/逆向分析的这两年,个人感觉最大的收获就是看待App时,完全以一种庖丁解牛的眼光去审视:App如何构成、性能如何间接反映出开发团队水平高低。这些经验知识不仅可用于越狱开发,也可用于传统的App开发,至于带来的影响,有正有负吧。我们不能因为所谓正统的iOS平台不提倡越狱就否定这个领域的存在,盲目相信那些安全问题不存在不过是掩耳盗铃。
有经验的开发者都明白,知识掌握得越深,越会接触到底层技术。比如sandbox保护机制之外到底有什么?runtime只用来研究理论知识是不是有点大材小用了?
在Android领域,底层技术已经被扩散开,而在iOS领域,这个方向展现出来的内容还只是冰山一角。虽然国外也有几本iOS安全方向的书籍,比如《Hacking and Securing iOS Applications》、《iOS Hacker’s Handbook》,但是内容太难,多数人读不出所以然,不适合中国国情,即使我们这些有一定经验的开发者,读这些书也像是在读大学教科书。
阳春白雪不为我们这些喜欢实践的技术宅所好,那么就来点下里巴人的,不必遮遮掩掩,直接全面展开这些知识岂不是更痛快?于是就有了我们这本书,书中的内容以工具+代码的形式全面、系统地展开知识点,由浅入深,图文并茂,旨在带着读者一步步地探索常规iOS App之外的世界。我们不会像一些技术博客那样貌似很高深的独立分析某一片段的代码,而是尽我们所能将一个完整的知识体系呈现给读者,相信读者一定会有所收获。
国内投入在越狱开发这个方向的人并不算少,但都比较低调,而且多集中在大公司中,比如腾讯、360、91、WeiPhone,他们积累的技术非我们这些散兵游勇所能及,不过我们更愿意先将这些知识分享出来,希望能够抛砖引玉。
读者对象
本书主要面向以下读者:
对iOS系统有浓厚兴趣的读者;
中高级iOS开发人员,他们在掌握了普通App开发之后对iOS有更深的渴求;
架构师,因为在逆向App的整个过程中,有心的技术人员能看到那些经典App在结构设计上的经验、优势,并博采众长,有助于整体架构设计水平的提高;
在别的系统上从事逆向工程,想要转向iOS系统的逆向工程师。
如何阅读本书
本书将分为四大部分,分别是概念、工具、理论和实战。前三部分介绍iOS逆向分析这个领域的背景、知识体系,以及相应的工具集、理论知识;第四部分则具体以4个实际案例将前面的知识以实战的方式展开,让读者可以实践验证前面学到的知识并进一步更扎实地掌握相应的知识。
如果读者不具备一定的逆向分析经验,建议还是从头开始按顺序阅读,而不要直接跨越到第四部分去模拟实战。虽然实战的成果似乎比较炫,但弄个半懂不懂也没意思对不对?
第一部分为概念篇,将简单介绍iOS逆向分析的概念以及iOS平台系统架构。
第二部分为工具篇,将会介绍一系列基于Mac和iOS平台的配套工具,并且重点讲解其中的class-dump、Theos、Reveal、IDA、GDB等5个工具的使用方法,前3个侧重于使用,后2个侧重于分析。
第三部分为理论篇,除了介绍iOS逆向/越狱这个方向的理论知识之外,还顺带聊了一点 iOS逆向/越狱方向的国际一线大牛们的八卦,轻松一下。
第四部分为实战篇,将通过对3个App Store App及1个系统App进行逆向分析的实战操作,让读者能够了解并同步实践已掌握的知识。
勘误和支持
由于作者的水平有限,编写的时间也很仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正,欢迎微博联系@iOS应用逆向工程,或访问我们的技术博客http://iosre.com,我们将尽量为读者提供满意的解答。如果你有更多的宝贵意见,也欢迎你通过微博或技术博客与我们联系,我们很期待能够听到你们的真挚反馈。
致谢
首先要感谢Jay Freeman(@saurik)这样的顶级高手,他奠定了越狱iOS的基石。还要感谢Dustin Howett(@DHowett),是他提供的Theos这样强大的开发工具让我得以迈进iOS逆向分析的大门。
感谢安全管家,为我进入iOS逆向领域提供了一个能充分发挥的环境,虽然我早已离开,但希望它发展得更好。
感谢微博上每一位热心的朋友——唐巧_boy、卢明华、你在瓦西里、isdada、Jagie、onevcat、戴铭、费西FISH、xuzhanji、Life无法Debug、移动开发小冉、HorseLuke、网络蝎子、hongjiang_wang、月之舞狼、StayNStay、bluesea哈哈哈、郑州IOS、青年土豆的烦恼、木土吉吉,以及这个仓促写就的名单之外的更多朋友,感谢他们对我的支持和鼓励。特别感谢唐巧_boy的引荐,他的热心帮助促成了本书的合作与出版。
感谢机械工业出版社华章公司的编辑杨绣国老师,感谢她的魄力和远见,在这3个月的时间里始终支持我的写作,她的指点和帮助引导我们顺利完成全部书稿。
谨以此书献给我最亲爱的家人,以及众多热爱iOS开发的朋友们。

吴航(@hangcom2010)

文摘
第一部分
概 念 篇
软件的逆向工程指的是通过分析一个程序或系统的功能、结构或行为,将它的技术实现或设计细节推导出来的过程。当我们因为工作需要,或是对一个软件的功能很感兴趣,却又拿不到它的源代码时,往往可以通过逆向工程的方式对它进行分析。
对于iOS开发者来说,运行在iOS平台上的各种软件是我们知晓的最复杂且超奇妙的虚拟物品之一,它们精巧而细致,新颖且创意十足。作为开发人员,在使用这许多经典的App的同时,除了会称赞App的实现效果之外,也会经常思考:它们的架构是如何搭建的?它们的运行机制又具体是什么样的?


第1章
iOS逆向工程简介
虽然从理论上来说iOS App是一个运行于沙箱(sandbox)中的程序,但并不表示我们就对它束手无策,事实上,可以通过逆向工程来一窥其究竟。接下来,就引入iOS软件逆向工程的概念。
1.1 iOS软件逆向工程的要求
iOS软件逆向工程指的是在软件层面上进行逆向分析的一个过程。读者如果想要达到对iOS软件较强的逆向分析能力,最好能非常熟悉iOS设备的硬件构成、iOS系统的运行原理,还要具备丰富的iOS开发经验。比如:拿到一个App之后能够清晰地推断出这个App使用的技术,包括引用了哪些framework、哪些经典的第三方代码,以及整个App工程大致的文件个数、大致的代码行数,另外,还要想象一下如果由自己来组织设计开发,需要投入的人员、时间和精力等。
这要求高吗?其实真的不算高!不过,这些条件都是充分非必要的。如果你目前还不具备这些技术条件,那么有两个必要条件则一定要满足:强烈的好奇心和锲而不舍的精神。因为在iOS软件逆向工程中,好奇心会驱动你去钻研经典的App,而在钻研的过程中会遇到一系列的困难和障碍,各种各样的技术坑,别人埋的、自己挖的,此时就需要锲而不舍的精神来支撑你一步步向前走。但是请相信,在投入大量精力去编写代码、调试程序、分析逻辑之后,你会在不断的试验和错误中感受到逆向工程的艺术之美。

内容简介
本书是iOS应用逆向工程方面的权威著作,三位作者都是iOS领域内的专家,拥有扎实的理论知识和丰富的实践经验。本书内容以工具+代码的形式全面、系统地展开知识点,由浅入深,图文并茂地带着读者一步步探索常规iOS App之外的世界。
本书分为四大部分,分别是概念、工具、理论和实战。前三部分介绍iOS逆向分析领域的背景、知识体系,以及相应的工具集、理论知识;第四部分则通过4个实际案例来将前面的知识以实战的方式展开。第一部分为概念篇,简单介绍iOS逆向分析的概念以及iOS平台系统架构。第二部分为工具篇,介绍一系列基于Mac和iOS平台的配套工具,并且重点讲解其中的class-dump、Theos、Reveal、IDA、GDB等5个工具的使用方法,前3个侧重于使用,后2个侧重于分析。第三部分为理论篇,主要讲述iOS逆向/越狱方向的进阶必备理论知识。第四部分为实战篇,通过对3个App Store App及1个系统App进行逆向分析的实战操作,让读者能够了解并同步实践已掌握的知识。

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多