# iOS Testing Environment

<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)，我们的独家[**NFT**](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>

## Apple 开发者计划

**配置文件标识**是与苹果开发者帐户关联的公钥和私钥集合。为了**签署应用程序**，您需要支付**99美元/年**注册**Apple 开发者计划**以获取您的配置文件标识。否则，您将无法在物理设备上从源代码运行应用程序。另一种选择是使用**越狱设备**。

从 Xcode 7.2 开始，苹果提供了一个选项来创建**免费的 iOS 开发配置文件**，允许在真实的 iPhone 上编写和测试您的应用程序。转到 *Xcode* --> *首选项* --> *帐户* --> *+*（添加新的 Apple ID 到您的凭据） --> *单击创建的 Apple ID* --> *管理证书* --> *+*（Apple 开发） --> *完成*\
\_\_然后，为了在您的 iPhone 上运行应用程序，您需要首先**指示 iPhone 信任计算机**。然后，您可以尝试从 Xcode 在手机上**运行应用程序**，但会出现错误。因此，转到 *设置* --> *通用* --> *配置文件与设备管理* --> 选择未受信任的配置文件并点击“**信任**”。

请注意，**由相同签名证书签署的应用程序可以以安全的方式共享资源，如钥匙串项**。

配置文件存储在手机内的\*\*`/Library/MobileDevice/ProvisioningProfiles`\*\*中

## **模拟器**

{% hint style="info" %}
请注意，**模拟器与模拟器不同**。模拟器只是模拟设备和功能的行为，但实际上不使用它们。
{% endhint %}

### **模拟器**

首先需要知道的是，在模拟器中进行渗透测试将比在越狱设备中进行的测试受到更多限制。

构建和支持 iOS 应用程序所需的所有工具**仅在 Mac OS 上得到官方支持**。\
苹果用于创建/调试/检测 iOS 应用程序的事实标准工具是**Xcode**。它可用于下载其他组件，如**模拟器**和不同**SDK** **版本**，以构建和**测试**您的应用程序。\
强烈建议从**官方应用商店**下载 Xcode。其他版本可能携带恶意软件。

模拟器文件可以在`/Users/<username>/Library/Developer/CoreSimulator/Devices`中找到

要打开模拟器，请运行 Xcode，然后按 *Xcode 选项卡* --> *打开开发人员工具* --> *模拟器*\
\_\_在下图中，点击“iPod touch \[...]”可以选择其他设备进行测试：

![](/files/eRPcDF581JhRB6NPEEd4)

![](/files/Et0u0j5ezDnWTZqB6akg)

### 模拟器中的应用程序

在`/Users/<username>/Library/Developer/CoreSimulator/Devices`中，您可能会找到所有**已安装的模拟器**。如果要访问在其中一个模拟器中创建的应用程序的文件，可能很难知道**应用程序安装在哪个模拟器**。找到正确的 UID 的一个快速方法是在模拟器中执行应用程序并执行：

```bash
xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
```

一旦您知道UID，安装在其中的应用程序可以在`/Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application`中找到。

然而，令人惊讶的是，您在这里找不到应用程序。您需要访问`/Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/`。

在这个文件夹中，您可以**找到应用程序的包。**

## 模拟器

Corellium是唯一公开可用的iOS模拟器。它是一种企业SaaS解决方案，采用按用户许可模型，不提供任何试用许可证。

## 越狱

苹果严格要求在iPhone上运行的代码必须由苹果颁发的证书签名。**越狱**是绕过操作系统放置的这些限制和其他安全控制的过程。因此，一旦设备越狱，负责检查安装的应用程序的**完整性检查**将被修补，以便**绕过**。

{% hint style="info" %}
与Android不同，\*\*您无法在iOS中切换到“开发者模式”\*\*以在设备上运行未签名/不受信任的代码。
{% endhint %}

### Android Rooting vs. iOS Jailbreaking

尽管经常进行比较，Android上的**rooting**和iOS上的**jailbreaking**是根本不同的过程。在Android设备上对rooting可能涉及**安装`su`二进制文件**或**用具有root权限的自定义ROM替换系统**，如果解锁了引导加载程序，则不一定需要利用漏洞。**刷写自定义ROM**会在解锁引导加载程序后替换设备的操作系统，有时需要利用漏洞。

相比之下，由于引导加载程序限制为仅引导Apple签名的映像，iOS设备无法刷写自定义ROM。**越狱iOS**旨在绕过苹果的代码签名保护，以运行未签名代码，这一过程由于苹果持续加强安全性而变得复杂。

### 越狱挑战

随着苹果迅速修补漏洞，越狱iOS变得越来越困难。**降级iOS**仅在发布后的有限时间内可能，这使得越狱成为一项时间敏感的问题。用于安全测试的设备不应更新，除非可以保证重新越狱。

iOS更新受**挑战-响应机制**（SHSH blobs）控制，只允许安装Apple签名的响应。这种机制被称为“签名窗口”，限制了存储和以后使用OTA固件包的能力。[IPSW Downloads网站](https://ipsw.me)是检查当前签名窗口的资源。

### 越狱类型

* **有线越狱**需要每次重新启动时连接计算机。
* **半有线越狱**允许在没有计算机的情况下启动到非越狱模式。
* **半无线越狱**需要手动重新越狱，无需计算机。
* **无线越狱**提供永久的越狱解决方案，无需重新应用。

### 越狱工具和资源

越狱工具根据iOS版本和设备而异。资源如[Can I Jailbreak?](https://canijailbreak.com)、[The iPhone Wiki](https://www.theiphonewiki.com)和[Reddit Jailbreak](https://www.reddit.com/r/jailbreak/)提供最新信息。例如：

* [Checkra1n](https://checkra.in/)适用于A7-A11芯片设备。
* [Palera1n](https://palera.in/)适用于Checkm8设备（A8-A11），支持iOS 15.0-16.5。
* [Unc0ver](https://unc0ver.dev/)适用于iOS版本高达14.8。

修改您的设备存在风险，越狱应谨慎对待。

### 越狱的好处和风险

越狱**移除了操作系统强制的沙箱限制**，使应用程序可以访问整个文件系统。这种自由使得可以安装未经批准的应用程序并访问更多API。然而，对于普通用户，由于潜在的安全风险和设备不稳定性，不建议越狱。

### **越狱后**

{% content-ref url="/pages/tnir9Zy4zwf5ShrJxleH" %}
[iOS Basic Testing Operations](/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md)
{% endcontent-ref %}

### **越狱检测**

**一些应用程序将尝试检测移动设备是否已越狱，如果是，则应用程序将无法运行**

* 在iOS越狱后，通常会安装**文件和文件夹**，可以搜索这些文件来确定设备是否已越狱。
* 在越狱设备上，应用程序可以在沙箱之外获得**读/写访问权限**
* 一些**API调用**会**表现不同**
* 存在**OpenSSH**服务
* 调用`/bin/sh`将返回1而不是0

**有关如何检测越狱的更多信息**[**在此处**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**。**

您可以尝试使用**objection**的`ios jailbreak disable`来避免这些检测。

## **越狱检测绕过**

* 您可以尝试使用**objection**的`ios jailbreak disable`来避免这些检测。
* 您还可以安装工具**Liberty Lite** (<https://ryleyangus.com/repo/)。一旦添加了存储库，应用程序应该出现在“搜索”选项卡中。>

## 参考资料

* <https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/>


---

# 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/ios-testing-environment.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.
