gaelic-ghost/spelunking

GitHub: gaelic-ghost/spelunking

一套用于系统性调查 Apple 平台私有框架与服务(如 MediaRemote)的 Swift 研究工具和文档仓库,通过 runtime 探测、XPC 追踪与符号分析揭示私有 API 行为。

Stars: 2 | Forks: 0

# 洞穴探索 针对本地、经用户同意的辅助功能以及 SIP 已禁用状态下“幕后同行”探索的 Apple 平台私人研究。 本仓库用于对 macOS、iOS 和 Apple 平台的 framework、服务、daemon、私有 API、头文件、符号以及运行时行为进行专注的调查研究。每次研究应针对一个 framework、服务、子系统或紧密相关的类别进行,然后留下对未来工具和项目有用的文档。 第一个研究目标是 macOS 26.5 上的 `MediaRemote.framework` 以及已安装的 macOS 27 beta SDK,相关范围涵盖“正在播放”、媒体控制、路由以及用户态访问层。 ## 仓库布局 - `docs/`:供日后阅读的持久性文档。 - `docs/frameworks//`:针对某个 framework、服务或子系统的精炼笔记。 - `research//`:针对某个研究目标的原始证据、命令笔记、符号转储、生成的头文件、实验以及仅限本地使用的工作资料。 - `Sources/`:用于可重用研究辅助工具和命令行工具的 Swift package 源码。 - `Tests/`:用于可重用辅助工具的 Swift package 测试。 - `tools/`:目前尚未作为 SwiftPM 目标的独立脚本和辅助说明。 ## 当前工具 - `spelunk`:打印当前设定的研究目标路径。 - `mr-now-playing-probe`:只读的动态 `MediaRemote.framework` 探测工具,用于获取全局“正在播放”信息、应用 PID/播放状态/客户端状态、客户端/播放器列表以及短通知观察窗口。 - `mr-internal-probe`:Objective-C 辅助工具,用于需要进行直接 Objective-C runtime 调用的内部 `MediaRemote.framework` 包装器实验。 - `mr-interface-probe`:Objective-C runtime 接口描述工具,用于描述目标 `MediaRemote.framework` 的类、方法、属性、ivar 和 protocol。 - `mr-route-probe`:面向读取的 endpoint 和输出设备探测工具,用于路由边界实验。 - `MRXPCTraceInterpose`:私有动态 interposer,用于追踪来自本地探测进程的 MediaRemote XPC dictionary 发送。 - `now-playing-fixture`:仅包含元数据的 fixture,用于测试 `MPNowPlayingInfoCenter` 的发布是否通过 MediaRemote 显示。 - `tools/mediaremote-inventory.zsh`:可重复的本地捕获脚本,用于获取 dyld-cache 导出、导入、字符串、ObjC 名称、SDK 差异、支持二进制文件、资源和 entitlements。 - `tools/mediaremote-entitlement-experiment.zsh`:可重复的本地运行器,用于构建 `mr-internal-probe`,使用候选的私有 entitlements 对副本进行签名,并捕获运行时的差异。 - `tools/mediaremote-daemon-observe.zsh`:可重复的本地运行器,用于执行探测并在同一时间窗口内捕获聚焦的 `mediaremoted`/unified-log 证据。 - `tools/mediaremote-interface-capture.zsh`:可重复的本地运行器,用于将已加载 framework 中选定的 Objective-C runtime 接口捕获到被忽略的研究输出中。 - `tools/mediaremote-message-surfaces.zsh`:可重复的提取器,用于从清单捕获中提取 XPC key、消息日志、请求处理程序、protobuf/message 符号以及 transport 辅助工具。 - `tools/mediaremote-message-id-callsites.zsh`:可重复的反汇编解析器,用于直接解析 MediaRemote XPC 消息类型的调用点。 - `tools/mediaremote-xpc-trace-observe.zsh`:可重复的 DYLD interposer 运行器,用于将 XPC message-ID 追踪与聚焦的 daemon 日志配对。 ## 研究形式 每个目标都应回答相同的核心问题: - 存在哪些公开、私有以及运行时发现的入口点? - 哪些类型、函数、通知、常量、回调以及 XPC 或 daemon 边界看起来是有用的? - 当前 OS framework 中存在哪些符号,而已安装的 beta SDK 中又出现了哪些符号? - 用户态可以直接调用什么,什么需要 entitlements 或 TCC,什么仅在 SIP 已禁用/私有通道条件下有效? - 哪些观察结果是在本地验证过的,哪些仍然是根据头文件、符号、字符串或行为推断出来的? 将原始捕获内容保留在 `research//` 中,并仅将清理后、可重用的知识提升至 `docs/frameworks//`。 ## 当前目标 `MediaRemote.framework` 及相关媒体控制层: - “正在播放”的元数据和队列 - 播放状态和命令调度 - 来源、路由和目标发现 - 应用、daemon、XPC、通知和私有 framework 边界 - macOS 26.5 与 macOS 27 beta SDK 的差异 有关起始大纲,请参阅 `docs/frameworks/MediaRemote/README.md`。 `UserNotifications` 和 `NotificationCenter.app` 辅助功能研究: - Notification Center 支持的、应用作用域内的 UserNotifications API 边界 - 对系统 Notification Center UI 的只读 Accessibility 检查 - 活跃 macOS 版本的观察者能力证据 - 预览隐私和 TCC 限制 使用以下命令运行只读探测: ``` swift run spelunk notifications --max-depth 6 ``` 它不请求与通知 UI 进行任何交互,也不执行任何 Accessibility 操作。宿主进程必须已经拥有 Accessibility 权限。有关研究边界,请参阅 `docs/frameworks/UserNotifications/README.md`;有关证据计划,请参阅 `research/UserNotifications/README.md`。 当前有用的命令: ``` swift run mr-now-playing-probe --all swift run mr-now-playing-probe --origins swift run mr-internal-probe swift run mr-interface-probe swift run mr-route-probe swift run mr-now-playing-probe --observe 10 --application tools/mediaremote-inventory.zsh tools/mediaremote-entitlement-experiment.zsh tools/mediaremote-daemon-observe.zsh tools/mediaremote-interface-capture.zsh tools/mediaremote-message-surfaces.zsh tools/mediaremote-message-id-callsites.zsh tools/mediaremote-xpc-trace-observe.zsh ```
标签:Apple生态, CVE监控, iOS, Swift, 云资产清单, 私有API, 系统框架研究, 逆向工程