Theos 怎么hook 私有库中的OC方法

需要hook的方法在私有库中
尝试过使用MSHookMessageEx,但是objc_getMetaClass返回的是空
然后使用MSGetImageByName获取私有库的加载地址,但是取回的也是空
在plist中也加入了私有库的bundleid

直接使用logos的话也是失败的

dyld callback呢

可以获取到模块的基址

这样的话,我只能通过基址加偏移,然后使用MSHookFunction 来hook

我想问一下,怎么能够使用MSHookMessageEx来做

我尝试在callback里面调用objc_getMetaClass,但是失败了

或者如果使用MSFindSymbo,那么填写的OC的方法的名字应该是什么样子的,这个方法没有被导出

OC哪来的导出不导出……

findsymbol不是一定要导出才行吗

先不说别的为啥Hook OC函数要FindSymbol

因为我使用hookmessage失败
objc_getMetaClass返回的是空

代码看看呢

id (*OldanalyzeEvents)(id self, SEL _cmd,id p1);
id NewanalyzeEvents(id self, SEL _cmd,id p1){
NSLog(“Tweak Success”);
return OldanalyzeEvents(self,_cmd,p1);
}
static attribute((constructor)) void InitTweak()
{
MSHookMessageEx(objc_getMetaClass(“VTPhraseSpotter”),@selector(_analyzeEvents:), NewanalyzeEvents,& OldanalyzeEvents);
}

搞明白了,这个framework是加载过后使用dlopen加RTLD_LAZY标志加载的,所有在一开始在contractor和callback里面都不能获取到类的地址

嗯。我之前的做法是手动强行加载一次。用RTLD_NOW

能贴下代码吗,还是没明白怎么搞