【问题标题】:How to hook methods of MPIncomingPhoneCallController?如何挂钩 MPIncomingPhoneCallController 的方法?
【发布时间】:2012-05-07 01:48:02
【问题描述】:

我想在 iOS 5 中挂钩 MPIncomingPhoneCallController 类的方法,以便在来电时执行某些操作。我用

Class _$MPIncomingPhoneCallController = objc_getClass("MPIncomingPhoneCallController");

MSHookMessage(_$MPIncomingPhoneCallController, 
              @selector(updateLCDWithName:label:breakPoint:), 
             (IMP) &Hook_LCD, 
             "pre_");

updateLCDWithName:label:breakPoint:,但失败了。

我该怎么做?

【问题讨论】:

  • 你不钩类。你挂钩方法或函数。我建议你谷歌一下,寻找关于如何使用 MobileSubstrate 的教程,但首先要了解更多关于编程的基础知识。 PS:这里你必须使用 objc_getMetaClass()
  • @YllierDev 是的,你是对的,我挂钩函数。但首先我必须得到类。 objc_getMetaClass() 用于挂钩类方法,而 objc_getClass 用于挂钩其他方法。
  • objc_getClass 用于实例方法。很抱歉造成混淆,我不知道我怎么认为你想挂钩一个类方法。无论如何,我假设您正在尝试在将您的调整注入 SpringBoard 时挂钩那个。你必须知道这个类在 SpringBoard 的一个插件中,它加载得很晚。因此,您只能在加载该插件后才挂钩它。
  • @YllierDev 因为加载较晚所以我得到零? link Vertex 在那里提到了 iEnhancer,我用谷歌搜索但发现很少有用的信息。你能给我一些指导吗?谢谢。
  • 我很抱歉,但也许 nil 不是原因。我测试其他人,他们也为零,但方法被迷住了。我会测试更多,对此感到抱歉。

标签: iphone ios5 jailbreak iphone-privateapi


【解决方案1】:

您尝试挂接的类位于 IncomingCall.serviceBundle 中,只有在有来电时才会在 SpringBoard 中加载。要确定它何时实际加载,您需要挂钩SBPluginManager loadPluginBundle:。等到加载的包是com.apple.mobilephone.incomingcall。只有这样你才能钩住你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    相关资源
    最近更新 更多