> For the complete documentation index, see [llms.txt](https://hacktricks.xsx.tw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacktricks.xsx.tw/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md).

# iOS Basic Testing Operations

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS红队专家）</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>

## **iOS设备识别和访问摘要**

### **识别iOS设备的UDID**

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

在Catalina之前的macOS版本中，iTunes可以帮助发现UDID。可以在[这里](http://www.iclarified.com/52179/how-to-find-your-iphones-udid)找到详细的说明。

命令行工具提供了检索UDID的替代方法：

* **使用I/O Registry Explorer工具`ioreg`：**

```bash
$ ioreg -p IOUSB -l | grep "USB Serial"
```

* **在 macOS（和 Linux）上使用 `ideviceinstaller`：**

```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**

安装 **OpenSSH package** 后，可以通过 `ssh root@<device_ip_address>` 进行 **SSH 访问**。重要的是要更改用户 `root` 和 `mobile` 的默认密码 (`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`文件。这涉及将现有哈希替换为`root`和`mobile`用户条目旁边`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：** 这些图形用户界面工具可用于管理 iOS 设备上的文件。然而，从 iOS 8.4 开始，除非设备已越狱，否则苹果限制了这些工具对应用沙盒的访问权限。

### **使用 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应用程序二进制文件由苹果使用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**](https://github.com/AloneMonkey/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](https://github.com/ios-control/ios-deploy)这样的工具重新安装。

#### **flexdecrypt**

[**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt)工具及其包装器[**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac)允许从已安装的应用程序中提取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**](https://github.com/ChiChou/bagbak), 另一个基于Frida的工具，需要越狱设备进行应用程序解密:

```bash
bagbak --raw Chrome
```

#### **r2flutch**

**r2flutch**利用radare和frida，用于应用程序解密和转储。更多信息可以在其[**GitHub页面**](https://github.com/as0ler/r2flutch)找到。

### **安装应用程序**

**侧载**指的是在官方App Store之外安装应用程序。这一过程由**installd守护程序**处理，并需要应用程序使用由苹果签发的证书进行签名。越狱设备可以通过**AppSync**绕过这一过程，从而可以安装伪签名的IPA包。

#### **侧载工具**

* **Cydia Impactor**：用于在iOS上签名和安装IPA文件以及在Android上安装APK文件的工具。可以在[yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/)上找到指南和故障排除信息。
* **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，则此方法可能失败。

## 参考资料

* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
* <https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/>
* <https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/>
* <https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/>
* <https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/>

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

支持HackTricks的其他方式：

* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们独家的[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**上关注**我们。
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>
