苹果手机的应用市场分为App Store
和非App Store
(PP助手
、爱思助手
)。
我们平时编写的代码最后发布到App Store
的时候苹果会对包进行一个加密,生成一个壳程序,防止被篡改。也就是说在App Store
上下载的程序都是被加过壳,其他越狱市场下载的一般是没有加过壳的。有很多方式可以看是否已经加过壳了,下面简单介绍一下。
class-dump方式
class-dump
通过传入一个可执行文件,可以导出该文件的所有类的头文件,下载地址,下载后的文件建议放到/usr/local/bin
目录下,就不用改环境变量了,也可以放到你的环境变量的目录下,通过下面的命令查看自己电脑的的环境变量
1 | echo $PATH |
我手机上有上面几个应用,除了网易严选
其他都是从App Store
上下载的,就拿淘宝
和网易严选
做个对比看下这2个包分别使用class-dump
后会生成什么。在手机上分别打开2个应用后使用命令ps -A
找到安装目录,我这台手机上2个包的安装目录分别如下
网易严选
1 | /var/mobile/Containers/Bundle/Application/A0149F19-C83C-4800-B5A4-27AF0ECCCB1B/NeteaseYanxuan.app/NeteaseYanxuan |
淘宝
1 | /var/mobile/Containers/Bundle/Application/52E9162D-FB0C-4E79-A711-D94DCD7C102A/Taobao4iPhone.app/Taobao4iPhone |
找到对应的文件,复制到我们的Mac
下,自己找个目录存放着,我这里放到我的电脑的~/Desktop/jailbreak/testClassDump
,分别执行class-dump
命令
淘宝
1 | ➜ taobao class-dump -H Taobao4iPhone -o headers // -H 表示导出头文件 -o 表示导出的东西放置到headers文件夹下 |
此时的目录如下
1 | ➜ taobao tree |
发现在headers
下只会生成一个CDStructures.h
,一般导出这个的就是加过壳的程序了.再来看看网易严选
1 |
|
有很多文件,这里就不全部列举了,像这种的能解析出很多的头文件的一般就是没有加壳的了。
随便挑一个文件看看里面的内容以_BKObserver
为例
1 | // |
可以看到有很多方法和成员变量,不由得会问是所有的方法都dump
出来了吗,我们写个demo工程测试一下
1 | .h |
发现class-dump
以后
1 | #import "UIViewController.h" |
除了静态方法、静态变量、全局方法都dump下来了,也就是属于这个类的都dump
下来了,不禁会想有些重要的敏感数据可以考虑放到全局或者静态中去,因为就dump
来说,一般是查看不到的,达到一定的防破解的能力。
使用MachOView工具
MachOView
是专门用来查看MachO
文件的工具,官网的下载地址安装会有闪退,这里我自己修改了下并重新生成点击下载安装,分别拖进工具中查看load commands
中的LC_ENCRYPTION_INFO
中的Crypt ID
这个值为1
就是加过壳了,为0
就是没有加壳
otool命令
使用-l
参数就是load command
的意思。
1 | ➜ wangyiyanxuan otool -l NeteaseYanxuan | grep crypt |
如果查到有2个,就是这个二进制里面有2个架构的包而已。
脱壳-Clutch
脱壳的意思就是把App Store
上加的壳程序给去掉,下面介绍2个常用的吧。
<1>. 下载:Clutch
,下载地址 ;1>
<2>. 安装:要想命令行能直接使用,最好放在手机的/usr/bin
目录下;2>
如果权限不够的话,可以增加下权限,chmod使用介绍
1 | chmod 777 /usr/bin/Clutch |
<3>. 使用: 3>
使用i
可以查看所有需要脱壳的应用
1 | iPhone:~ root# Clutch -I |
使用d
可以对应用进行脱壳
1 | Clutch -d com.taobao.taobao4iphone |
脱壳成功的话在最后会有生成的路径
1 | DONE: /private/var/mobile/Documents/Dumped/com.taobao.taobao4iphone-iOS8.0-(Clutch-2.0.4).ipa // 这个就是脱壳成功的ipa |
脱壳 - dumpdecrypted
<1>.下载 1>
<2>.放到/var/root
目录下,其他当前用户有读写权限的目录下都可以2>
<3>.使用3>
1 |
|
方式如下
1 | iPhone:~ root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/52E9162D-FB0C-4E79-A711-D94DCD7C102A/Taobao4iPhone.app/Taobao4iPhone |
脱壳成功的话会在dumpdecrypted.dylib
库的目录下生成Taobao4iPhone.decrypted
文件
重新再使用之前介绍的方式看看发现都已经脱壳成功了。