9.5 KiB
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
你在网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
-
发现我们的独家NFTs收藏品The PEASS Family
-
加入 💬 Discord群组 或 电报群组 或 关注我在推特上的🐦@carlospolopm。
-
通过向hacktricks repo和hacktricks-cloud repo提交PR来分享你的黑客技巧。
UIActivity Sharing
从iOS 6开始,第三方应用可以通过特定机制(例如AirDrop)共享数据(项目)。从用户的角度来看,这个功能是众所周知的系统级“共享活动表”,在点击“分享”按钮后出现。
可以在UIActivity.ActivityType中找到可用的内置共享机制的完整列表。如果对于应用程序来说不合适,开发人员可以排除其中一些共享机制。
发送项目
在测试UIActivity
共享时,应特别注意以下内容:
- 被共享的数据(项目),
- 自定义活动,
- 排除的活动类型。
通过创建UIActivityViewController
并将所需的项目(URL、文本、图片)传递给init(activityItems:applicationActivities:)
来实现通过UIActivity
共享数据。
如果有源代码,应查看UIActivityViewController
:
- 检查传递给
init(activityItems:applicationActivities:)
方法的活动。 - 检查是否定义了自定义活动(也传递给上述方法)。
- 验证
excludedActivityTypes
,如果有的话。
如果只有已编译/安装的应用程序,请尝试搜索上述方法和属性,例如:
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:
接收项目
在接收项目时,您应该检查以下内容:
- 如果应用程序通过查看Xcode项目的“Info”选项卡来声明自定义文档类型,则可以查看导出/导入UTI(Uniform Type Identifiers)的列表。所有系统声明的UTI的列表可以在存档的Apple开发者文档中找到。
- 如果应用程序通过查看Xcode项目的“Info”选项卡来指定其可以打开的任何文档类型,则应检查文档类型。如果存在,它们由名称和一个或多个表示数据类型的UTI组成(例如,PNG文件的“public.png”)。iOS使用此信息来确定应用程序是否有资格打开给定的文档(仅指定导出/导入UTI是不够的)。
- 如果应用程序通过查看应用程序委托中的
application:openURL:options:
(或其已弃用的版本UIApplicationDelegate application:openURL:sourceApplication:annotation:
)来正确验证接收到的数据。
如果没有源代码,您仍然可以查看Info.plist
文件并搜索以下内容:
- 如果应用程序声明了导出/导入的自定义文档类型,则可以查看
UTExportedTypeDeclarations
/UTImportedTypeDeclarations
。 - 如果应用程序指定了其可以打开的文档类型,则可以查看
CFBundleDocumentTypes
。
关于使用这些键的非常详细的解释可以在Stackoverflow上找到,但这里有一个摘要:
UTExportedTypeDeclarations
:用于定义应用程序希望教给安装在系统上的系统的自定义UTI。UTI描述了一段数据(不一定是文件内的数据!)并且至少需要一个标识符(com.example.MyCoolDataType
)。此外,它可能具有一个名称(My Cool Data Type
),一个或多个文件名扩展名(.myCoolDataType
),一个或多个MIME类型(x-application/my-cool-data-type
),一个或多个剪贴板类型(在使用复制和粘贴传输该类型的数据时使用),以及一个或多个传统操作系统类型。通常,您还希望UTI符合现有的UTI(例如,当您说您的UTI符合public.data
时,任何可以处理通用数据的进程也可以处理您的UTI)。- 例如:您定义了自己的专有文件数据格式,并且希望其他应用程序、插件、扩展等也知道此数据格式。
UTImportedTypeDeclarations
:您使用UTImportedTypeDeclarations
来向系统介绍您希望在系统中知道但不是您的UTI的UTI。- 例如:您的应用程序能够读取另一个应用程序的专有数据格式,但您不知道该应用程序是否已安装在系统上。
CFBundleDocumentTypes
:您使用CFBundleDocumentTypes
来告诉系统您的应用程序能够打开哪些文档类型。除非您在此处还列出您的UTI,否则这些UTI不会与您的应用程序关联在Finder中,您的应用程序也不会出现在“打开方式 >”菜单中。
对于文档类型,您始终必须设置的唯一内容是角色。角色可以是“Viewer”(您可以显示该文件类型,但无法编辑它),“Editor”(您可以显示和编辑该文件类型),或“None”(未指定可以对该文件执行的操作)。- 例如:您希望您的应用程序与某些文件类型关联,可以通过扩展名、MIME类型或UTI标识符进行标识。如果您希望您的应用程序与UTI类型关联,应用程序应导入或导出该类型,否则系统可能不知道该类型,并且注册未知的UTI类型根本没有任何效果。
动态测试
对于发送活动,您可以:
- 钩取我们在静态分析中看到的方法(
init(activityItems:applicationActivities:)
)以获取activityItems
和applicationActivities
。 - 通过钩取
excludedActivityTypes
属性来找出被排除的活动类型。
对于接收项目,您可以:
- 从另一个应用程序或通过AirDrop或电子邮件与应用程序共享文件。选择文件以触发“打开方式…”对话框(即,没有默认应用程序会打开文件,例如PDF)。
- 钩取
application:openURL:options:
和之前静态分析中识别出的任何其他方法。 - 观察应用程序行为。
- 此外,您可以发送特定的格式错误文件和/或使用模糊测试技术。
在此处阅读更多(英文)。
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
您在网络安全公司工作吗?您想在HackTricks中看到您的公司广告吗?或者您想获得PEASS的最新版本或下载PDF格式的HackTricks?请查看订阅计划!
-
发现我们的独家NFT收藏品The PEASS Family
-
加入💬 Discord群组或电报群组,或在Twitter上关注我🐦@carlospolopm。
-
通过向hacktricks repo和hacktricks-cloud repo提交PR来分享您的黑客技巧。