最新版的越狱砸壳动态调试

2021-02-04  本文已影响0人  纯情_小火鸡

目前针对iOS14,checkra1n能做到最简洁的一键不完美越狱。

ios手机端配置

  1. 手机端cydia 添加源:https://build.frida.re
  2. 搜索Frida,进行安装
  3. 安装成功验证
iPhone:~ root# ps -ax | grep frida    
  409 ??         0:00.89 /usr/sbin/frida-server
 2050 ttys000    0:00.01 grep frida

ps -ax | grep frida 为执行命令,看到如上打印即可

Mac端

我们需要安装python ,pip ,frida ,frida-tools。由于Mac自带的Python版本为2.7.x.不建议使用了,因此安装了Python3.7.7版本。如下:

  1. brew install wget //安装wget
  2. wget https://bootstrap.pypa.io/get-pip.py
  3. sudo python3 get-pip.py
  4. sudo pip3 install frida //安装frida
  5. sudo pip3 install frida-tools //安装frida

配置frida-ios-dump环境

  1. 从github下载代码命令: sudo mkdir /opt/dump && cd /opt/dump && sudo git clone https://github.com/AloneMonkey/frida-ios-dump
  2. 根据插件文档equirements.txt安装依赖 :sudo pip3 install -r /opt/dump/frida-ios-dump/requirements.txt --upgrade
  3. dump.py 中默认参数第35行的User,Password,Host,Port可按需进行修改

连接iPhone设备

brew安装usbmuxd,usbmuxd自带工具iproxy,iproxy可以快捷连接iPhone操作

iproxy 2222 22  //执行如下命令把当前连接设备的22端口(SSH端口)映射到电脑的2222端口,那么想和设备22端口通信,直接和本地的2222端口通信就可以

Cydia 安装 openSSH,另开终端进程

ssh -p 2222 root@127.0.0.1

砸壳

  1. python3 dump.py -l           //查看所有app获取对应bundleID
    
  2. python3 dump.py bundleID  //执行完成在当前目录生成ipa
    
  3. otool -l XXX | grep crypt //查看是否脱壳,该信息在LC_ENCRYPTION_INFO_64 Segment中
    

class-dump

  1. 下载对应版本:http://stevenygard.com/projects/class-dump/
  2. open /usr/local/bin 打开终端,将class-dump文件复制到/usr/local/bin
  3. 更改权限 sudo chmod 777 /usr/local/bin/class-dump
  4. 使用:class-dump -H app文件路径 -o 头文件保存路径
  5. 只能针对纯OC,对于Swift 混编代码则会提示:Error: Cannot find offset for address XXX in stringAtAddress:

Reveal

  1. Cydia安装Reveal2Loader
  2. 在设置中允许需要调试的App
  3. Mac端安装Reveal
  4. 在Help-Show Reveal Library in Finder中找到对应版本的RevealServer,复制到设备中: scp -r /Users/XXX/RevealServer.xcframework/ios-arm64_i386_x86_64-simulator/RevealServer.framework root@127.0.0.1:/Library/Frameworks 或者通过其他助手复制到Library/Frameworks中都是可以的

动态调试

手机端App通过debugserver与Mac端的LLDB经过USB进行数据传输

这里有两种方式:一种是用Xcode来进行调试,因为Xcode只能调试开发者自己证书的应用,所以需要重签名App;另一种是命令行调用lldb来调试,需要对 debugserver 赋予更高的权限,因为默认的 debugserver 也只能调试自己证书的App

通过Xcode:

  1. 打开 Xcode ,新建一个 demo, 并插上真机,完成 demo 在真机的调试
  2. ls ~/Library/MobileDevice/Provisioning\ Profiles 找到demo的描述文件
  3. 下载重签名软件 iReSign
  4. 重签名,分别填入砸壳后的ipa,demo的描述文件,demo的BundleID,勾选修改ID,对应的证书
  5. 原路径下生成重签包,如果包含appex,需要针对每一个ID进行修改;或者暴力一点直接删除 Plugins 文件夹和 Watch文件夹
  6. 把重签名的App安装到手机上并运行
  7. Xcode - Debug - Attach to Process by PID or Name 输入进程ID或者名称即可进入调试

通过debugserver + lldb:

  1. 使用iproxy将接设备的端口(SSH)映射到电脑端口 iproxy 2222 22

  2. SSH到USB设备 ssh -p 2222 root@127.0.0.1

  3. 将设备的debugserver拷贝到电脑端 scp -P2222 root@127.0.0.1:/Developer/usr/bin/debugserver ~/Desktop

  4. 安装ldid brew install ldid

  5. 拷贝如下代码,保存成ent.xml,放到同一级目录下,该xml实际上就是给debugserver添加了task_for_pid权限

    <plist version="1.0">
    <dict>
    <key>com.apple.springboard.debugapplications</key>
    <true/>
    <key>get-task-allow</key>
    <true/>
    <key>task_for_pid-allow</key>
    <true/>
    <key>run-unsigned-code</key>
    <true/>
    </dict>
    </plist>
    
  6. 执行 ldid -Sent.xml debugserver 进行签名

  7. 将增加权限的debugserver拷贝回设备 scp -P2222 ~/debugserver root@127.0.0.1:/usr/bin/debugserver

  8. ps -ef 查看当前的进程列表

  9. 执行 debugserver *:1234 -a prossesname/pid 将debugserver附加到进程,并开启1234端口,等待来自IP的LLDB接入

  10. 在Mac系统执行 iproxy 1234 1234 将本地端口映射到手机端口

  11. 在Mac系统启动lldb然后执行 process connect connect://localhost:1234

  12. image list -o -f 找到对应进程的基地址,再配合静态分析获取到的偏移地址就可以动态调试了

  13. 如遇到error: rejecting incoming connection from ::ffff:127.0.0.1 (expecting ::1)报错,则可将第9步改为debugserver 127.0.0.1:1234 XXX

  14. 如遇到error: failed to get reply to handshake packet 报错,则可将第9步把debugserver启动试设置的监听 *:1234 改成 localhost:1234


    另附上 设备文件结构

上一篇 下一篇

猜你喜欢

热点阅读