草庐IT

ios - 克服 OS X 和越狱的 iOS 私有(private) Apple 权利

coder 2023-07-30 原文

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

我们有一个客户想要为 OS X 创建一个替代消息应用程序。他们基本上想要使用相同的帐户、聊天记录和所有内容,但提供与构建的完全不同的 UI(针对某些残障人士) - 在 Messages.app 中。考虑到 Messages.app 中的主要服务 iMessage 完全没有记录,因此创建他们自己的消息传递应用程序是行不通的,因此用第 3 方代码支持它几乎是不可能的。

根据初步研究,很明显,记录良好的 AppleScript 方法将提供一个可行但粗糙的解决方案,缺少原始应用程序的许多功能(例如打字时的指示等),更不用说它需要保持原来的消息应用程序运行,这会分散用户的注意力。

那时我们开始更深入地挖掘并找到了 IMCore.frameworkIMCore 基本上是 Messages.app 用来与各种服务通信的引擎,它的引擎是 imagent,它表面上是管理数据的,实际上是与各种服务通信的即时通讯服务器。 IMCore 是一个私有(private)框架,使用起来显然有些风险(并且会自动从 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(代码签名无效)(Xcode说由于代码签名错误而终止)。

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

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

最佳答案

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

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

IMCore.framework 相当易于使用,包括 iMessage 的每一点元数据,包括另一端用户正在键入的通知、用于发送和接收附件的 API,你说出来!它似乎在 OS X 版本之间发生了一些变化,但我们能够让它在 OS X 版本之间工作(我们测试了 10.8 到 10.10)。

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

总的来说,这不是一个圆满的结局,但至少我们尝到了应许之地的滋味。

关于ios - 克服 OS X 和越狱的 iOS 私有(private) Apple 权利,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28711358/

有关ios - 克服 OS X 和越狱的 iOS 私有(private) Apple 权利的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  4. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  5. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  6. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  7. ruby - rbenv 安装 ruby​​ 校验和不匹配 osx - 2

    我已经在mountainlion上成功安装了rbenv和ruby​​build。运行rbenvinstall1.9.3-p392结束于:校验和不匹配:ruby-1.9.3-p392.tar.gz(文件已损坏)预期f689a7b61379f83cbbed3c7077d83859,得到1cfc2ff433dbe80f8ff1a9dba2fd5636它正在下载的文件看起来没问题,如果我使用curl手动下载文件,我会得到同样不正确的校验和。有没有人遇到过这个?他们是如何解决的? 最佳答案 tl:博士;使用浏览器从http://ftp.rub

  8. Ruby - 如何处理子类意外覆盖父类(super class)私有(private)字段的问题? - 2

    假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案

  9. ruby - "public/protected/private"方法是如何实现的,我该如何模拟它? - 2

    在ruby中,你可以这样做:classThingpublicdeff1puts"f1"endprivatedeff2puts"f2"endpublicdeff3puts"f3"endprivatedeff4puts"f4"endend现在f1和f3是公共(public)的,f2和f4是私有(private)的。内部发生了什么,允许您调用一个类方法,然后更改方法定义?我怎样才能实现相同的功能(表面上是创建我自己的java之类的注释)例如...classThingfundeff1puts"hey"endnotfundeff2puts"hey"endendfun和notfun将更改以下函数定

  10. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

随机推荐