《IOS逆向工程第二版》随记 | iOS逆向
【记录下有点用的知识点】
- 逆向工程基础随记
- 记录一下学习逆向的一些知识点,想到什么写什么
【主要内容】
一. 前言
规规矩矩写了两年的oc代码,总感觉缺点什么,想更进一步,然后就看到了逆向工程这个词。。。
起初是为了学习大型项目的搭建,学习他们的代码,用以让自己更进一步,于是就看到了《IOS逆向工程第二版》
所以就变成了学习这本书的随笔了
二. 简介
1.逆向工程
软件逆向工程旨在通过分析一个程序或者系统的功能、结构或者行为,将它的技术实现或者细节推导出来的过程
AppStore会对我们下载过来的APP加上一层壳子,这个壳子是对App的一个保护,同时也是对于学习的一大阻碍
学习IOS逆向工程的目的可以是学习他人的优秀代码,也可以是了解这个逆向的过程,同时对于自己的app更进一步的加固,保护重要的数据
不可否认的是这是一把双刃剑,有好处也有坏处,但是不得不学,自己不学,别人学了,不安全的还是自己
2.越狱
未越狱的IOS系统就是一个黑盒子,开放给我们的接口很有限,直到盘古,太极团队将IOS系统越狱了之后,我们就可以愉快的玩耍了
正常IOS开发者,其实对IOS的结构一无所知,原因就在于此
越狱就相当于开通的VIP权限的IOS用户
三. 开始
1.IOS文件权限
ios是一个多用户的操作系统,用户的权限直接决定用户能干什么,mobile用户无法使用root重启IOS,但是root用户却可以,”组”是用户的一种组织形式,一个组可以包含多个用户,一个用户可以属于多个组
ios的文件都有其所对应的属主用户,和属主组,而且文件是有权限的,这个权限说明了文件的属主用户能干什么,属主组能干什么
ios使用3位来表示文件的权限,高到低是: r read,w write ,x execute
2.ios二进制文件类型
Application,daemon,Dynamic library
了解其中的几个概念:1.bundle 存放资源文件,2.info.plist app的基本信息文件(包含bundleid,appname,包名,等等信息,可以使用Xcode或者命令行查看 ),3.lproj 存放本地化的字符串(.string),4.sandbox 沙盒 就是ios对访问机制的一个限制,5.Dynamic library 正常开发中导入的框架都是以lib的形式(ios中的lib又分为静态和动态的,静态的在编译期间会成为打包的时候的一部分 增大app体积,这里插播一条记录 「swift5.0的abi稳定」 ,lib不能自运行,需要寄生在app内次啊能使用,lib的权限是由所存在的app所决定的),6.daemon 守护进程,苹果给开发者灌输的是ios是没有实际意义上的后台的,其实不然,ios是有守护进程的,imagent保障imessage的正常收发,mediaseverd处理音视频文件,比如我们在逆向app中可以使用mediaseverd进行电话录音,只是在正向开发的工程中我们没有相应的权限去使用
工具
逆向过程中使用到不少工具,其中包括Reveal(UI检测工具),ssh,hopper(反汇编工具),theos (开发工具),ifile(文件目录工具)等等
【其他】
记录一下Swift5.0,在使用oc桥接Swift的时候打包出来的体积特别大,原因就是ABI不稳定,苹果还不愿意将lib植入到系统,导致lib是静态的,所以桥接swift出来的包特别大,这个问题应该在5.0ABI稳定之后得以解决
下一篇记录下基础逆向APP过程
先这么多,休息休息······