如何hook在bundle下面二进制文件里面的OC方法

需求: hook 到 -[TPSPhonebookDetailController viewDidLoad] 方法
代码:

%hook TPSPhonebookDetailController

  • (void)viewDidLoad {
    %orig;
    }
    %end

分析系统的设置app,点击 设置→电话→本机号码,查到界面是TPSPhonebookDetailController类,然后在定位到该类所在的文件:/System/Library/PreferenceBundles/PhonebookTelephonySettings.bundle/PhonebookTelephonySettings的 Bundle ID:com.apple.PhonebookTelephonySettings
于是写logos注入com.apple.PhonebookTelephonySettings,用 MonkeyDev调试,发现没有hook到;
又注入到:com.apple.Preferences(设置app的Bundle ID),
还是没有hook到。

注入Preferences应该是对的,没Hook到的原因应该是Tweak的初始化函数执行的时候Bundle没加载。试试注册dyld回调在回调里Hook

谢谢
注入Preferences,hook前加载一下就可以了

%ctor
{
    NSBundle *bundle = [NSBundle bundleWithPath:@"/System/Library/PreferenceBundles/PhonebookTelephonySettings.bundle"];
    if ([bundle load]) {
    }
}