UIApplication无法hook

困了好几天,UIApplication下这几个函数都无法hook,问大神究竟错在何处呢?代码如下:

#import <substrate.h>

//ApplicationHooks=======================================================
%hook UIApplication

    -(void)applicationDidBecomeActive:(UIApplication *)application{
        %log((NSString *)@"jy-7 ");
    }
    -(void)applicationDidEnterBackground:(UIApplication *)application{
        %log((NSString *)@"jy-8 ");
    }

%end

这两个函数都是UIApplication里定义的protocol,你需要到对应的App Delegate去hook看效果。另外,hook函数里%orig;也没调用,你确定要覆盖掉?

跟@gangzimo 说的一样,因为这2个方法根本就不是定义在UIApplication里的,而是协议方法。你需要到实现了这个协议的类里去hook它们

可是很奇怪,hook了UIApplicationDelegate的protocol也同样没有效果,看文档资料说是什么回调参数,不知道会不会因此而不能用常规方法hook呢?

protocol只是声明,具体实现是没有的。要去找实现方法hook,protocol hook了是没用的。

你注意对比这2句话的异同

@interface SpringBoard : FBSystemApp SBPowerDownControllerDelegate, MCProfileConnectionObserver, **UIApplicationDelegate**

如上在SpringBoard中定义了遵循UIApplicationDelegate,那是否说明通过hook SpringBoard即可?

1 个赞

还是要看SpringBoard有没有实现其中protocol,protocol可以是optional的,看代码吧