# 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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hacktricks.xsx.tw/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
