【问题标题】:Call method from another app (Jailbreak iOS)从另一个应用程序调用方法(越狱 iOS)
【发布时间】:2013-10-06 20:47:01
【问题描述】:

在越狱的 iOS 设备上,一个应用程序是否可以调用另一个应用程序的方法(实例方法,而不是静态方法)?另一种表述方式:如何获取应用实例(假设应用正在运行)以便调用其中一个方法?

背景:我正在尝试从 iPodUI 私有框架中的挂钩方法调用音乐播放器应用程序中的函数(有关详细信息,请参阅 this post)。

这个问题已经被问到Android,但是我没有找到越狱iOS的任何东西。如果那是因为我问错了问题并且有不同的方法可以采用,我愿意接受。

【问题讨论】:

  • 射击,在输入所有这些后,我发现这个问题似乎有一个可能的答案:stackoverflow.com/questions/18224150/…
  • 除非我误解了您的问题,否则我认为其他答案(关于CPDistributedMessagingCenter)不会对您有所帮助。如果您知道其他应用程序(例如音乐播放器)已经编码为侦听特定通知/消息,那将很有用。如果您只想在另一个应用程序中调用任意方法,而不是被其他进程调用,那么我认为您需要 MobileSubstrate 挂钩。
  • 谢谢内特。但是我不应该能够连接到音乐播放器应用程序并添加我自己的听众吗?还是我让这变得比应该的更复杂?
  • 如果你的意思是结合使用CPDistributedMessagingCenter的技术 hooking,这样音乐播放器就有了新的服务器/监听器......当然,你可以这样做。我想问题是您是否需要将参数传递给此方法。如果您不这样做,那么CPDistributedMessagingCenter 就没有必要了,您可以使用多种通知机制中的任何一种。
  • 我不需要将参数传递给方法(实际上音乐播放器中的最终方法需要参数,但只有音乐播放器会知道这些是什么——很可能我会使用包装函数),所以我有兴趣了解这些可能性。

标签: ios jailbreak tweak


【解决方案1】:

实现此目的的一种简单且替代的方法是使用 cycript 和 system() 调用,但是请注意在使用 system() 之前使用它的危险,因为它可能不安全(在我看来,没有那么多在一切都非常不安全的越狱 iOS 上很重要)

假设您有一个像 [[SomeClass sharedInstance] methodToBeCalledExternally] 这样的方法,您想从其他进程调用它

您可以将该调用保存到 /tmp/something.cy 中的文本文件中

然后你通过运行在外部注入该代码:

cycript -p Music /tmp/something.cy

但如果您需要以编程方式进行,当然如果环境没有沙盒(我假设不是),那么您可以这样做:

system("cycript -p Music /tmp/something.cy")

通过这种方式,您可以在任何进程(在本例中为 Music 应用)中从您的代码中执行任意 ObjC 代码。

最后,不要忘记删除文件 /tmp/something.cy,因为您将不再需要它

【讨论】:

  • 谢谢,听起来是个不错的解决方案,有时间一定要试试这个。
猜你喜欢
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多