Dispatch_after 里的代码怎么hook

dispatch_after 里的代码怎么hook

提示:这个问题可以转化成 hook block

一个方法里的参数有block我可以hook到 ,
dispatch里的block 怎么hook呀

hook dispatch_after不就好了

you need fishhook

hook dispatch_after 回调太多 不知道 用哪一个 哈哈

既然你知道要hook哪个block,直接hook那个block就好了

- (id<NSObject>)addObserverForName:(NSNotificationName)name 
                            object:(id)obj 
                             queue:(NSOperationQueue *)queue 
                        usingBlock:(void (^)(NSNotification *note))block;

我要hook这个方法 但是不知道 通过什么判断 是不是我要hook的那个block代码块

fishhook 不能hook block

name, obj, queue, block, return address都是判断条件
你不是知道你要hook哪个block么, 直接MSHookFunction那个block就好了, 不需要在api这里做手脚

[center addObserverForName:NSCurrentLocaleDidChangeNotification object:nil
    queue:mainQueue usingBlock:^(NSNotification *note) {
 
        NSLog(@"The user's locale changed to: %@", [[NSLocale currentLocale] localeIdentifier]);
    }];

你的意思是让我直接hook这个block吗

 ^(NSNotification *note) {
 
        NSLog(@"The user's locale changed to: %@", [[NSLocale currentLocale] localeIdentifier]);
    }

MSHookFunction我还没用过 ,非越狱环境也可以用吗?

越不越狱你应该在一楼就说清楚, MSHookFunction只能在越狱环境下用
非越狱我上面也说了, name, obj, queue, block, return address都是判断条件

直接 hook 这个方法,按照 Ouroboros 大佬说的判断吧,还简单点

谢谢大佬,我觉得通过name obj, queue block 我都办不到 ,address倒是可以尝试 ,不知道是不是我陷入了思维误区。 多谢大什么不厌其烦的讲解

 [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
         // do something
        // 我想hook它
    }];