KM的博客.

iOS越狱初体验

字数统计: 3.6k阅读时长: 16 min
2020/01/15

iOS越狱初体验

iOS越狱能做到什么?

  • 查看 第三方APP UI 排版方式、布局实现技术
  • 获取三方App内部资源 .assets/.plist/icon…
  • 修改APP 功能重新打包 (EX: 去广告)
  • 反编译推测原始工程代码内容
  • dump 出 .h 头文件 / keycahin / db

越狱环境

macOS 版本:10.15 Catalina
iOS 版本:iPhone 5s (iOS 9.0.1/ 完美越狱*必要)
Cydia: Open SSH

逆向工程大致流程:

  1. 解密并导出应用程序、class-dump导出头文件
  2. 从当面界面入手,获取当前界面布局和控制器VC
  3. hook相关类,记录输出调用的顺序和参数
  4. 关键函数,查看调用堆栈,hook测试结果
  5. 静态分析+动态调试分析关键函数的实现逻辑
  6. 模拟或篡改函数调用逻辑
  7. 制作插件或移植到非越狱设备上

1、越狱环境搭建

  • 完美越狱的5c手机iOS8-iOS8.4 or 完美越狱的5s系统iOS9-iOS9.1
  • Mac安装
    • iFunBox:管理文件系统
  • iPhone安装
    • 爱思助手
    • Cydia
  • 通过Cydia安装下面的源到越狱设备上
    • Apple File Conduit 2:可以访问整个iOS文件系统
    • iFile: 可以自由访问iOS文件系统

2、Mac远程登录到iPhone

使用SSH(Secure Shell安全外壳协议)来远程登录iPhone
  • 使用SSH将所有传输的数据加密,防止DNS欺骗和IP欺骗
  • 使用OpenSSH协议让Mac远程登录到iPhone
iPhone上通过Cydia来安装OpenSSH工具
  • Cydia搜索OpenSSH
  • 安装Openssh
  • Mac终端:
    • ssh root@host
    • 输入初始密码alpine
    • 退出登录:exit
1
2
$ ssh root@192.168.0.110
root@192.168.0.110's password:

password for ssh root@host

1
2
3
4
5
$ sudo -s
$ passwd
Changing password for root.
New password:
Retype new password:

报错:ImportError: No module named usbmux

变更服务器身份信息
  • 删除公钥信息:ssh-keygen -R yourIPAddress
  • 删除known_hosts文件:vim ~/.ssh/known_hosts

SSH基于秘钥的客户端认证

在客户端生成一对秘钥:公钥+私钥

1
$: ssh-keygen
  • 一路敲回车键(Enter)即可
  • OpenSSH默认生成的是RSA密钥,可以通过-t参数指定密钥类型
  • 生成的公钥:~/.ssh/id_rsa.pub
  • 生成的私钥:~/.ssh/id_rsa

将客户端的公钥追加到服务器的授权文件尾部:~/.ssh/authorized_keys

1
ssh-copy-id root@yourIPAddress
shell脚本文件
  • 通过sh、bash、source命令执行sh脚本文件

    • sh和bash会在当前shell环境启动一个子进程来执行文件,执行后返回到父进程的shell环境
    • 执行cd时,子进程会进入到cd的目录,但是父进程的环境并未改变-即目录没有改变
  • source

    • 在当前shell环境执行脚本文件
    • 执行cd后自动跳转到cd的目录
    • source可以用”.”代替,比如”.test.sh”使用source来执行shell脚本test.sh

基于秘钥登录

  • 1、在客户端生成一对相关联的密钥,将客户端的公钥信息追加到服务器的授权文件尾部(~/.ssh/authorized_keys):

    • 生成秘钥: ssh-keygen
    • 追加到服务器授权文件:ssh-copy-id root@手机IP地址
    • 复制客户端的公钥:scp ~/.ssh/id_rsa.pub root@服务器主机地址:~
    • SSH登录服务器:ssh root@服务器主机地址
  • 2、执行脚本: python ~/tcprelay.py -t 22:10086

    • 利用usbmuxd编写的py脚本将Mac的10086端口连接到iPhone上的22端口上Mac登录到10086端口: ssh -p 10086 root@localhost
  • 3、Mac登录到10086端口: ssh -p 10086 root@localhost

1
2
5s:~/.ssh root# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDIoCG1j95eGXgui0R8JRMSe2AHGi3RV7L1SNU/06WK21pc4tqwgiUphPwnf+yQ1SlhV4KH6utZWDa4STugDdp+nuUpMF7HYC+4iGSqP6GCpgiV+3ehqHd5cYhPIPUWinISJNJkIYU8HBUTw1Ua9HqTxrrIhV+AbZhKymDDJ+1X3+dnhu0yNZ2W4HpFDwAT9OB4go2PTGROyneHEz72bvcTAqkDdbKjbKOPD61bzlbHJqBAb0wCeTPEYWNwxb+lRcvzFs61TwCuLXQJ+GCyAtKZYzU/I9DGgfhgWQ38xB04rGMPjqOeEDRI9T8j8r3q8wP+K0BJmTlaMhYfl70U1ZUDPbqgfD93IpL4h+Mb0nqvWwkcqaFB4NPgrwvJG5WYWmR1mgu37rzC2f9BDUDz4izwSyEQDk7PwaLuuBfJet6Ro/vdHXGwUhTXP01Tkg+Qj/qcN7aMvPMXHkWNS6v83urRHwFgSSqJ1QC6O3xZlHZeRfPFt7UhcqgAGEgs8K2aCAc= Seven@MLideMacBook-Pro.local
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
5s:~/.ssh root# cd /etc/ssh
5s:/etc/ssh root# ls -l
total 272
-rw-r--r-- 1 root wheel 242153 May 4 2018 moduli
-rw-r--r-- 1 root wheel 1526 May 4 2018 ssh_config
-rw------- 1 root wheel 672 May 4 2018 ssh_host_dsa_key
-rw-r--r-- 1 root wheel 590 May 4 2018 ssh_host_dsa_key.pub
-rw------- 1 root wheel 965 May 4 2018 ssh_host_key
-rw-r--r-- 1 root wheel 630 May 4 2018 ssh_host_key.pub
-rw------- 1 root wheel 1679 May 4 2018 ssh_host_rsa_key
-rw-r--r-- 1 root wheel 382 May 4 2018 ssh_host_rsa_key.pub
-rw-r--r-- 1 root wheel 3227 May 4 2018 sshd_config
5s:/etc/ssh root# cat ssh_host_rsa_key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMQHoD19uC7fQpPXMN6GWR0YcGC7BlmLis4uyuu6hk7bqDADfHlXvU5cJ6gxSkrwjzFrWPcVD5JfyrAWEw2VGMxgtMoBTOjCRciDR+yJioTbeL85r8UdT5CtVDjGkiC+07SGopHnYt1x+45lMIMzdzVbLhKTv+DIm+OIawavJSIOvhHLlf4kFrrj0vuxkDOpV8fSRdnHLKMayQ6dmgFRlYJJSCLx10VLpUhgLA6g3m3wIq5bDSoR75uEYVUYny+itCQxVXFfydKsKncBAlxE2vKKh5Ry/pQaWFBff3jEDgfFtmqGtj5y3MlLjdtqn4zLTE3FwqCAEen63+gR8z4wof
5s:/etc/ssh root#

基于USB登录

  • 下载usbmuxd工具包(下载v1.0.8版本,主要用到里面的一个python脚本:tcprelay.py)
    https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz

  • 1、Mac登录到10010端口:python tcprelay.py -t 22:10010

    2、将iPhone的22端口(SSH端口)映射到Mac本地的10010端口:ssh root@localhost -p 10010

    1
    2
    3
    4
    $ python ~/pathto/python-client/tcprelay.py -t 22:10010

    $ ssh root@localhost -p 10010

3、Cycript动态调试

  • 它是Objective-C++、JavaScript、Java等语法的混合产物
  • 用来修改和调试正在运行中的Mac/iOS 应用
  • 官网:http://www.cycript.org/
  • Cydia安装Cycript后,即可在iPhone上调试运行中的App

1、Cycript安装问题

1
2
3
4
5
$ cycript
dyld: Library not loaded: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib
Referenced from: /Users/mli/cycript_0.9.594//Cycript.lib/cycript-apl
Reason: image not found
[1] 8373 abort cycript

方式1:替换libruby.2.6.dylib

解决方式一:由于我的MacOS是版本10.15.4 Catalina,自带ruby版本是2.6

如果你用homebrew已经安装过高版本的Ruby,那么你可以进到/usr/local/Cellar/ruby/2.6.0/lib这个目录下,将libruby.2.6.dylib拷贝一份,然后改名为libruby.2.0.0.dylib。并将改名后的文件拷贝到Cycript.lib目录下即可。

1
2
3
4
5
6
~: $ source .bash_profile
~: $ cycript
cy#

出现cy#表示成功了
control + D可以退出 Cycript。

如果是使用iTerm2+oh my zsh组合,可以在.zshrc配置文件中导入source .bash_profile,这样每次打开就不用手动执行了!

1
2
3
$ open ~/.zshrc
添加配置:source ~/.bash_profile

方式2:安装ruby2.0

方式二:测试该方式对于MacOS Catalina无效,中文博客都是这种方式,brew install ruby@2.0 也无法在Catalina系统上通过,所以直接修改libruby.2.6.dylib为libruby.2.0.0.dylib是简单有效的方法

1、关闭Mac的SIP
  • 电脑重启,听到咚的时候,按住command+R,进入恢复模式
  • 打开终端,输入csrutil disable,重启
2、查看ruby版本安装ruby2.0
1
2
3
4
$ cd /System/Library/Frameworks/Ruby.framework/Versions/
$ ls
2.6 Current
$ brew install ruby@2.0
3、我的ruby版本是2.6直接把本机的ruby版本的复制一份,改为2.0即可

1、关闭系统的禁用新版SIP防护
电脑重启按住command+R,进入恢复模式
打开终端,输入csrutil disable,重启
如果想打开SIP,重复上两步,命令改为csrutil enable

2、禁用SIP之后,在终端输入sudo mount -uw /,然后重启finder
之后就可以对文件夹进行复制了,复制之后,对文件夹和文件名称修改为2.0,就可以正常使用Cycript了

1
2
sudo mkdir -p /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/
sudo ln -s /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.2.6.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib

2、Cycript使用

进程名称/进程ID

终端输入命令行:

1
$ ps -A

启动越狱iPhone上的App如下:

1
2
3
/var/mobile/Containers/Bundle/Application/AAB4F619-1565-4D60-98B7-9A5465674C0E/ElevenPlayer.app/ElevenPlayer
/var/mobile/Containers/Bundle/Application/B15E42B6-EFF0-482A-A184-2E56E18BC096/Taobao4iPhone.app/Taobao4iPhone
/var/mobile/Containers/Bundle/Application/6907C865-4845-4423-92BF-65D61F4B9816/DingTalk.app/DingTalk
  • ElevenPlayer
  • Taobao4iPhone
  • DingTalk

Cycript调试

1、通过Cydia安装Cycript

2、终端输入:

1
cycript -p Taobao4iPhone

Cycript基本语法

  • UIApp: [UIApplication sharedApplication]
  • var 变量名 = 变量值
  • 通过内存地址获取内存中的对象: #内存地址
  • 已经加载的所有OC类:ObjectiveC.classes
  • 获取某个对象所有的成员变量:*对象名
  • 递归打印view的所有子view: view.recursiveDescription().toString()等同于Xcode中的[view recursiveDescription]
  • 筛选某种类型的对象: choose(UIViewController) choose(UITableViewCell)
1
2
3
4
5
6
7
8
9
5s:~ root# cycript -p 1856
cy# UIApp
#"<UIApplication: 0x147e6db70>"
cy# var win = #0x147e6db70.keyWindow
#"<UIWindow: 0x1490eba30; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x1490ed500>; layer = <UIWindowLayer: 0x1490e3f50>>"
cy# UIApp.keyWindow.rootViewController
#"<TBMainViewController: 0x14807b200>"
cy# choose(UICollectionViewCell)
....
  • UIApp.keyWindow.recursiveDescription().toString()可以打印所有层级

3、使用mjcript.cy

基于Cycript实现的一些实用函数,下载地址:https://github.com/CoderMJLee/mjcript

  • 1、下载mjcript库

  • 2、将mjcript.cy文件拖到/usr/lib/cycript0.9

  • 3、SSH连接iOS设备

  • 4、使用Cycript监听APP,通过命令@import mjcript 导入

以前获取当前控制器

1
2
cy# UIApp.keyWindow.rootViewController.presentedViewController
cy# #0x1483cb600.childViewControllers

mjcript获取当前控制器

1
2
cy# MJFrontVc()
cy# MJVcSubviews(#0x12fe775e0)

获取实例方法和类方法

1
2
cy# MJInstanceMethods(#0x12fe775e0)
cy# MJClassMethods(#0x12fe775e0)

python获取unicode

1
2
3
$ python
>>> unicode('开始使用','UTF-8')
u'\u5f00\u59cb\u4f7f\u7528'

获取网易登录界面

1
2
3
4
cy# MJFrontVc()
#"<NTESNBLoginController: 0x12fe775e0>"
cy# MJFrontVcSubViews(#0x12fe775e0)
cy# [#0x12fe775e0.view addSubview:view]

获取login相关方法

1
2
cy# MJInstanceMethods(#0x12fe775e0,/login/)
[{selector:@selector(loginEngine),type:&"@16@0:8"},{selector:@selector(loginBtnDidClicked:),type:&"v24@0:8@16"},{selector:@selector(loginDelegate),type:&"@16@0:8"},{selector:@selector(loginBottomSafeAreaHeight),type:&"d16@0:8"},{selector:@selector(loginStyleDesc),type:&"@16@0:8"}]

获取login相关成员变量

1
2
cy# MJIvars(#0x12fe775e0,/login/)
{_loginEngine:#"<NTESNBLoginEngine: 0x12fd390e0>",_loginDelegate:#"<NTESNBLoginService: 0x12f024f50>",_loginStyleDesc:#"<UILabel: 0x12fe78000; frame = (25 155; 80 22.5); text = '\xe6\x89\x8b\xe6\x9c\xba\xe5\x8f\xb7\xe7\x99\xbb\xe5\xbd\x95'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x12dff5b80>>"}

4、Reveal安装与使用

安装

  • 当前的Cydia中软件源-http://apt.so/codermjlee已连接不上,直接下载Reveal2Loader_1.0-3的deb文件

  • 下载后直接把deb文件放在手机的Device/var/root路径下

  • 安装之前需要先Cydia中安装ApplistRocketBootstrap

  • Cydia中安装ExtensionList

安装reveal2load报错extensionlist is not installed.:

1
2
3
4
5
6
7
8
9
10
11
12
5s:~ root# dpkg -i Reveal2Loader_1.0-3_iphoneos-arm.deb
(Reading database ... 3159 files and directories currently installed.)
Preparing to unpack Reveal2Loader_1.0-3_iphoneos-arm.deb ...
Unpacking reveal2loader (1.0-3) over (1.0-3) ...
dpkg: dependency problems prevent configuration of reveal2loader:
reveal2loader depends on com.zidaneno5.extensionlist; however:
Package com.zidaneno5.extensionlist is not installed.

dpkg: error processing package reveal2loader (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
reveal2loader

解决方法:

  • Cydia搜索并安装ExtensionList 1.0-1

  • 再次执行 dpkg -i Reveal2Loader_1.0-3_iphoneos-arm.deb

    1
    2
    3
    4
    5
    5s:~ root# dpkg -i Reveal2Loader_1.0-3_iphoneos-arm.deb
    (Reading database ... 3164 files and directories currently installed.)
    Preparing to unpack Reveal2Loader_1.0-3_iphoneos-arm.deb ...
    Unpacking reveal2loader (1.0-3) over (1.0-3) ...
    Setting up reveal2loader (1.0-3) ...
    • done

**The operation couldn’t be completed. **

The app is linked against an older version of the Reveal library. You may need to update the Reveal library in your app.

5、脱壳

5.1 通过ipa获取Mach-O

  • PP助手下载的ipa包是解密后的包

  • Apple Configurator 2下载的ipa包是加密包

使用Apple Configurator 2下载ipa
  • 1、安装Apple Configurator 2

  • 2、进入Finder:~/Library/Group Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/ 获取ipa,记得复制出来,弹框消失后IPA文件也会消失

  • 3、如果在解压ipa包时,出现“IPA已损坏 移除到垃圾篓”之类的提示,可以尝试把后缀名.ipa修改成.zip

  • 4、解压zip包->进入Payload-> 右键显示包内容->获取可执行文件如下

  • 4中获取的可执行文件不能正常导出头文件的话,直接查找越狱设备的一下路径:

    • /var/mobile/Containers/Bundle/Application/可以获取当前越狱设备中安装的应用的.app文件,直接拷贝到Mac的Desktop上

    • ps -A查看当前App也能看到上面这个路径

5.2 Class-dump

1、下载地址:http://stevenygard.com/projects/class-dump/

2、打开终端输入 open /usr/local/bin

3、把dmg文件中的class-dump文件复制到 /usr/local/bin

4、更改权限:终端输入 sudo chmod 777 /usr/local/bin/class-dump

5、显示class-dump的用法和版本: class-dump --help

6、cd 到5.1获取的Mach-O文件所在目录

用终端输入命令 class-dump -H [MachO文件的路径] -o [输出文件夹路径],就可以得到所有的.h文件了

自己编译的项目没有加密,能够解析出来。class-dump不能直接将AppStore上的app的头文件导出来,你只会导出CDStructures.h这个头文件,而这里边基本是没有信息的。相当于Apple在app上加了一层壳(加密了),需要把这层壳砸破。

class-dump -H test.decrypted -o test,但是只能导出CDStructures.h,这个文件,但是

于是就使用class-dump -arch armv64 -H test.decrypted -o test 来导出,竟然能导出所有的头文件了。

5.2查看可执行文件是否加密?

使用MachOView
  • Load Commands -> LC_ENCRYPTION_INFO -> Crypt ID的值
  • 0代表未加密
使用otool
1
otool -l machoFile | grep cycript

5.3、Clutch脱壳

/usr/bin/Clutch Permission denied
1
2
5s:~ root# Clutch
-sh: /usr/bin/Clutch: Permission denied

权限不够,输入命令如下:

1
2
3
4
5
6
7
8
9
10
5s:~ root# chmod +x /usr/bin/Clutch
5s:~ root# Clutch
Usage: Clutch [OPTIONS]
-b --binary-dump <value> Only dump binary files from specified bundleID
-d --dump <value> Dump specified bundleID into .ipa file
-i --print-installed Print installed applications
--clean Clean /var/tmp/clutch directory
--version Display version and exit
-? --help Display this help and exit
-n --no-color Print with colors disabled
Clutch -i 查看可以脱壳的App
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
5s:~ root# Clutch -i
Installed apps:
1: 知识星球 <com.unnoo.quan>
2: 爱思加强版 <com.pd.A4Player>
3: 饿了么 <me.ele.ios.eleme>
4: 暴走漫画 <goodluck.push.baozou>
5: 喜马拉雅「听书社区」电台有声小说相声评书 <com.gemd.iting>
6: 微视 <com.tencent.microvision>
7: 猿辅导-小学初中高中全科在线互动直播课 <com.fenbi.tutor>
8: 今日头条 <com.ss.iphone.article.News>
9: 手机淘宝 <com.taobao.taobao4iphone>
10: 爱奇艺 <com.qiyi.iphone>
11: 全民K歌 <com.tencent.QQKSong>
12: 钉钉 <com.laiwang.DingTalk>
13: 书旗小说 <com.shuqicenter.reader>
14: QQ <com.tencent.mqq>
15: 快手极速版 <com.kuaishou.nebula>
16: 腾讯新闻 <com.tencent.info>
17: 京东 <com.360buy.jdmobile>
18: 腾讯视频 <com.tencent.live4iphone>
19: 微信读书 <com.tencent.weread>
20: 布卡漫画 <bukaios.ibuka.com>
21: 支付宝 <com.alipay.iphoneclient>
22: 快手 <com.jiangjia.gif>
23: 网易新闻 <com.netease.news>
24: 抖音短视频 <com.ss.iphone.ugc.Aweme>
Cluth -d 获取ipa文件
1
2
3
4
5
6
7
8
9
10
11
12
13
5s:~ root# Clutch -d 4
Zipping BaoManReader.app
Swapping architectures..
ASLR slide: 0xd0000
Dumping <BaoManReader> (armv7)
Patched cryptid (32bit segment)
Writing new checksum
ASLR slide: 0x100038000
Dumping <BaoManReader> (arm64)
Patched cryptid (64bit segment)
Writing new checksum
DONE: /private/var/mobile/Documents/Dumped/goodluck.push.baozou-iOS8.0-(Clutch-2.0.4).ipa
Finished dumping goodluck.push.baozou in 29.4 seconds

脱壳后生成IPA文件

IPA生成后的路径: /var/mobile/Documents/Dumped/拷贝到桌面上查看当前的加密状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ otool -l BaoManReader_old | grep crypt
cryptoff 16384
cryptsize 10403840
cryptid 1
cryptoff 16384
cryptsize 11370496
cryptid 1
存在加密id
$ otool -l BaoManReader | grep crypt
cryptoff 16384
cryptsize 10403840
cryptid 0
cryptoff 16384
cryptsize 11370496
cryptid 0
不存在加密的id
class-dump导出头文件headers
1
$ class-dump -H BaoManReader -o Headers
CATALOG
  1. 1. iOS越狱初体验
    1. 1.1. iOS越狱能做到什么?
    2. 1.2. 越狱环境
    3. 1.3. 逆向工程大致流程:
    4. 1.4. 1、越狱环境搭建
    5. 1.5. 2、Mac远程登录到iPhone
      1. 1.5.0.0.1. 使用SSH(Secure Shell安全外壳协议)来远程登录iPhone
      2. 1.5.0.0.2. iPhone上通过Cydia来安装OpenSSH工具
    6. 1.5.0.1. password for ssh root@host
    7. 1.5.0.2. 报错:ImportError: No module named usbmux
      1. 1.5.0.2.1. 变更服务器身份信息
      2. 1.5.0.2.2. shell脚本文件
    8. 1.5.0.3. 基于秘钥登录
    9. 1.5.0.4. 基于USB登录
  • 1.6. 3、Cycript动态调试
    1. 1.6.1. 1、Cycript安装问题
      1. 1.6.1.1. 方式1:替换libruby.2.6.dylib
      2. 1.6.1.2. 方式2:安装ruby2.0
        1. 1.6.1.2.1. 1、关闭Mac的SIP
        2. 1.6.1.2.2. 2、查看ruby版本安装ruby2.0
        3. 1.6.1.2.3. 3、我的ruby版本是2.6直接把本机的ruby版本的复制一份,改为2.0即可
    2. 1.6.2. 2、Cycript使用
      1. 1.6.2.1. 进程名称/进程ID
      2. 1.6.2.2. Cycript调试
      3. 1.6.2.3. Cycript基本语法
    3. 1.6.3. 3、使用mjcript.cy
      1. 1.6.3.1. 以前获取当前控制器
      2. 1.6.3.2. mjcript获取当前控制器
      3. 1.6.3.3. 获取实例方法和类方法
      4. 1.6.3.4. python获取unicode
      5. 1.6.3.5. 获取网易登录界面
      6. 1.6.3.6. 获取login相关方法
      7. 1.6.3.7. 获取login相关成员变量
  • 1.7. 4、Reveal安装与使用
    1. 1.7.1. 安装
      1. 1.7.1.1. 安装reveal2load报错extensionlist is not installed.:
      2. 1.7.1.2. **The operation couldn’t be completed. **
  • 1.8. 5、脱壳
    1. 1.8.0.1. 5.1 通过ipa获取Mach-O
      1. 1.8.0.1.1. 使用Apple Configurator 2下载ipa
    2. 1.8.0.2. 5.2 Class-dump
    3. 1.8.0.3. 5.2查看可执行文件是否加密?
      1. 1.8.0.3.1. 使用MachOView
      2. 1.8.0.3.2. 使用otool
    4. 1.8.0.4. 5.3、Clutch脱壳
      1. 1.8.0.4.1. /usr/bin/Clutch Permission denied
      2. 1.8.0.4.2. Clutch -i 查看可以脱壳的App
      3. 1.8.0.4.3. Cluth -d 获取ipa文件
      4. 1.8.0.4.4. class-dump导出头文件headers