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

ldo*_*ogy 9 macos jailbreak hackintosh ios

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

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

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

那时我们开始深入挖掘并找到了IMCore.framework.IMCore基本上是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上做过铁杆越狱工作的人可能会有一两个想法 - 任何人?

ldo*_*ogy 6

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

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

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

当El Capitan出现时,挑战来了.El Capitan中新的无根功能(系统完整性保护)可防止将我们的小攻击注入imagent,从而结束了此解决方案.:-(当我们调用故障发生task_for_pidimagent过程.失败和基本块从我们注入我们的代码到这一进程.

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