跳过内容

MASTG-TECH-0054: 获取和提取应用

在开发期间,有时会通过无线 (OTA) 分发将应用程序提供给测试人员。 在这种情况下,您将收到一个 itms-services 链接,例如以下链接

itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist

您可以使用 ITMS 服务资产下载器工具从 OTA 分发 URL 下载 IPA。 通过 npm 安装它

npm install -g itms-services

使用以下命令将 IPA 文件本地保存

# itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa

提取应用程序二进制文件

如果您有一个带有已解密应用程序二进制文件的 IPA,请解压缩它,您就可以开始了。 应用程序二进制文件位于主捆绑目录 (.app) 中,例如 Payload/Telegram X.app/Telegram X。 有关属性列表提取的详细信息,请参见以下小节。

在 macOS 的 Finder 中,通过右键单击 .app 目录并选择“显示包内容”来打开它们。 在终端上,您可以直接 cd 进入它们。

解密应用程序二进制文件

重要提示:在美国,《数字千年版权法》17 U.S.C. 1201,或 DMCA,将规避某些类型的 DRM 的行为定为非法且可诉的。 但是,DMCA 还提供了豁免,例如某些类型的安全研究。 合格的律师可以帮助您确定您的研究是否符合 DMCA 豁免的条件。 (来源:Corellium

如果您没有原始 IPA,则需要一台越狱设备,您将在其中安装该应用程序(例如,通过 App Store)。 安装后,您需要从内存中提取应用程序二进制文件并重建 IPA 文件。 由于 DRM 的原因,应用程序二进制文件在存储在 iOS 设备上时会被加密,因此仅从捆绑包中提取它(通过 SSH 或 Objection)不足以进行逆向工程。

您可以通过在应用程序二进制文件上运行此命令来验证这一点

otool -l Payload/Telegram X.app/Telegram X | grep -i LC_ENCRYPTION -B1 -A4
Load command 12
          cmd LC_ENCRYPTION_INFO
      cmdsize 20
     cryptoff 16384
    cryptsize 32768
      cryptid 1

或者使用 rabin2

rabin2 -I Payload/Telegram X.app/Telegram X | grep crypto
crypto   true

为了检索未加密的版本,您可以使用 frida-ios-dump。 它将在应用程序在设备上运行时从内存中提取未加密的版本。

首先,配置 ios-deploy dump.py

  • 当使用 iproxy (iproxy 2222 22) 时,将其设置为使用端口 2222localhost,或设置为您要从中转储二进制文件的设备的实际 IP 地址和端口。
  • 更新 dump.py 中的默认用户名(User = 'root')和密码(Password = 'alpine')为您设置的用户名和密码。

通过运行 python dump.py -l 枚举设备上安装的应用程序

 PID  Name             Identifier
----  ---------------  -------------------------------------
 860  Cydia            com.saurik.Cydia
1130  Settings         com.apple.Preferences
 685  Mail             com.apple.mobilemail
 834  Telegram         ph.telegra.Telegraph
   -  Stocks           com.apple.stocks
   ...

您可以转储选定的应用程序,例如 Telegram,通过运行 python dump.py -H 127.0.0.1 -p 2222 --user mobile -P alpine ph.telegra.Telegraph,如果您在使用 SSH 隧道与 iproxy 和越狱手机上的默认凭据。

几秒钟后,将在当前目录中创建 Telegram.ipa 文件。 您可以通过删除该应用程序并重新安装它来验证转储的成功(例如,使用 ios-deploy ios-deploy -b Telegram.ipa)。 请注意,这仅适用于越狱设备,否则签名将无效。

您可以使用 rabin2 验证应用程序二进制文件现在是否未加密

rabin2 -I Payload/Telegram X.app/Telegram X | grep crypto
crypto   false

精简应用程序二进制文件

应用程序二进制文件可能包含多个架构,例如 armv7(32 位)和 arm64(64 位)。 这称为“胖二进制文件”。

一个示例是 Damn Vulnerable iOS App DVIA v1 来演示这一点。

解压缩应用程序并运行 otool

unzip DamnVulnerableiOSApp.ipa
cd Payload/DamnVulnerableIOSApp.app
otool -hv DamnVulnerableIOSApp

输出将如下所示

DamnVulnerableIOSApp (architecture armv7):
Mach header
      magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
   MH_MAGIC      ARM         V7  0x00     EXECUTE    33       3684   NOUNDEFS DYLDLINK TWOLEVEL PIE
DamnVulnerableIOSApp (architecture arm64):
Mach header
      magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
MH_MAGIC_64    ARM64        ALL  0x00     EXECUTE    33       4192   NOUNDEFS DYLDLINK TWOLEVEL PIE

为了简化应用程序分析,建议创建一个所谓的精简二进制文件,该文件仅包含一个架构

lipo -thin armv7 DamnVulnerableIOSApp -output DVIA32