From 0ec8de7b53ce741856b2d4bda82afe6e62fcb80f Mon Sep 17 00:00:00 2001 From: Sunnyyoung Date: Fri, 17 Mar 2017 16:53:52 +0800 Subject: [PATCH] Add tweak for multiple instance --- Makefile | 1 + WeChatTweak.dylib | Bin 9916 -> 10124 bytes WeChatTweak.m | 26 ++++++++++++++++++-------- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 7a9be2d..7dce04a 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ build:: clang -dynamiclib ./WeChatTweak.m -fobjc-link-runtime -current_version 1.0 -compatibility_version 1.0 -o ./${DYLIBFILE} debug:: + make clean make build DYLD_INSERT_LIBRARIES=./${DYLIBFILE} ${WECHATPATH}/WeChat & diff --git a/WeChatTweak.dylib b/WeChatTweak.dylib index 6aadb809f00355fc474ecf30c9b9d40ee2bace47..931ccd3b67b52c67a30a3a26626eb124a9828133 100755 GIT binary patch literal 10124 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 diff --git a/WeChatTweak.m b/WeChatTweak.m index af9b184..c63fe9f 100755 --- a/WeChatTweak.m +++ b/WeChatTweak.m @@ -3,12 +3,12 @@ #import #import -__attribute__((constructor)) -static void initializer(void) { - Class MessageServiceClass = NSClassFromString(@"MessageService"); - SEL onRevokeMsgSEL = NSSelectorFromString(@"onRevokeMsg:"); - IMP onRevokeMsgIMP = imp_implementationWithBlock(^(id self, id arg) { - NSString *message = (NSString *)arg; +// Tweak for no revoke message. +__attribute__((constructor(101))) static void noRevokeTweak(void) { + Class class = NSClassFromString(@"MessageService"); + SEL selector = NSSelectorFromString(@"onRevokeMsg:"); + Method method = class_getInstanceMethod(class, selector); + IMP imp = imp_implementationWithBlock(^(id self, NSString *message) { NSRange begin = [message rangeOfString:@""]; NSRange subRange = NSMakeRange(begin.location + begin.length,end.location - begin.location - begin.length); @@ -20,6 +20,16 @@ static void initializer(void) { [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:userNotification]; }); }); - Method onRevokeMsgMethod = class_getInstanceMethod(MessageServiceClass, onRevokeMsgSEL); - class_replaceMethod(MessageServiceClass, onRevokeMsgSEL, onRevokeMsgIMP, method_getTypeEncoding(onRevokeMsgMethod)); + class_replaceMethod(class, selector, imp, method_getTypeEncoding(method)); +} + +// Tweak for multiple instance. +__attribute__((constructor(102))) static void multipleInstanceTweak(void) { + Class class = object_getClass(NSClassFromString(@"CUtility")); + SEL selector = NSSelectorFromString(@"HasWechatInstance"); + Method method = class_getInstanceMethod(class, selector); + IMP imp = imp_implementationWithBlock(^(id self) { + return 0; + }); + class_replaceMethod(class, selector, imp, method_getTypeEncoding(method)); }