【问题标题】:iOS SpringBoardServices get UIApplicationiOS SpringBoardServices 获取 UIApplication
【发布时间】:2013-05-07 07:12:05
【问题描述】:

使用otool -tV SpringBoardServices 命令,我可以在SpringBoardServices 框架二进制文件中获取C 函数..

我可以看到SBFrontmostApplicationDisplayIdentifier,它会给我最重要的应用程序的 ID。这个id可以用来获取UIApplication吗?最终我想获得消耗触摸事件的最顶层视图及其类型,如 UIButton 等?

任何帮助表示赞赏。

【问题讨论】:

  • 你在这方面做得怎么样了?

标签: ios iphone-privateapi


【解决方案1】:

这不是一个真正的答案,而只是对这个问题的一些想法。

C 与 Objective C API 的对比

  • 一般来说,有两种类型的 API:C API(如 SBFrontmostApplicationDisplayIdentifier)和目标 C API。

  • 我相信所有 C API 都只适用于原始类型(字符串、整数等)。我没有看到任何返回 Objective C 对象的 C API。

  • SBFrontmostApplicationDisplayIdentifier 返回 id(它只是一个字符串)。作为 Preferences 应用程序的示例“com.apple.Preferences”。

  • 我相信你会更幸运地寻找返回任何类型对象的 Objective C API

进程间通信

  • 没有简单的方法在进程之间传递对象(尤其是复杂的对象指向其他对象,它指向其他对象等等)。如果你仔细想想,UIApplication 对象可以引用一半的应用程序。唯一的方法是在一端序列化所有东西并在另一端反序列化。

  • 考虑到与对象序列化相关的问题,大多数需要进行进程间通信的API,都将具有最关键信息的简单结构相互传递。我在对 iOS 二进制文件进行逆向工程时就看到了这种模式。

UIApplication

  • 我猜 UIApplication 对象永远不会离开进程空间。实际上,Springboard 中存在 SBApplication 类(继承自 SBDisplay)是对此的一种间接确认。

想法

  • 试试看BackboardService

  • 尝试查看 SpringboardService 中的所有 API

  • 我会尝试寻找与 Display 相关的任何事情。

附:我很想看到解决方案,因为我不知道有任何 API 可以让您看到 3rd 方应用程序 UI。

【讨论】:

  • 嗨 Victor - 你用过 GSEventRegisterEventCallBack 吗?当视图被添加或删除时,这对获取事件有帮助吗?我知道这是一个有点模糊的问题,但我无法让 GSEventRegisterEventCallBack 正常工作,所以问你是否使用过它?
  • 我没用过。我会说这是一个非常有趣的研究方向。我在你写的单独问题中添加了我在逆向工程中找到的 10-15 分钟的信息。另外,你是在真机还是模拟器上测试?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多