书海网短评:
这是一本从基础、理论、实践到保护,全面介绍iOS应用逆向与安全的书。通过阅读本书,读者不仅可以快速上手编写iOS插件,还可以深入理解逆向原理、扩展iOS安全方面的相关知识。《iOS应用
这是一本从基础、理论、实践到保护,全面介绍iOS应用逆向与安全的书。通过阅读《iOS应用逆向与安全》,读者不仅可以快速上手编写iOS插件,还可以深入理解逆向原理、扩展iOS安全方面的相关知识。
《iOS应用逆向与安全》从正向开发、工具的使用、逆向实战及安全保护等方面,对iOS应用的逆向与安全进行了讲解。《iOS应用逆向与安全》内容包括基本概念、逆向环境的准备、常用逆向分析工具、类的结构、App签名、Mach-O文件格式、hook原理等,并通过在越狱平台和非越狱平台上的逆向分析实例,带领读者学习逆向分析的思路和方法。在应用安全及保护方面,《iOS应用逆向与安全》内容涉及网络传输、安全检测、代码混淆等。
《iOS应用逆向与安全》适合高校计算机相关专业的学生、iOS开发工程师、逆向工程师、越狱开发工程师、iOS安全工程师及应用安全审计人员阅读参考。
刘培庆(@Alone_Monkey)
iOS逆向爱好者,网易云课堂“iOS逆向与安全”主讲。大学毕业后在网易负责iOS安全保护、基础组件开发、质量保障等工作。目前就职于阿里巴巴米诺斯实验室,从事安全保护相关工作。开源作品有MonkeyDev、frida-ios-dump等。
第1章概述
1.1逆向工程简介1
1.1.1iOS逆向学习基础1
1.1.2iOS逆向的流程1
1.1.3iOS逆向使用的工具2
1.1.4iOS逆向的应用场景2
1.2应用面临的安全风险2
1.2.1静态修改文件3
1.2.2动态篡改逻辑3
1.2.3协议分析3
1.3应用保护手段3
1.3.1数据加密3
1.3.2程序混淆4
1.3.3安全监测4
1.4《iOS应用逆向与安全》工具4
1.4.1效率工具4
1.4.2实用工具5
1.4.3逆向工具5
第2章越狱设备
2.1什么是越狱6
2.2Cydia6
2.3SSH7
2.3.1安装OpenSSH8
2.3.2配置dropbear10
2.3.3修改默认密码11
2.3.4公钥登录11
2.3.5通过USB登录13
2.4iOS系统结构14
2.4.1文件目录15
2.4.2文件权限17
2.5CydiaSubstrate18
2.5.1MobileHooker19
2.5.2MobileLoader19
2.5.3Safemode20
2.6越狱必备工具21
2.6.1adv-cmds21
2.6.2appsync21
2.6.3iFile21
2.6.4scp22
第3章逆向工具详解
3.1应用解密23
3.1.1dumpdecrypted23
3.1.2Clutch28
3.1.3小结30
3.2class-dump30
3.2.1class-dump的使用30
3.2.2class-dump的原理33
3.2.3OC和Swift混编40
3.3Reveal41
3.3.1开发集成Reveal41
3.3.2越狱注入Reveal42
3.4Cycript43
3.4.1开发集成Cycript44
3.4.2使用Cycript越狱45
3.4.3使用Cycript分析应用46
3.4.4Cycript的高级用法49
3.5抓包52
3.5.1Charles抓包53
3.5.2修改网络请求55
3.5.3HTTPS抓包59
3.5.4Wireshark抓包60
第4章开发储备
4.1App的结构及构建66
4.1.1获取应用包66
4.1.2应用包的格式71
4.1.3应用的构建过程72
4.2界面结构和事件传递76
4.2.1界面的组成76
4.2.2界面事件的响应79
4.3类与方法83
4.3.1类与方法的底层实现84
4.3.2运行时类的结构89
4.3.3消息机制91
4.3.4runtime的应用94
4.4App签名98
4.4.1配置Xcode签名98
4.4.2App签名的原理100
4.4.3重签名107
第5章分析与调试
5.1静态分析109
5.1.1Hopper109
5.1.2IDA118
5.1.3静态库分析125
5.2动态调试128
5.2.1LLDB调试128
5.2.2LLDB解密141
5.2.3用Xcode调试第三方应用144
5.2.4LLDB的高级调试技巧151
5.3Theos167
5.3.1Theos的安装168
5.3.2Theos的基本应用168
5.3.3Theos的高级应用172
5.4MonkeyDev177
5.4.1安装MonkeyDev178
5.4.2LogosTweak179
5.4.3CaptainHookTweak181
5.4.4Command-lineTool185
第6章逆向进阶
6.1程序加载186
6.1.1dyld简介186
6.1.2dyld加载流程187
6.2Mach-O文件格式206
6.2.1Mach-O文件的基本格式206
6.2.2Mach-O头部208
6.2.3LoadCommand210
6.2.4虚拟地址和文件偏移214
6.2.5懒加载和非懒加载217
6.2.6CodeSignature223
6.3ARM汇编228
6.3.1ARM架构和指令集228
6.3.2AArch64寄存器229
6.3.3指令集编码231
6.3.4AArch64指令233
6.3.5栈和方法236
6.3.6Objective-C汇编245
6.4hook247
6.4.1MethodSwizzle247
6.4.2fishhook248
6.4.3CydiaSubstrate253
6.4.4Swifthook256
6.5动态库259
6.5.1编译和注入260
6.5.2导出和隐藏符号260
6.5.3C++和OC动态库263
6.5.4其他常见问题267
第7章实战演练
7.1越狱设备分析270
7.1.1分析准备270
7.1.2开始分析272
7.1.3编写Tweak284
7.1.4安装与小结287
7.2非越狱设备分析288
7.2.1创建MonkeyDev项目288
7.2.2非越狱逆向实战291
7.2.3编写hook代码303
7.2.4制作非越狱Pod304
7.2.5小结308
7.3Frida实战应用309
7.3.1Frida的安装309
7.3.2Frida的初级使用311
7.3.3Frida的高级使用319
7.3.4小结326
第8章安全保护
8.1数据加密327
8.1.1本地存储加密328
8.1.2网络传输加密328
8.1.3字符串加密333
8.2静态混淆341
8.2.1宏定义342
8.2.2二进制修改347
8.3动态保护349
8.3.1反调试349
8.3.2反反调试352
8.3.3反注入359
8.3.4hook检测360
8.3.5完整性校验361
8.4代码混淆363
8.4.1什么是LLVM363
8.4.2下载和编译LLVM364
8.4.3开发和调试Pass366
8.4.4OLLVM源代码分析373
8.4.5替换Xcode编译器379
8.4.6静态库混淆389
8.5本章总结390
序
第一次和刘培庆见面是在2017年,西湖大道的碧桃小馆。
四月的杭州已是初夏,只穿一件单衣的我,后背仍被汗水浸湿。昏暗的餐厅里,刘培庆坐在角落,一件牛仔夹克扣到顶,看上去又闷又热。我眉头一皱,心生不悦:这人真傻。
高温败了胃口,团购的双人餐,俩大老爷们儿竟然没吃完。结账走人,我们在涌金门一带的巷弄里穿行消食,有一搭没一搭地聊着。刘培庆说,他放弃了晋升的机会,跳到了另一个更辛苦的部门,是因为新部门的业务更吸引他。放弃更舒适的环境和更高的薪水去追求兴趣?兴趣值几个钱?这人真傻。
是夜一别,我们各自忙于生活,很久没有再会。五月某天,微信上突然弹出刘培庆的名字,“狗神,你那《iOS应用逆向与安全》有没有打算再出一版,帮你更新一下”,然后向我介绍了他的更新计划,原来是在《iOS应用逆向工程》的基础上更深入了。我觉得他的内容定位有些超出原书目标读者的水平,于是建议他当作技术博客发出来,算是委婉的回绝。你的原创内容,放在我的书里,如果广受欢迎,名气岂不全让我赚了?这人真傻。
七月的艳阳炙烤着大地,室内活动陡然增多。我要去滨江的HZEcers英语角分享出书经历,地点恰好就在网易旁边,于是邀请了他。没想到这哥们儿把女朋友带了来,两人在活动中一前一后,紧张地用生涩的英语做自我介绍:“Goodafternooneveryone,mynameisLiuPeiqing...”他的生物专业小女友梳着齐刘海,戴着圆框眼镜,英语比他溜得多:“...recentlyI'mlearningprogramming,becauseIwanttohavemorecommontopicswithmyboyfriend...”单纯的出发点,真是傻得可爱。也只有这样的傻姑娘,才会爱上这样的傻小子吧?
没过多久,我的论坛上出现了一个名为MonkeyDev的工具,是刘培庆写的,号称“原有iOSOpenDev的升级,非越狱插件开发集成神器”。我大致浏览了一下,看上去挺复杂,技术含量挺高,但竟然是开源的?!从Git提交记录来看,刘培庆一直在花时间维护它,免费供大家使用。这个年头,还有这样的雷锋,做这样的好事?这人真傻。
金秋十月,刘培庆又在微信上找我,说他要出书了,邀请我写个序。坦白地说,以刘培庆、James等90后为代表的新一代iOS逆向工程师鼓捣出来的新技术,我其实看不懂,也跟不上;同时,因为对库克的失望,我早已不再往苹果系技术上投入更多的精力。我已然从原来技术舞台的主角沦为了看客。“后浪”竟然找已经“死在沙滩上”的“前浪”写序?这人真傻。
但是,傻子刘培庆就在这样的评价中朝着自己的目标一步步前进,最终写出了《iOS应用逆向与安全》,推动了行业的发展。
他让我想起了行业内的其他傻子。
四年前,另一个傻子,不知天高地厚地出版了《iOS应用逆向工程》,填补了市场的空白,受到了读者的欢迎。这个傻子办了个名叫iOSRE的论坛,为所有iOS逆向工程爱好者提供免费、自由、平等、纯净的交流平台,却不做广告、不收赞助,自掏腰包维护论坛。这人真傻。
一个来自加拿大的傻子,为越狱iOS写了个名叫Activator的插件,全球总下载量近2亿次——据说这是乔布斯最喜爱的越狱插件。如果每次下载只收1毛钱,这个傻子也能成为千万富翁,可是他却把Activator免费提供给大家使用。这人真傻。
一个大学辍学的美国傻子,为越狱iOS提供了一套名为Theos的开发工具,它的简单易用吸引了大量人才进入这个领域,为越狱开发的黄金5年揭开了序幕。为了维护这套免费、开源的工具,他每天熬夜到凌晨2点,义务解决用户的问题,优化它的体验,却分文不取。这人真傻。
一个被亲生父母遗弃的傻子,都没正经上过大学,就自不量力地想要“Thinkdifferent”。他创造的产品改变了世界,却积劳成疾,英年早逝,留给后人一句“Stayhungry,stayFOOLISH”。这人真傻。
“……
我不害怕全世界就剩下我一个傻瓜
我要坚持到底,用我的方式
别在意这世界的奇妙
……”
感谢刘培庆这样的傻子们。世界因为你们,变得可爱了一些。
沙梓社
2018年3月28日夜,于杭州
前言
2015年,通过校招,我以Windows安全方向进入网易,组内安排投入iOS安全方向的研究。当时,我连苹果产品都没用过,于是攒了点钱,在淘宝上买了一台可越狱的iPad来研究。因为之前也没有接触过Objective-C,无法深入阅读当时在网上找到的教程,所以只能跟着敲敲代码,看看效果。后来,通过研读念茜的文章,以及国外博客上的一些教程,把基本工具实践了一番,“狗神”沙梓社的书出版后,把他的书认真看了一遍,才算是踏进了门槛。
在那一段学习过程中,我对新的知识点都是囫囵吞枣,一直停留在工具的使用上,没有形成完整的知识体系和深层的认识,一旦出现问题就要花很长的时间去解决。这一点在后面张平引荐我去做网易云课堂的教学视频时感受尤为深刻——当你要规划整个课程时,你必须从全局出发考虑问题,仅仅根据自身的经验、知道工具的使用方法是不够的,只有理解和掌握原理,才能达到举一反三的效果。虽然从准备资料、制作PPT到最后录制视频的过程挺累的,但在这个过程中,我加深了对知识点的理解。这是我第一次录制视频课程,由于经验不足,导致了部分视频在终端的显示字体太小等问题,但总的来说,还是要感谢那些信任我、购买了我的视频课程的人。
后来,有几个朋友建议我出《iOS应用逆向与安全》,把掌握的东西分享出来,也让新人少踩点坑。当时我是有点犹豫的。我不仅担心写书会占用很多时间,也担心自己的水平不够、写得不好。后来,想到视频里面的一些内容需要更新,很多知识点可以补充和完善,加上书籍的学习和沉淀效果也比视频好一些,我就开始做准备,规划每一章的完成时间,每天下班后或者周末在电脑前整理资料、写书,也挺充实的。现在,这《iOS应用逆向与安全》终于和你见面了,希望书中的内容能够帮助你扩充自己的知识面,少走弯路,成为技术大牛。
读者对象
《iOS应用逆向与安全》介绍了iOS开发、逆向和安全等方面的内容,面向以下读者:
*高校计算机相关专业的学生
*iOS开发工程师
*逆向工程师
*越狱开发工程师
*iOS安全工程师
*应用安全审计人员
近几年,iOS开发人员数量激增。正向开发人员应该努力提升自己的竞争力,掌握一些底层技能,为自己开发的应用保驾护航。逆向新人也不要一味追求工具的使用和功能的实现,应该静下心来,基础知识掌握得扎实一些,后面的问题自然迎刃而解。
如何阅读《iOS应用逆向与安全》
考虑到很多逆向分析人员缺乏正向开发和安全保护方面的知识,《iOS应用逆向与安全》将分成以下4个部分进行讲解。
*第1章~第3章是快速上手部分,内容包括一些基本概念的介绍,环境的准备,以及一些常用逆向分析工具的使用和原理。
*第4章~第6章是正向知识储备和进阶部分,内容包括逆向过程中一些理论知识的深入讲解,例如类的结构、App签名、Mach-O文件格式、hook原理等。
*第7章是逆向实战部分,通过在越狱平台和非越狱平台上的逆向分析实例,带领读者学习逆向分析的思路和方法。
*第8章是安全保护部分,内容包括应用安全及保护方面的知识,涉及网络传输加密、动态保护、代码混淆等。
尽管不同的人感兴趣的方面可能不一样,但我还是建议读者能够从头开始阅读《iOS应用逆向与安全》,并把书中提到的每个知识点都实践一遍,以加深理解。
《iOS应用逆向与安全》的源代码可以在GitHub上面找到:
https://github.com/AloneMonkey/iOSREBook
声明
《iOS应用逆向与安全》的写作花费了大量的时间和心血,我只是想帮助大家在学习过程中少走弯路、拓宽知识面、增加技术积累,所以,请支持正版书籍,坚决抵制盗版!另外,《iOS应用逆向与安全》内容仅供技术学习和研究之用,请勿将《iOS应用逆向与安全》内容用于非法商业用途。
勘误
由于知识水平有限,写作过程也比较匆忙,书中难免出现错误及不足,欢迎各位读者指正。同时,我为《iOS应用逆向与安全》开设了一个提交issue的项目:
https://github.com/AloneMonkey/iOSREBook-issues
致谢
感谢我的家人,在我成长的路上一直支持我、鼓励我。
感谢我异地三年的女友,很抱歉没有陪在你的身边。即便如此,你还是不离不弃,一直支持我的选择。
感谢念茜、狗神及在我的学习路上给予我帮助的人,感谢在网易期间的所有同事,是你们让我不断成长。
感谢电子工业出版社提供的平台,感谢编辑潘昕对《iOS应用逆向与安全》内容的把控和指导。
感谢正在阅读《iOS应用逆向与安全》的你,谢谢你的支持和信任。
刘培庆
2018年4月,于杭州








