iOS UIActivity Sharing

Reading time: 4 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks

UIActivity Sharing 简化

从 iOS 6 开始,第三方应用程序可以使用像 AirDrop 这样的机制共享数据,例如文本、URL 或图像,具体内容请参见苹果的 Inter-App Communication guide。此功能通过一个系统范围的 分享活动表 体现,当与“分享”按钮交互时会出现。

所有内置共享选项的全面列举可在 UIActivity.ActivityType 中找到。开发者可以选择排除特定的共享选项,如果他们认为这些选项不适合他们的应用程序。

如何共享数据

应关注以下几点:

  • 共享数据的性质。
  • 自定义活动的包含。
  • 某些活动类型的排除。

共享是通过实例化 UIActivityViewController 来实现的,待共享的项目将被传递给它。这是通过调用实现的:

bash
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:

开发者应仔细检查 UIActivityViewController 的活动和自定义活动,以及任何指定的 excludedActivityTypes

如何接收数据

接收数据时以下方面至关重要:

  • 自定义文档类型的声明。
  • 应用可以打开的文档类型的指定。
  • 接收数据的完整性的验证。

在没有源代码访问的情况下,仍然可以检查 Info.plist 中的键,如 UTExportedTypeDeclarationsUTImportedTypeDeclarationsCFBundleDocumentTypes,以了解应用可以处理和声明的文档类型。

关于这些键的简明指南可在 Stackoverflow 上找到,强调了定义和导入 UTI 以便系统范围内识别的重要性,并将文档类型与您的应用关联,以便在“打开方式”对话框中集成。

动态测试方法

要测试 发送活动,可以:

  • 钩住 init(activityItems:applicationActivities:) 方法以捕获正在共享的项目和活动。
  • 通过拦截 excludedActivityTypes 属性来识别被排除的活动。

对于 接收项目,涉及:

  • 从另一个来源(例如 AirDrop、电子邮件)与应用共享文件,提示“打开方式...”对话框。
  • 钩住 application:openURL:options: 以及在静态分析中识别的其他方法,以观察应用的响应。
  • 使用格式错误的文件或模糊测试技术来评估应用的稳健性。

参考

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks