iOS逆向工程概念篇

最近在看一本关于逆向工程的书籍, 所以把自己学的东西记录起来方便以后复习,在这里分享出来带给需要的人.


类UNIX操作系统常见目录结构:
  1. /: 根目录 斜杠表示, 所有文件和目录在根目录下展开.
  2. /bin: binary缩写, 存放用户级基础功能的二进制文件.如ls ps等.
  3. /boot: 存放使系统成功启动的所有文件.iOS中是空.
  4. /dev: device缩写, 存放BSD设备文件.每个文件代表系统的一块设备或者字符设备,块设备以块为单位传输数据, 如硬盘. 字符设备以字符为单位传输数据, 如调制解调器.
  5. /sbin: system binaries简写.存放提供系统级基础功能的二进制文件.如netstat. reboot等.
  6. /etc: Et Cetera简写, 存放系统脚本及配置文件, 如passwd. hosts等. iOS中/etc是一个符号链接, 实际指向/private/etc.
  7. /lib: 存放系统库文件, 内核模块及设备驱动等. iOS中为空.
  8. /mnt: mount简写, 存放临时的文件系统挂载点. iOS中为空.
  9. /private/var: 存放两个目录, 分别是/private/etc和/private/var.
  10. /tmp: 临时目录. 在iOS 中, 它是一个符号链接, 实际指向/private/var/tmp.
  11. /usr: 包含大多数用户工具和程序. 如nm. killall等. /usr/include包含所有的标准C头文件. /usr/lib存放库文件.
  12. /var: variable简写, 存放一些经常更改的文件, 如日志 用户数据 临时文件等. 其中/var/mobile和/var/root分别存放了mobile用户和root用户的文件, 是重点关注的目录

iOS 文件权限简介
  • iOS 是一个多用户操作系统. 用户是一个抽象的概念, 它代表对操作系统的所有权和使用权.如mobile用户无法调用reboot命令重启iOS . 而root用户可以. 组 是用户的一种组织方式, 一个组可以包含多个用户, 一个用户可以属于多个组.
  • iOS 中的每个文件都有一个属主用户和一个属主组, 或者说这个用户和这个组拥有这个文件.每个文件都有一系列权限, 简单的说就是权限的作用决定文件的属主用户能做什么.属主组能做什么.
  • iOS 用3位(bit)表示文件的权限, 从高到低是 r(read) w(write) x(execute).
  • 文件和用户存在关系有三种:
    1. 此用户是属主用户.
    2. 此用户不是属主用户, 但在属主组里.
    3. 此用户不是属主用户, 但也不在属主组里.

iOS 独有目录
  1. /Applications: 存放所有的系统App和来自于Cydia的App, 不包括StoreApp.
  2. /Developer: 如果一个设备连接Xcode后被指定为调试机, Xcode就会在iOS 中生成这个目录, 其中会含有一些调试需要的工具和数据.
  3. /Library: 存放一些提供系统支持的数据, 其中/Libraty/MobileSubstrate下存放了所有基于CydiaSubstrate的插件.
  4. /System/Library: iOS 文件系统中最重要的目录之一, 存放大量系统组件.
  5. /System/Library/PrivateFrameworks: 存放iOS 中的各种framework.
  6. /System/Library/CoreServices里的SpringBoard.app: iOS 桌面管理器, 是用户与系统交流的最重要中介.
  7. /User: 用户目录, 实际指向/var/mobile. 这个目录存放大量用户数据如: /var/mobile/Media/DCIM下存放照片. /var/mobile/Media/Recordings下存放录音文件./var/mobile/Library/SMS下存放短信数据.
  8. /var/mobile/Containers: 存放storeApp.
  9. /var/mobile/Containers/Bundle: App的可执行文件的bundle目录.
  10. /var/mobile/Containers/Data: App中的数据目录.

目录结构和文件权限
  1. Application: 就是我们的App.

  2. bundle: 不是一个文件, 而是一个按某种标准结构来组织的牡蛎, 其中包含了二进制文件及运行所需的资源. 正向开发中的App和framework都是以bundle形式存在的. 越狱中常见的PreferenceBundle可以看成是一种依附于Settings的App.本质也是bundle.

  3. info.plist: 记录了App的基本信息.如identifier 可执行文件名 图标文件名等.可以通过Xcode自带工具plutil查看.如图:

  4. Iproj目录存放的是各种本地化字符串.(.strings)

  5. /Applications/ 目录存放的是系统App和Cydia下载的App, 而/var/mobile/Containers/目录存放的是StoreApp.

  • 区别如下
  1. 数据目录不同, StoreApp的数据目录在/var/mobile/Containers/Data/下.以mobile权限运行的系统App的数据目录在/var/mobile/下. 而root权限运行的系统App的数据目录在/var/root/下.
  2. CydiaApp的安装包格式是deb, StoreApp安装包格式是ipa. deb是来自Debian的安装包格式, 是Cydia作者saurik移植到iOS 中, 它的属主用户和属主组一般是root和admin, 能够通过root权限运行. 而ipa是苹果为iOS 推出的专属App安装包格式, 属主用户和属主组都是mobile.只能以mobile权限运行.
  3. 沙盒(sandbox) iOS 中的一种访问限制机制. 有时候也会因为沙盒的存在而出现一些奇怪的问题.

Dynamic Library

在Xcode工程里导入的各种framework链接的各种lib本质都是dylib. 可以用file命令验证:

Cydia中的tweak都是以dylib形式工作的.

  • iOS 中lib分为static和dynamic两种. 其中static lib在编译阶段成为App可执行文件的一部分, 会增加可执行文件的大小. 因为App的大小变大, 启动时需要加载的内容变多, 所以导致App变慢. 反之, dylib不会改变可执行文件大小, 当App需要用到这个dylib时, iOS 才会把它加载进内存, 成为App进程的一部分.
  • dylib本身不是可执行文件, 不能独立运行, 他们只能寄生在别的进程里. 因此dylib的权限是由它寄生的那个App决定的. 同一个dylib寄生在系统App和StoreApp里权限是不同的.

后台运行(daemon)
  • daemon为后台运行而生, 给用户提供了各种守护.
  • daemon主要由一个可执行文件和plist文件构成. iOS 根进程launchd, 他会在开机时检查/System/Library/LaunchDaemons和/Library/LaunchDaemons下所有格式符合规定的plist文件. 然后启动对应的daemon. 这里的plist文件和info.plist文件类似.

转载于:https://juejin.im/post/5adda2726fb9a07aae14c8e1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值