iOS UIActivity Sharing

iOS UIActivity Sharing

支持 HackTricks

UIActivity Sharing 简化

从 iOS 6 开始,第三方应用程序可以使用 AirDrop 等机制共享数据,例如文本、URL 或图像,具体内容见苹果的 应用间通信指南。此功能通过系统范围的 共享活动表 体现,当与“共享”按钮交互时会出现。

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

如何共享数据

应关注以下几点:

  • 共享数据的性质。

  • 自定义活动的包含。

  • 某些活动类型的排除。

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

$ 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: 以及在静态分析中识别的其他方法,以观察应用的响应。

  • 使用格式错误的文件或模糊测试技术来评估应用的稳健性。

参考

Support HackTricks

Last updated