克服OS X和越狱iOS私有Apple权利

时间:2015-02-25 04:50:27

标签: ios macos jailbreak hackintosh

这个可能是一个失败的原因,但我会问,因为我老实说只是好奇...

我们有一个客户想要为OS X创建替代消息应用程序。他们基本上想要使用相同的帐户,聊天记录和所有内容,但为构建提供完全不同的UI(对于有特定残疾的人) -in Messages.app。鉴于Messages.app,iMessage中的主要服务完全没有记录,因此创建他们自己的消息传递应用程序是不会飞的,所以支持使用第三方代码几乎是不可能的。

经过初步研究,显而易见的是,有文档记录的AppleScript方法将提供可行但粗略的解决方案,缺少原始应用程序的许多功能(例如打字时的指示等),更不用说它需要保持原始消息应用程序运行,这会分散用户的注意力。

此时我们开始深入挖掘并找到IMCore.frameworkIMCore基本上是Messages.app用于与各种服务通信的内容,其引擎是imagent,这似乎是管理数据,并实际与各种IM服务器通信。 IMCore是一个私有框架,显然使用起来有些冒险(并自动从App Store中排除他们的应用程序),但我们的假设是,对于OS X,我们仍然应该能够实现这一点,并将应用程序分发到App Store没有太大困难。

我们开始尝试使用IMCore(同时对Messages.app进行逆向工程以了解它是如何使用的),并取得了一些进展。我们能够成功连接到imagent进程并执行多个配置操作,但随后发现数据模型基本上是空的 - 我们无法查看任何用户的数据或与任何用户进行通信IM服务,即使我们在用户的安全上下文中运行。

然后我们注意到Messages.app有一些非常奇怪的未记录的权利,例如com.apple.private.imcore.imdpersistence.database-accesscom.apple.imagent。在这一点上,我们假设这些权利是我们为了与imagent成功沟通而缺少的权利。我们已经尝试将这些权利添加到我们自己的应用中,并且能够成功构建并对其进行编码,但是当程序启动时,它会在启动时因系统消息EXC_CRASH (Code Signature Invalid)而崩溃(Xcode说Terminated due to code signing error )。

我们可怕的假设是,Apple锁定了他们的私人权利,以便系统不会接受使用它们的二进制文件,除非它是由Apple直接签署的,但这显然是一种理论。另一个问题是,imagent如何知道我们的二元是否具有这些权利?难道我们不能以某种方式欺骗这些权利吗?

正如我所说,感觉就像一个失败的原因,但谁知道。我猜猜在iOS上做过硬核越狱工作的人可能有一两个想法 - 任何人?

1 个答案:

答案 0 :(得分:6)

我会回答我自己的问题,以便在有人关心此事的情况下提供更多信息。在一天结束时,我们能够通过注入imagent进程并捕获权利验证功能,添加功能以便imagent允许我们客户端的XPC连接来跨越此障碍。

这打开了通过IMCore.framework与imagent进行完全无限制通信的大门,我可以确认已实现完整的iMessage功能。我们能够看到用户的iTunes帐户,发送和接收消息,从用户的数据库加载消息(显示每个聊天的历史记录)以及其他所有内容。该实现包括一个微小的系统守护进程,它在重新启动时(或系统启动时)注入了imagent,因此最终用户很容易使用标准的OS X安装程序进行安装。

IMCore.framework相当容易使用,并且包含iMessage的每一小部分元数据,包括另一端用户正在键入的通知,用于发送和接收附件的API,您可以为其命名!它似乎在OS X版本之间有所改变,但我们能够使它在OS X版本中运行(我们测试了10.8到10.10)。

当El Capitan出现时,挑战来了。 El Capitan中新的无根功能(系统完整性保护)可防止将我们的小错误注入imagent,从而终止此解决方案。 :-(当我们在task_for_pid进程上调用imagent时失败。这失败了,基本上阻止我们将代码注入到该进程中。

总的来说,这并不是一个美好的结局,但至少我们已经领略了这片承诺的土地。