iOS 基本测试操作

Reading time: 12 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks

iOS 设备识别和访问总结

识别 iOS 设备的 UDID

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

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

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

  • 使用 I/O Registry Explorer 工具 ioreg:
bash
$ ioreg -p IOUSB -l | grep "USB Serial"
  • 使用 ideviceinstaller 进行 macOS(和 Linux):
bash
$ brew install ideviceinstaller
$ idevice_id -l
  • 利用 system_profiler:
bash
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
  • 使用 instruments 列出设备:
bash
$ instruments -s devices

访问设备 Shell

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

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

bash
$ 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 文件,然后从设备中提取:

bash
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 开始,Apple 限制了这些工具对应用程序沙箱的访问,除非设备越狱。

使用 Objection 进行文件管理

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

bash
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文件保存到本地。

bash
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标志:

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

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

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

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

覆盖加密部分:

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

bash
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 地址和端口完成。

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

bash
$ python dump.py -l

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

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

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

flexdecrypt

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

bash
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的工具,需要越狱设备进行应用解密:

bash
bagbak --raw Chrome

r2flutch

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

安装应用程序

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

侧载工具

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

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

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

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

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

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

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

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

References

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks