通过使用 Ghidra 绕过 iOS 应用程序越狱检测

admin 2025年2月9日22:55:37评论27 views字数 11274阅读37分34秒阅读模式

I. 引言

在过去的十年里,技术已经深度融入我们的日常生活。最显着的变化之一是智能手机的兴起,它几乎对现代社会的方方面面都至关重要。随着应用程序的增长,这种向移动优先体验的转变无疑为企业创造了新的机会,但另一方面,它也为更多的网络攻击打开了大门。随着移动电话越来越多地存储敏感的个人数据,安全漏洞的风险也显著增加。这就是移动应用程序安全测试变得重要的地方,尤其是对于 iOS 和 Android 应用程序,这是当今市场上的两个主导平台。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

App Store 上的应用类别

iOS 作为当今最流行的移动作系统之一,由于 Apple 的封闭生态系统而受到强大的安全框架的支持。这种严格控制的系统限制了对设备关键组件的访问,从而提供了针对潜在威胁的额外保护层。但是,虽然 iOS 设备受益于强大的安全控制,但 iOS 应用程序本身也不能幸免于漏洞。应用程序,尤其是那些处理敏感用户数据的应用程序,仍然是主要目标,这凸显了额外保护层的需求。这些措施包括加密存储在应用程序中的敏感数据、测试本地身份验证、评估 API 漏洞(如 URL 方案、WebView 等)以及防止纵,其中之一是实施越狱检测机制。

关于越狱检测,这种保护通常会成为需要审查应用程序流程的渗透测试人员的障碍,例如研究与主机的连接、数据存储方法和其他关键交互。有鉴于此,本博客将探讨一种通过使用 Ghidra 修补应用程序二进制文件来绕过越狱检测的方法,并提供了一个基于 MobileHackingLab 的 Lab No-Escape iOS 应用程序的案例研究,这是那里提供的更具挑战性的示例之一。

II. 越狱的基本概述

2.1. 什么是越狱,为什么需要越狱?

越狱是指取消 Apple 对 iOS 设备(例如 iPhone、iPad 甚至 iPod)施加的限制的过程(尽管这些设备不再发布)。如前所述,默认情况下,iOS 是一个封闭的系统,Apple 严格控制设备上可以安装的内容、系统的功能以及第三方应用程序可以访问的内容。越狱基本上覆盖了这些限制,为任何类型的用户提供了更大的灵活性。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

使用 Palera1n 的越狱过程示例

请务必注意,越狱 iOS 设备不会以任何方式改变其硬件。

现在,问题可能会出现:为什么我们需要越狱?对此有多种观点。对于普通用户,越狱可以自由安装 Apple App Store 上没有的应用程序和功能,例如自定义选项或系统调整。在网络安全的背景下,越狱对于渗透测试和漏洞研究等活动非常重要,因为它提供了对通常被锁定的系统区域的访问。它还支持运行时作,这对于识别和利用安全漏洞至关重要。

2.2. 越狱的类型

在本节中,我不会深入探讨执行越狱的细节,但有关更多详细信息,您可以参考 https://theapplewiki.com/wiki/Jailbreak 上提供的指南。

从技术上讲,越狱方法因它们如何利用 iOS 漏洞以及它们提供的系统访问级别而异。从广义上讲,越狱可分为四类。以下是基于 AppleWiki 信息和一些其他资源的摘要:

2.2.1. 联机越
狱 联机越狱要求设备在每次重启时都连接到计算机。如果没有此连接,设备根本无法启动。

2.2.2. 不受束缚的越狱
不受束缚的越狱曾经是越狱 iOS 设备的标准方法——在运行一次越狱后,设备将永久保持越狱状态。这些可以通过使用 JailbreakMe 等工具通过 Safari 安装,也可以使用 redsn0w、Absinthe 或 Pangu 等程序使用计算机安装。然而,从 iOS 9 开始,这种类型的越狱开始逐渐消失。

2.2.3. 半联机越
狱 半联机越狱允许设备在没有计算机的情况下启动,但在重启后,它将恢复到未越狱状态。要恢复越狱及其关联的调整,设备必须连接到计算机,并且必须运行特定应用程序以重新启用越狱。

2.2.4. 半无线越
狱 半无线越狱允许设备在没有计算机的情况下正常运行,但如果设备重新启动,它将丢失越狱状态。但是,与联机越狱不同,它不需要连接到计算机即可恢复功能 — 用户只需启动重新激活越狱状态的越狱应用程序即可重新启用越狱。

好吧,无论使用哪种类型的越狱,在尝试越狱绕过之前,下一个重要步骤是了解开发人员用于检测越狱设备的常见技术。

2.3. 越狱检测的类型

显然,越狱通常允许测试人员更深入地了解应用程序的流程,甚至纵其逻辑。考虑到这一点以及其他重要因素,开发人员经常实施各种方法来检测越狱设备。以下是一些最常用的检测技术:

2.3.1 基于文件的检测
这是最简单的越狱检测方法之一。基于文件的检测的工作原理是搜索通常与越狱设备关联的特定文件或目录,例如 /Applications/Cydia.app/bin/bash/usr/sbin/sshd 或 Substrate 等动态库。如果检测到这些文件或库,则应用程序会假定设备已越狱

2.3.2. 基于进程的检测
另一种常见的越狱检测方法是基于进程的检测。这种方法旨在通过监控设备上运行的进程来识别可疑活动,例如越狱环境中常用的 frida-server 等工具。如果找到此类进程,应用程序可能会限制功能或完全拒绝访问。

2.3.3. 目录权限检测
目录权限检测涉及检查系统目录的权限。在越狱设备上,某些通常为只读的目录可能会变为可写,从而允许未经授权的修改。如果检测到目录权限的此类更改,应用程序可能会认为该设备已越狱

2.3.4. URI 方案检测
另一种越狱检测方法涉及检查与越狱设备关联的自定义 URI 方案。例如,Cydia 注册了 cydia:// URI 方案,允许链接将用户引导至通过 Cydia 提供的应用程序。由于 iOS 应用程序可以查询已注册的 URI 方案,因此 cydia:// 的存在通常用于检测设备是否已越狱。

虽然这些是一些最常见的技术,但值得注意的是,开发人员可能会根据其特定的安全需求采用各种其他方法。无论使用的越狱类型或采用的检测方法如何,下一个过程是准备我们的测试环境。

III. 设置测试环境

假设我们的设备已经越狱,那么下一步就是安装和配置几个支持与设备交互的工具。这些基本工具包括 OpenSSH 和 Zip(在 iOS 上),以及 Ghidra 和桌面上的 Sideloadly。

3.1. 在 iOS 设备上设置工具

3.1.1. 安装 OpenSSH
OpenSSH 在此活动中的作用主要是文件传输。虽然其他工具也可以完成此任务,但 OpenSSH 在管理桌面和 iOS 设备之间的文件传输方面提供了灵活性。虽然这个选择有点主观,但我个人更喜欢使用 OpenSSH 进行文件传输,因为它很简单。

那么,如何安装呢?由于我使用 Palera1n 越狱了我的设备,因此可以直接从 strap.palera.in 存储库安装 OpenSSH。为此,只需在包管理器中搜索“OpenSSH”并直接安装即可。

注意:我们可以使用任何包管理器,例如 Cydia 或 Sileo,来安装这些工具。选择最适合您需求的那个。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

安装 OpenSSH

要验证 OpenSSH 是否已正确安装,请通过 SSH 连接到设备以确认 OpenSSH 正常工作。

3.1.2. 安装 Zip
此过程的另一个重要工具是压缩所需的实用程序。要安装它,只需在通过 SSH 建立访问后在 iOS shell 中运行 apt install zip
zip

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

安装 Zip

3.2. 在桌面上设置工具

在 iOS 设备上安装必要的工具后,下一步就是在桌面上设置所需的工具。虽然安装过程在不同的作系统上通常是一致的,但需要注意的是,目前仅在 macOS 和 Windows 上支持 Sideloadly 等工具。

3.2.1. 安装 Ghidra
鉴于我们将尝试修补二进制文件,因此此工具是必不可少的。虽然还有其他工具提供类似的功能,但在本例中,我将使用 Ghidra,因为它也是 MobileHackingLab 课程在第 4.3 节讨论 DVIA 时使用的工具。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

Ghidra 的界面

首先,可以直接从他们的 GitHub 页面下载 Ghidra,网址为 https://github.com/NationalSecurityAgency/ghidra/releases。下载后,通过在已安装 JDK 的环境中运行 ./ghidrarun 来提取文件并启动应用程序。

3.2.2. 安装 Sideloadly
下一步是安装 Sideloadly,可以从他们的官方网站 https://sideloadly.io 下载。为什么这是必要的?

基本上,要通过官方方式在 iOS 设备上安装应用程序,需要使用有效的 Apple ID 或开发者证书对应用程序进行签名。Sideloadly 允许将应用程序旁加载到 iOS 设备上,绕过 App Store 的限制,从而简化了此过程。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

Sideloadly 的接口

但是,请务必注意,使用免费 Apple ID 通过 Sideloadly 安装的应用程序的有效期仅为 7 天。在此期限之后,应用程序将停止工作,除非重新签名并重新安装。这是 Apple 施加的限制,旨在鼓励开发人员使用付费开发人员帐户进行长期分发。对于付费的 Apple Developer 帐户,有效期可以延长至一年。

无论情况如何,此工具在测试应用程序或部署修改后的版本进行渗透测试时都特别有用。它允许轻松安装应用程序,而无需通过 App Store。

也就是说,在某些情况下,Sideloadly 可能不是必需的。如果应用程序已经签名或来自受信任的来源,则可以通过 Filza 或 IPAInstaller 等工具直接安装应用程序。但是,像 No-Escape(在这种情况下)这样的应用程序必须使用有效的 Apple ID 或开发者证书进行签名才能安装,这就是 Sideloadly 等工具的用武之地。

请注意,由于 Sideloadly 仅在 macOS 和 Windows 上受支持,因此请确保为此步骤使用适当的作系统。

现在设置了所需的环境后,我们可以继续执行过程。请注意,本次会议中涉及的工具数量被有意保持在最低限度,因为我们的主要重点是修补现有的二进制文件。

IV. 执行

4.1. 从 Lab Environment 复制应用程序

鉴于我们的目标是修补现有的二进制文件,我们需要应用程序的二进制文件来测试。当我尝试下载应用程序二进制文件时,我遇到了无法访问 URL 的问题。在本例中,我决定直接从 MobileHackingLab 提供的虚拟实验室中提取二进制文件。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

通过 MobileHackingLab 的虚拟设备访问应用程序

连接到提供的虚拟设备后,第一步是使用命令找到应用程序:

find /var/containers/Bundle/Application/ -name “*.app”

找到 app 目录后,我们可以导航到它并将该目录存档到一个名为 “Payload” 的文件夹中。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

复制应用程序

为什么选择 “Payload”? 名称“Payload”是 iOS作系统正确识别和安装应用程序所需的标准 iOS 应用程序包结构的一部分。在 .ipa 文件格式中,App Bundle 必须放在包含 .app 目录的“Payload”文件夹中。不遵循此结构可能会阻止应用程序被识别或执行。

快速说明一下,如果您在通过 Sideloadly 安装过程中遇到错误“guru meditation b4822c@****:***** can't listdir a file”,则可能是由于目录未命名为“Payload”(大写 P)。

该过程完成后,我们可以在桌面上使用以下 scp 命令轻松地将 .zip 文件从 iOS 设备传输到我们的桌面

SCP [email protected]:/tmp/NoEscape.zip .

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

复制应用程序

文件位于我们的桌面上后,我们只需将其扩展名更改为 .ipa,然后在 Ghidra 中打开它。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

我们桌面上的应用程序

4.2. 在越狱设备上打开应用程序

确保 .ipa 文件在我们的桌面上可用后,下一步是在我们的设备上安装该应用程序。如 “设置测试环境” 部分所述,Sideloadly 等工具可用于此过程。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

使用 Sideloadly 安装应用程序

简而言之,在执行拖放作后,应用程序将被安装。但是,在运行它之前,我们需要验证该应用程序是否确实来自受信任的开发人员。这是一个正常步骤,因为我们已使用免费的 Apple ID 对应用程序进行了签名。

所以,要验证这一点,只需导航到设置 -> 通用 ->(向下滚动到)VPN和设备管理,并验证此菜单中列出的开发者应用程序。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

在设置中更改信任

之后,该应用程序将被安装,一旦运行,我们会注意到它立即检测到 iPhone 已越狱,导致应用程序强制关闭。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

设备已越狱

遇到此问题后,下一步是继续进一步分析应用程序。

4.3. 将二进制文件导入 Ghidra。

当我们想用 Ghidra 分析二进制文件时,第一步是创建一个 “Project”。这是一个标准流程,因为目标是保持我们的分析结果井井有条。简而言之,我们只需要创建一个新项目并为其分配一个我们选择的名称。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

创建新项目

创建项目后,我们只需选择它并使用 “Import File” 功能导入我们想要分析的二进制文件。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

尝试将二进制文件导入 Ghidra

如果我们不确定要导入哪个二进制文件怎么办(尽管这种情况很少见)? 在这种情况下,我们可以使用 Blacktop (https://github.com/blacktop/ipsw) 的 ipsw 工具来识别可执行二进制文件的名称。例如:

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

搜索二进制信息

在上图中,我们可以看到 bundle 可执行文件名为 “No Escape”。因此,我们可以直接导入应用程序 .app 目录中名为 “No Escape” 的二进制文件。

将二进制文件导入 Ghidra 时,您首先会遇到一个提示,通知您二进制文件是 Mach-O 格式,这在 iOS 应用程序中很常见。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

导入二进制文件

我们需要做的就是确认此通知。完成此作后,我们可以通过双击导入的二进制文件来开始分析它。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

分析二进制文件

打开二进制文件后,建议选中标有 “Decompiler Parameter ID” 的选项。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

选择 “Decompiler Parameter ID”

但为什么这一步很重要呢?让我们总结一下。

从技术上讲,当我们深入研究逆向工程时,Ghidra 将尝试将机器代码反编译为高级语言(如 C),这有助于阐明应用程序的流程。但是,输出仍然难以解释,尤其是对于函数参数和返回类型。

通过启用 “Decompiler Parameter ID” 选项,可以将有价值的元数据添加到反编译的代码中,从而提供有关函数参数和返回类型的更多上下文。这使得您更容易了解应用程序如何处理数据以及与系统交互,这对于识别漏洞或了解功能至关重要。

以下是启用 “Decompiler Parameter ID” (左) 和不启用 “Decompiler Parameter ID” (右) 之间的比较。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

启用 “Decompiler Parameter ID” (左) 和不启用 “Decompiler Parameter ID” (右) 之间的比较

总体而言,这个小的调整使二进制文件的结构更易于导航,从而显著改善了分析。

4.4. 分析 Ghidra 中的二进制文件。

众所周知,应用程序开发的优点之一是开发人员经常根据其函数来命名其元素(例如类或变量)。例如,当开发人员创建与 PIN 相关的内容时,该元素的名称通常会反映此连接,例如 pinEnteredpinSettingschangePin 等。

当然,这种方法并没有错,因为它使开发人员在函数中出现问题时更容易跟踪问题(而且,这可能是存在像混淆这样的技术的原因之一,它可以帮助开发人员自动将所有元素的名称更改为更模糊的名称)。

回到主题,在二进制分析的上下文中,这个 “积极 ”的方面对测试人员也有好处。通过几个简单的关键字,测试人员有望跟踪开发人员开发的函数。

因此,鉴于我们的目标是在应用程序中跟踪越狱函数的流,第一步是识别与越狱相关的函数。为此,我们只需导航到 Ghidra 中的“符号树”并输入“jailbr”即可。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

搜索 “jailbr” 函数

由于术语 'jailbreak' 有时写成 'jailbroken',我建议只用 'jailbr' 搜索以涵盖这两种变体。

4.4.1. 理解反编译的代码

从反编译的结果中,我们将看到如下代码流程:

/* No_Escape.isJailbroken() -> Swift.Bool */

bool No_Escape::isJailbroken(void)

{
  bool bVar1;
  dword dVar2;
  dword local_18;
  dword local_14;

  dVar2 = $$No_Escape.(checkForJailbreakFiles_in__BCE8F13474E5A52C60853EA803F80A81)()_->_Swift.Bool
                    ();
if ((dVar2 &1==0) {
    local_14 = $$No_Escape.(checkForWritableSystemDirectories_in__BCE8F13474E5A52C60853EA803F80A81)( )_->_Swift.Bool
                         ();
  }
else {
    local_14 =1;
  }
if ((local_14 &1==0) {
    local_18 = $$No_Escape.(canOpenCydia_in__BCE8F13474E5A52C60853EA803F80A81)()_->_Swift.Bool();
  }
else {
    local_18 =1;
  }
if ((local_18 &1==0) {
    bVar1 = $$No_Escape.(checkSandboxViolation_in__BCE8F13474E5A52C60853EA803F80A81)()_->_Swift.Bool
                      ();
  }
else {
    bVar1 =true;
  }
return bVar1 !=false;
}

从上面的代码中可以看出,有一个 main 函数实现了检测设备是否越狱的逻辑。通过进一步检查,我们可以看到这个函数通过调用几个子例程来工作,这些子例程检查设备的状态是否有越狱的迹象,其中包括:isJailbroken()

4.4.1.1.
顾名思义,我们可以推断出这个功能是为了检查越狱设备上常见的文件是否存在。
checkForJailbreakFiles()

checkForJailbreakFiles() 函数的截取代码

如果我们跟踪这个函数(只需在 Ghidra 的反编译窗口中双击这些函数),我们会在其中找到几个字符串,例如指向 Cydia、MobileSubstrate、bash、SSH 和 APT 目录的字符串。

4.4.1.2.
在第二部分中,该函数似乎检查系统是否允许写入不应被常规应用程序更改的目录。
checkForWritableSystemDirectories()

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

函数的截取代码checkForWritableSystemDirectories()

如果我们进一步跟踪该函数,我们可以看到应用程序尝试将 'jailbreak_text.txt' 文件写入 /private 目录。

4.4.1.3.
然后,在第三个函数中,我们可以清楚地看到应用程序检查是否可以打开 Cydia。
canOpenCydia()

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

函数的截取代码canOpenCydia()

这从字符串中可以明显看出,它尝试初始化 URL scheme ,指示尝试打开 Cydia,这通常与越狱设备相关联。(请参阅第 2.3.4 点,了解其中一个越狱检测模型)。"cydia://package/com.example.package”

4.4.1.4.
最后一个,应用程序将尝试执行目录是否存在检查。
checkSandboxViolation()/private/var/lib/apt/

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

函数的截取代码checkSandboxViolation()

他们为什么要检查这个目录?请注意,其中一个原因是该目录通常位于已修改为运行未经 Apple 授权的应用程序(如 APT)的设备上。此目录通常与越狱设备相关联,其中 APT 用于安装和管理未经授权的软件包。/private/var/lib/apt/

总体而言,该应用程序按顺序执行一系列检查,首先查找通常与越狱设备相关的文件。如果未找到越狱文件,则继续检查特定系统目录是否可写,依此类推。

如果任何检查返回值 1,则认为设备已越狱。如果所有检查都返回 0,则认为设备未越狱。

4.4.2. 理解反汇编代码

在我们理解了反编译的结果 InshaAllah 之后,我们将更容易遵循汇编流程(尽管这是主观的)。

为了便于讨论每个函数流,我将使用以下代码片段:

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

截取反汇编代码
10000a074 29 00 00 94     bl         $$No_Escape.(checkForJailbreakFiles_in__BCE8F1   undefined4 $$No_Escape.(checkFor
10000a078 a0 00 00 36     tbz        w0,#0x0,LAB_10000a08c
10000a07c 01 00 00 14     b          LAB_10000a080
                         LAB_10000a080                                   XREF[1]:     10000a07c(j)  
10000a080 20 00 80 52     mov        w0,#0x1
10000a084 a0 c3 1f b8     stur       w0,[x29, #local_14]
10000a088 04 00 00 14     b          LAB_10000a098
                         LAB_10000a08c                                   XREF[1]:     10000a078(j)  
10000a08c dc 00 00 94     bl         $$No_Escape.(checkForWritableSystemDirectories   undefined4 $$No_Escape.(checkFor

在上面代码片段的早期部分,我们重点介绍 (Branch with Link) 指令。该指令用于跳转到另一个代码位置,并将下一条指令(在本例中为指令)的地址存储到链接寄存器 () 中。blbltbzlr

为了使这个概念更易于理解,假设我们正在阅读一本书,并且我们在第 99 页。我们决定转到不同的章节,因此我们跳到第 200 页。但是,我们还希望标记第 99 页的位置,以便在阅读完第 200 页后,我们可以返回到第 99 页。

这类似于 INSTRUCTION 的工作方式。它会跳转到新位置(在本例中为第 200 页)。链接寄存器 () 存储下一条指令的地址(这将是 后面的那个,我们需要返回),因此在完成第 200 页的任务后,我们可以通过跳回到存储在 中的地址来“返回”第 99 页。bllrbllr

总之,当程序到达指令时,它会 “跳” 到文件检查功能。正如我们所知,这个函数检查系统上是否存在某些文件(如第 4.4.1.1 节所述)。根据此检查的结果,执行将返回到 之后的指令并继续执行该指令。blbltbz

接下来,该指令代表 “Test and Branch if Zero”,它检查寄存器中的特定位是否为 0。如果为 (0),则程序将跳转(分支)到下一个标签指定的位置,即 label。否则,将继续执行下一条指令,例如 at 。tbzw0LAB_10000a08cmov w0, #0x1LAB_10000a080

请考虑以下两个图像:

  • 在下面的第一张图片中,我们看到如果 的值为 0,左侧的箭头将直接指向该函数。这意味着在之前的检查中没有找到与越狱相关的文件。checkForWritableSystemDirectoriesw0

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

  • 在下面的第二张图片中,箭头通过指令 .这意味着,如果 的值不为 0 (即找到与越狱相关的文件),则程序设置为 1。这用于继续执行程序,在这种情况下,会触发弹出窗口,然后关闭应用程序。LAB_10000a080mov w0, #0x1w0w0

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

注意:为了能够理解,请将其想象成一部具有两个平行故事情节的电影。我们正在观看主要故事情节,但电影在某个时刻问道,“我们应该切换到次要情节,还是继续主要故事?tbz

现在,如果满足条件(如故事中的线索)(意味着 bit in 为 0),则电影将分支到子情节。如果不满足条件(位不为 0),则电影将继续播放主要故事而不切换。w0

因此,该指令检查特定条件是否为 true(位为 0)。如果是,程序将 “切换场景” 并跳转到另一个位置。如果不是,则 story 照常继续,执行下一个指令。tbz

4.4.3. 导致越狱检测的四次“跳跃”

因此,如果我们以直接的方式(通过遵循指令流)遵循执行流,我们可以看到应用程序执行了四次跳转,所有这些跳转都旨在将某些值设置为 。这会导致应用程序将设备检测为已越狱。true

有问题的四个说明如下:

0x10000a080    mov w0, #0x1
0x10000a0a4    mov w0, #0x1
0x10000a0c8    mov w0, #0x1
0x10000a0ec    mov w8, #0x1

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

了解此流程后,我们将继续在下一节中修改应用程序的流程。

4.4.4. 修补二进制文件

在常见的绕过越狱检测的上下文中,了解布尔值的工作原理非常重要。布尔值通常表示 true 或 false 值,通常为 (true) 或 (false)。例如,当应用程序找到与越狱相关的文件时,它会分配该值以指示设备已越狱。如果未找到此类文件,则会分配值 ,指示设备未越狱。1010

现在,回顾将值设置为 1 的四个指令。要绕过越狱检测,我们可以将值修改为 0,如下所示:

0x10000a080    mov w0, #0x0
0x10000a0a4    mov w0, #0x0
0x10000a0c8    mov w0, #0x0
0x10000a0ec    mov w8, #0x0

要实施此更改,我们可以右键单击要修改的地址,然后选择“patch instruction”。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

尝试修补指令

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

综上所述,最终结果如下:

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

4.4.5. 导出二进制文件

确认已应用所有更改后,下一步是导出程序:

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

导出程序

确保在格式部分中选择了 “Original File”(原始文件):

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

将格式更改为“原始文件”

该过程完成后,将出现一个摘要弹出窗口。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

导出结果摘要

检查保存输出文件的目录后,您将找到以下二进制文件:

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

修补的二进制文件

下一步是将原始应用程序的 .app 目录中的二进制文件替换为此更新的二进制文件:

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

打开 .app 目录

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

替换原始二进制文件

4.4.6. 安装修补后的二进制文件

与前面的步骤一样,我们需要再次压缩 Payload 目录并将其转换回 .ipa 文件(请参阅第 4.1 点)。之后,只需使用 Sideloadly 重新安装它。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

安装修补后的二进制文件

安装完成后,在启动应用程序时,您会注意到它不再将设备检测为越狱,这表明我们已经成功绕过了应用程序实施的越狱检测。

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

已绕过越狱检测

V. 结论

因此,我们来到了这篇文章的最后一部分。总之,我们的方法确保每当应用程序尝试检测越狱迹象时,它都会始终返回错误结果。

还值得注意的是,此处讨论的工具和方法并不是绕过越狱检测的唯一选项。替代方法包括使用 Frida 等工具作应用程序的逻辑。

有些读者可能想知道,每次遇到检测到越狱的应用程序时,是否都应该使用此方法?答案是否定的。根据个人经验,我建议先从自动化工具开始。例如,我们可以尝试使用 Shadow (https://github.com/jjolano/shadow) 或探索 https://codeshare.frida.re/ 上提供的各种脚本

其它相关课程

通过使用 Ghidra 绕过 iOS 应用程序越狱检测
通过使用 Ghidra 绕过 iOS 应用程序越狱检测
通过使用 Ghidra 绕过 iOS 应用程序越狱检测
通过使用 Ghidra 绕过 iOS 应用程序越狱检测

新课

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

详细目录

mac/ios安全视频

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

QT开发底层原理与安全逆向视频教程

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

linux文件系统存储与文件过滤安全开发视频教程(2024最新)

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

linux高级usb安全开发与源码分析视频教程

通过使用 Ghidra 绕过 iOS 应用程序越狱检测

linux程序设计与安全开发

通过使用 Ghidra 绕过 iOS 应用程序越狱检测
  • 通过使用 Ghidra 绕过 iOS 应用程序越狱检测
  • windows

  • 通过使用 Ghidra 绕过 iOS 应用程序越狱检测
  • windows()

  • 通过使用 Ghidra 绕过 iOS 应用程序越狱检测
  • USB()

  • 通过使用 Ghidra 绕过 iOS 应用程序越狱检测
  • ()

  • 通过使用 Ghidra 绕过 iOS 应用程序越狱检测
  • ios

  • 通过使用 Ghidra 绕过 iOS 应用程序越狱检测
  • windbg

  • 通过使用 Ghidra 绕过 iOS 应用程序越狱检测
  • ()

  • 通过使用 Ghidra 绕过 iOS 应用程序越狱检测通过使用 Ghidra 绕过 iOS 应用程序越狱检测通过使用 Ghidra 绕过 iOS 应用程序越狱检测

  • 通过使用 Ghidra 绕过 iOS 应用程序越狱检测

  • windows恶意软件开发与对抗视频教程

  • 通过使用 Ghidra 绕过 iOS 应用程序越狱检测
  • 通过使用 Ghidra 绕过 iOS 应用程序越狱检测
  • 通过使用 Ghidra 绕过 iOS 应用程序越狱检测

原文始发于微信公众号(安全狗的自我修养):通过使用 Ghidra 绕过 iOS 应用程序越狱检测

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月9日22:55:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   通过使用 Ghidra 绕过 iOS 应用程序越狱检测https://cn-sec.com/archives/3718598.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息