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


#1

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


#2

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


#3

dyld callback呢


#4

可以获取到模块的基址

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

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

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

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


#5

OC哪来的导出不导出……


#6

findsymbol不是一定要导出才行吗


#7

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


#8

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


#9

代码看看呢


#10

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);
}


#11

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


#12

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