iOS逆向工程(1)越狱平台介绍

前提

(1)什么是越狱:
  • 越狱是指通过分析iOS系统代码,找出iOS系统漏洞,绕过系统安全防护,获取系统root权限的过程。

  • 越狱过后就可以访问设备的整个文件系统、更改系统外观,功能等。

(2)Cydia是什么:

在手机越狱后,会自动安装一个叫Cydia的软件,这个软件相当于针对越狱设备的App Store,里面有很多类似 系统修改、应用插件,破解插件等相关的软件包。

一、逆向工程的要求

1,具备丰富的 iOS 开发经验。
2,最好能非常熟悉 iOS 设备的硬件构成,iOS 系统的运行原理。
3,拿到任意一个 App 之后能够大致推断出它的项目规模和使用的技术,比如它的MVC模型
是怎么建立的,引用了哪些 framework 和经典的开源代码。
个人建议:最好了解下如何进iOS系统的安全模式,因为有时候万一系统搞坏了,可以进入安全模式卸载掉有问题的插件。

其它要求
1,一台越狱过的iOS设备(可利用PP助手进行越狱。)
2,设备安装了Open SSH,用于传输文件等作用,可以在Cydia里面搜索到。
如果你目前还不具备这些充分条件,那么一定要满足两个必要条件:
-------- (强烈的好奇心)(契而不舍的精神)--------

二、iOS 应用逆向工程的作用

1,一般的 App 防护,感觉就像是一个 , 将 App 的 MVC 布置在城堡内部 , 外围圈上厚厚的 ,看上去易守难攻。


防御良好的 (图片来自 客信条)

但是当我们站到高处,在天空中俯瞰这个 App 所在的城堡,它的内部结构就不再是秘密。


(图片来自 刺客信条)

如果我们站在巨人的角度,那么所有的 Objective-C 函数定义、所有的 property、所有的导出函数、所有的全局变量、所有的逻辑将完全暴露在我们面前。

iOS 逆向工程主要有两个作用:
1,分析目标程序,拿到关键信息,可以归类于安全相关的逆向工程;
2,借鉴他人的程序功能来开发自己的软件。

三、安全相关的iOS逆向工程

  1. 评定安全等级
  2. 逆向恶意软件
  3. 检查软件后门
  4. 去除软件使用限制

四、开发相关的iOS逆向工程

  1. 逆向系统API
    可逆向系统API后,扩展iOS系统的功能,众所周知,能在 AppStore 上架的 App 的功能十分有限,在苹果公司严格的审核制度下,绝大多数 App 的实现都源于公开的开发文 ,而不能使用例如发短信、打电话等文档中不涉及的功能。
  2. 借鉴别人的软件
    比如通过逆向那些软件,可以从 App 中把它们的设计思路抽象出来为我所用,从而提高自己 App 的精致程度。

五、iOS应用逆向工具

1,监测工具Reveal:能够辅助定位 App 中我们感兴趣的部分,让我们能够迅速从 UI 层面切入代码层面。
2,反汇编工具:IDA和Hopper
3,调试工具:LLDB调试器
4,Theos 和iOSOpenDev

一、iOS 系统结构

1,对于未越狱的 iOS设备,苹果官方开放给第三方直接访问 iOS文件系统的接口非常有限。
2,越狱后能够访问 iOS 全系统文件,这是开展 iOS 逆向工程的首要前提。

二、iOS 目录结构简介

/:
根目录,以斜杠表示,其他所有文件和目录在根目录下展开。

/bin:
“binary”的简写,存放提供用户级基础功能的二进制文件,如 ls、ps 等。

/boot:
存放能使系统成功启动的所有文件。iOS 中此目录为空。

/dev:
“device”的简写,存放BSD设备文件。每个文件代表系统的一个块设备或字符设备,一般来说,“ 设备”以块为单位传 数据,如硬盘;而“字符设备”以字符为单位传输数据,如调制解调器。

/sbin :
“ system binaries”的简写,存放提供系统级基础功能的二进制文件,如 netstat、reboot 等。

/etc :
“Et Cetera”的简写,存放系统脚本及配置文件,如 passwd、hosts 等。在 iOS中,/etc 是一个符号链接,实际指向 /private/etc。

/lib:
存放系统库文件、内核模块及设备驱动等。iOS 中此目录为空。

/mnt:
“mount”的简写,存放临时的文件系统挂载点。iOS 中此目录为空。

/tmp:
临时目录。在 iOS 中,/tmp 是一个符号链接,实际指向 /private/var/tmp。

/usr:
包含了大多数用户工具和程序。/usr/bin包含那些/bin和/sbin中未出现的基础功能,如 nm、killall 等;/usr/include 包含所有的标准C 头文件;

/usr/lib:
存放系统库文件。

/var :
“ variable”的简写,存放一些经常更改的文件,比如日志、用户数据、临时文件等。

/var/mobile和 /var/root 分别存放了 mobile 用户和 root 用户的文件,是重点关注的目录。

iOS 的独有目录:

/Applications:
存放所有的系统App和来自于Cydia的App,不包括 StoreApp。

/Developer:
如果一台设备连接Xcode后被指定为调试要的工具和数据,

/Library:
存放一些提供系统支持的数据,其中/Library/MobileSubstrate 下存放了所有基于 CydiaSubstrate(原名 MobileSubstrate)的插件。

/System/Library :
iOS 文件系统中最重要的目录之一,存放大量系统组件,其目录结构

/System/Library/Frameworks和/System/Library/PrivateFrameworks:存放iOS中的各种 framework,其中出现在 SDK 文档里的只是冰山一角,还有数不清的未公开功能等待我们去挖 。

/System/Library/CoreServices里的SpringBoard.app:
iOS 面管理器(类似于Windows里的explorer),是用户与系统交流的最重要中介。

/User:
用户目录,实际指向/var/mobile,这个目录里存放大量用户数据,比如:
● /var/mobile/Media/DCIM下存放照片;
● /var/mobile/Media/Recordings下存放录音文件;
● /var/mobile/Library/SMS下存放短信数据 ;
● /var/mobile/Library/Mail下存放邮件数据。

上面的介绍只是整个 iOS 目录结构的九牛一毛,更详细的讨论,尽在 http://bbs.iosre.com

三、iOS 二进制文件类型

在iOS逆向工程初学阶段,我们的目标主要是Application、Dynamic Library(以下 dylib)和 Daemon 这三类二进制文件。

1, Application相关概念
bundle:是一个按某种标准结构来组织的目录,其中包含了二进制文件及运行所需的资源。正向开发中常见的 App 和 framework都是以bundle的形式存在的;在越狱iOS中常见的PreferenceBundle,可以看成是一种依附于Settings 的 App。Settings 的 App,结构与 App 类似,本质也是 bundle。

Framework 也是 bundle,但 framework 的 bundle 中存放的是一个 dylib,而不是可执行文件。相对来说,framework的地位比 App 更高,因为一个 App 的绝大多数功能都是通过调用 framework 提供的接口来实现的。将某个 bundle 确立为逆向目标后,绝大多数逆向线索都可以在 bundle 内找到,这大大 低了逆向工程的复杂度。

App 目录 :
Info.plist 文件记录了App的基本信息,如bundle identifier、可执行文件名、图标文件名等。
可以通过 Xcode 自带的命 行工具 plutil 查看bundle identifier的值,如下:

plutil -p /Users/snakeninny/Code/iOSSystemBinaries/8.1_iPhone5
/SiriViewService.app/Info.plist | grep CFBundleIdentifier

lproj目录:lproj目录下存放的是各种本地化的字符 (.strings),是iOS逆向工程的重要线索,也可以用 plutil 查看,如下:

plutil -p /Users/snakeninny/Code/iOSSystemBinaries/8.1_iPhone5
/SiriViewService.app/en.lproj/Localizable.strings

安装包格式与权限:
Cydia App 的安装包格式一般是 deb,StoreApp 的安装包格式一般是 ipa。其中 deb 是来自 Debian 的安装包格式,由 Cydia 作者 saurik 移 到 iOS 中,它的 主用户和 主组一般是 root 和 admin,能够以 root权限运行;而 ipa 是苹果为 iOS 推出的专用App安装包格式, 主用户和 主组都是 mobile,只能以 mobile权限运行。

2, Dynamic Library:
1,在 Xcode 工程里导入的各种 framework,链接的各种 lib,其实本质都是 dylib。
2,Cydia 里的各种 tweak 无一不是以 dylib 的形式工作的,正是这些 tweak 的存在让我们能够随意定制自己的 iOS。
3,在iOS中,lib分为static和dynamic两种,其中static lib在编译阶段成为App可执行文件的一部分,会增加可执行文件的大小。
4,dylib 则相对“智能”一些,它不会改变可执行文件的大小,只有当 App 需要用到这个 dylib 时,iOS 才会把它加载进内存,成为 App 进程的一部分。
5,dylib 的权限是由它寄生的那个 App 决定的,同一个 dylib 寄生在系统 App 和 StoreApp 里时的权限是不同的。

参考书籍 <iOS应用逆向工程-第2版> 沙梓社 吴航 * 著

下一篇:iOS逆向工程(2)工具介绍

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容