iOS Basic Testing Operations

支持 HackTricks

iOS 设备识别与访问总结

识别 iOS 设备的 UDID

为了唯一识别 iOS 设备,使用一个称为 UDID 的 40 位序列。在 macOS Catalina 或更新版本中,可以在 Finder 应用中找到,因为 iTunes 不再存在。设备通过 USB 连接并在 Finder 中选择后,点击其名称下的详细信息即可显示其 UDID 及其他信息。

对于 Catalina 之前的 macOS 版本,iTunes 方便地发现 UDID。详细说明可以在 这里 找到。

命令行工具提供了获取 UDID 的替代方法:

  • 使用 I/O Registry Explorer 工具 ioreg

$ ioreg -p IOUSB -l | grep "USB Serial"
  • 使用 ideviceinstaller 进行 macOS(和 Linux):

$ brew install ideviceinstaller
$ idevice_id -l
  • 利用 system_profiler:

$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
  • 使用 instruments 列出设备:

$ instruments -s devices

访问设备 Shell

SSH 访问 通过在越狱后安装 OpenSSH 包 来启用,允许通过 ssh root@<device_ip_address> 进行连接。更改用户 rootmobile 的默认密码 (alpine) 对于保护设备至关重要。

在没有 Wi-Fi 的情况下,通过 USB 的 SSH 变得必要,使用 iproxy 来映射设备端口以进行 SSH 连接。通过运行以下命令,可以通过 USB 启用 SSH 访问:

$ iproxy 2222 22
$ ssh -p 2222 root@localhost

设备上的 shell 应用程序,如 NewTerm 2,便于直接与设备交互,特别适用于故障排除。反向 SSH shell 也可以建立,以便从主机计算机进行远程访问。

重置忘记的密码

要将忘记的密码重置为默认值(alpine),需要编辑 /private/etc/master.passwd 文件。这涉及将现有哈希替换为 rootmobile 用户条目旁边的 alpine 哈希。

数据传输技术

传输应用数据文件

通过 SSH 和 SCP 进行归档和检索: 使用 tar 归档应用程序的 Data 目录,然后使用 scp 进行传输是简单的。下面的命令将 Data 目录归档为 .tgz 文件,然后从设备中提取:

tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
exit
scp -P 2222 root@localhost:/tmp/data.tgz .

图形用户界面工具

使用 iFunbox 和 iExplorer: 这些 GUI 工具对于管理 iOS 设备上的文件非常有用。然而,从 iOS 8.4 开始,苹果限制了这些工具对应用程序沙箱的访问,除非设备越狱。

使用 Objection 进行文件管理

使用 Objection 的交互式 Shell: 启动 objection 可以访问应用的 Bundle 目录。从这里,您可以导航到应用的 Documents 目录并管理文件,包括下载和上传文件到 iOS 设备。

objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>

获取和提取应用

获取IPA文件

无线分发(OTA)链接: 通过OTA分发进行测试的应用可以使用ITMS服务资产下载工具下载,该工具通过npm安装并用于将IPA文件保存到本地。

npm install -g itms-services
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa

提取应用程序二进制文件

  1. 从IPA文件: 解压IPA以访问解密的应用程序二进制文件。

  2. 从越狱设备: 安装应用程序并从内存中提取解密的二进制文件。

解密过程

手动解密概述: iOS应用程序二进制文件由Apple使用FairPlay加密。要进行逆向工程,必须从内存中转储解密的二进制文件。解密过程涉及检查PIE标志、调整内存标志、识别加密部分,然后转储并用其解密形式替换该部分。

检查和修改PIE标志:

otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
otool -Vh Hello_World

识别加密部分并转储内存:

使用 otool 确定加密部分的起始和结束地址,并使用 gdb 从越狱设备转储内存。

otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000

覆盖加密部分:

用解密的转储替换原始应用程序二进制文件中的加密部分。

dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App

最终解密: 修改二进制文件的元数据以指示没有加密,使用工具如 MachOView,将 cryptid 设置为 0。

解密(自动)

frida-ios-dump

frida-ios-dump 工具用于 自动解密和提取 iOS 设备上的应用。首先,必须配置 dump.py 以连接到 iOS 设备,这可以通过 iproxy 在本地主机的 2222 端口或直接通过设备的 IP 地址和端口完成。

可以使用以下命令列出安装在设备上的应用:

$ python dump.py -l

要转储特定应用程序,例如 Telegram,可以使用以下命令:

$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph

该命令启动应用程序转储,导致在当前目录中创建一个 Telegram.ipa 文件。此过程适用于越狱设备,因为可以使用像 ios-deploy 这样的工具重新安装未签名或伪签名的应用程序。

flexdecrypt

flexdecrypt 工具及其包装器 flexdump 允许从已安装的应用程序中提取 IPA 文件。在设备上安装 flexdecrypt 的命令包括下载并安装 .deb 包。可以使用 flexdump 列出和转储应用程序,如下命令所示:

apt install zip unzip
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
flexdump list
flexdump dump Twitter.app

bagbak

bagbak,另一个基于Frida的工具,需要越狱设备进行应用解密:

bagbak --raw Chrome

r2flutch

r2flutch,利用radare和frida,服务于应用程序的解密和转储。更多信息可以在其GitHub页面找到。

安装应用程序

侧载是指在官方App Store之外安装应用程序。此过程由installd守护进程处理,并要求应用程序使用Apple签发的证书进行签名。越狱设备可以通过AppSync绕过此限制,允许安装伪签名的IPA包。

侧载工具

  • Cydia Impactor:用于在iOS上签名和安装IPA文件以及在Android上安装APK文件的工具。指南和故障排除可以在yalujailbreak.net找到。

  • libimobiledevice:用于Linux和macOS与iOS设备通信的库。提供了通过USB安装应用程序的ideviceinstaller的安装命令和使用示例。

  • ipainstaller:此命令行工具允许在iOS设备上直接安装应用程序。

  • ios-deploy:对于macOS用户,ios-deploy可以从命令行安装iOS应用程序。解压IPA并使用-m标志直接启动应用程序是该过程的一部分。

  • Xcode:使用Xcode通过导航到Window/Devices and Simulators并将应用程序添加到Installed Apps来安装应用程序。

允许在非iPad设备上安装应用程序

要在iPhone或iPod touch设备上安装特定于iPad的应用程序,需要将Info.plist文件中的UIDeviceFamily值更改为1。然而,此修改需要重新签名IPA文件,因为存在签名验证检查。

注意:如果应用程序要求使用较新iPad型号专有的功能,而使用的是较旧的iPhone或iPod touch,则此方法可能会失败。

参考文献

Support HackTricks

Last updated