hook系统函数不成功

各位大神,我想要hook系统的SCNetworkReachabilityGetFlags 函数,但是没有看到效果,也没有看到输出,还请指点一下。谢谢先。plist里面,已经写入了相应的app的bid 。 看到了输出 MS:Notice: Injecting: com.test.test [test] (847.27)(bid改了 :tongue:)。但是实际没有效果,也没有看到输出。
请问哪里写的不对呢?

#import <substrate.h>
#import <SystemConfiguration/SystemConfiguration.h>
#import <UIKit/UIKit.h>

Boolean
(*orig_SCNetworkReachabilityGetFlags)                        (
                                                SCNetworkReachabilityRef        target,
                                                SCNetworkReachabilityFlags        *flags
                                                );
Boolean
repl_SCNetworkReachabilityGetFlags                        (
                                                SCNetworkReachabilityRef        target,
                                                SCNetworkReachabilityFlags        *flags
                                                )
{
    Boolean result;
    NSLog(@"videodemo from repl");
    if([NSBundle mainBundle].bundleIdentifier isEqualToString:@"com.test.test"])
    {
        NSLog(@"videodemo NSBundle fit");
        SCNetworkReachabilityFlags fg = 0;
        result =  orig_SCNetworkReachabilityGetFlags(target,&fg);

        printf("videodemo haha\n");
        *flags = fg & ~(1u<<18);
    }
    else{
     return orig_SCNetworkReachabilityGetFlags(target,flags);
    }
    return result;
}
%ctor
{
    MSHookFunction((Boolean*)MSFindSymbol(NULL,"SCNetworkReachabilityGetFlags") ,(Boolean*)repl_SCNetworkReachabilityGetFlags,(Boolean**)&orig_SCNetworkReachabilityGetFlags);
}
MSHookFunction((Boolean*)MSFindSymbol(NULL,"SCNetworkReachabilityGetFlags") ,(Boolean*)repl_SCNetworkReachabilityGetFlags,(Boolean**)&orig_SCNetworkReachabilityGetFlags);

改成

MSHookFunction((Boolean*)MSFindSymbol(NULL,"SCNetworkReachabilityGetFlags") , &repl_SCNetworkReachabilityGetFlags, &orig_SCNetworkReachabilityGetFlags)

试试

另外,你的NSLog输出了吗

hi大狗神辛苦。
1、修改了你给的函数以后,出现错误 :
Tweak.xm:35:9: error: no matching function for call to ‘MSHookFunction’
MSHookFunction((Boolean*)MSFindSymbol(NULL,“SCNetworkReachabilityGetFlags”) ,&repl_SCNetworkReachabilityGetFlags,&orig_SCNetworkReachabilityGetFlags);
这个错误在论坛上有人也发过帖子 http://bbs.iosre.com/t/mshookfunction-no-matching-function/299

2、没有输出。

这个帖子给出了解决方法了,强制转换一下类型,看行不行?

昨天翻了N个github上的代码,尝试修改了一下。MSHookFunction((Boolean*)MSFindSymbol(NULL,“SCNetworkReachabilityGetFlags”) ,(Boolean*)repl_SCNetworkReachabilityGetFlags,(Boolean**)&orig_SCNetworkReachabilityGetFlags);

SCNetworkReachabilityGetFlags改为 _SCNetworkReachabilityGetFlags,至少对reachibility这个app是有效了。 其他的app没有效果。继续研究。 多谢狗神。

对一个app有效说明代码没问题,对其他app没效果,可能是因为其他app没有调用这个函数

多谢指点方向。我继续追查下去。