MASTG-TECH-0054: 获取和提取应用
从 OTA 分发链接获取 IPA 文件¶
在开发期间,有时会通过无线 (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
) 时,将其设置为使用端口2222
的localhost
,或设置为您要从中转储二进制文件的设备的实际 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