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

目前针对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 [email protected]

砸壳

  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 [email protected]:/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 [email protected]

  3. 将设备的debugserver拷贝到电脑端 scp -P2222 [email protected]:/Developer/usr/bin/debugserver ~/Desktop

  4. 安装ldid brew install ldid

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

    
    
    com.apple.springboard.debugapplications
    
    get-task-allow
    
    task_for_pid-allow
    
    run-unsigned-code
    
    
    
    
  6. 执行 ldid -Sent.xml debugserver 进行签名

  7. 将增加权限的debugserver拷贝回设备 scp -P2222 ~/debugserver [email protected]:/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


    另附上 设备文件结构

  • ./Applications:存放系统默认预装的应用,不包括从App Store下载安装的应用
  • ./Developer:存放与开发调试相关的文件和工具二进制文件,当设备连接Xcode时选择了“Use for Development”才会被创建
  • ./Library:存放系统应用数据、帮助文件、文档等
    • ./Library/Keychains:设备系统级密码等存放目录
    • ./Library/Logs:系统日志存放目录,./var/logs也指向此目录
    • ./Library/Logs/CrashReporter:系统进程崩溃日志目录
  • ./System:只包含一个名为Library的目录,这个子目录中存放了系统的绝大部分组件,如各种framework,内核模块,字体文件等
    • ./System/Library/LaunchDaemon:系统启动进程plist文件存放目录,若想不启动某进程,删除该目录下对应的plist的文件(操作需慎重,删除之前先备份)
    • ./System/Library/Frameworks:公有框架(开发者可使用)存放目录
    • ./System/Library/PrivateFrameworks:私有框架(开发者不可使用)存放目录
    • ./System/Library/CoreServices/SpringBoard.app:桌面管理器应用,用户与系统交互的中介
  • ./User:用户目录,存放用户的个人资料和配置,iOS中实际指向/var/mobile
  • ./bin:“binary”的简称,存放传统Unix命令(用户级基础功能二进制文件)
  • ./boot:存放能使系统成功启动的所有文件,iOS中此目录为空
  • ./cores:内核转储文件存放目录,当一个进程崩溃时,如果系统允许则会产生转储文件
  • ./dev:“device”的简称,存放BSD设备文件。每个文件代表系统的一个块设备或字符设备
  • ./etc:“Et Cetera”的简称,存放系统脚本及配置文件,如passwd、hosts等。iOS/OS X中/etc实际指向./private/etc
  • ./lib:存放系统库文件、内核模块及设备驱动等,iOS中此目录为空
  • ./mnt:“mount”的简称,存放临时文件系统挂载点,iOS中此目录为空
  • ./private:存放/etc、/var,/sustem_data,/xarts四个链接目录的目标目录
  • ./sbin:“system binaries”的简称,存放Unix管理类命令(系统级基础功能的二进制文件),如netstat、reboot、fdisk、ifconfig等
  • ./tmp:存放临时文件目录,其权限为所有人任意读写,在OS X中实际指向./private/tmp
  • ./usr:存放大量工具和程序,第三方程序安装目录,其中./usr/lib中存放了动态链接库
  • ./var:“variable”的简写,存放一些经常更改的文件,如日志、用户数据、临时文件等,iOS/OS X中./var实际指向./private/var。某些文件在./Library./var都存在,比如Keychains数据、系统日志等
    • ./var/wireless/Library/CallHistory:存放通话记录,网络流量,使用时间等记录
    • ./var/mobile/Containers:存放App Store应用相关文件,其中,子目录/Bundle存放应用可执行文件,子目录/Data存放应用数据
    • ./var/mobile/Library/AddressBook:存放联系人数据
    • ./var/mobile/Library/Calendar:存放日历及提醒事项记录文件
    • ./var/mobile/Library/SMS:存放短信
    • ./var/mobile/Library/Safari:存放Safari保存的书签等
    • ./var/mobile/Media/PhotoStreamsData:存放照片流

你可能感兴趣的:(最新版的越狱砸壳动态调试)