diff --git a/.gitignore b/.gitignore index 62e3708..84c7f35 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ dkhelper/dkhelper/TargetApp/ dkhelper/dkhelper/tmp/ dkhelper/LatestBuild dkhelper/dkhelper/WeChat_Headers/ +Info.plist diff --git a/CHANGELOG.md b/CHANGELOG.md index b8fb22c..efde262 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # DKWechatHelper ChangeLog -[v1.0.5](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.4) / 2020-09-29 +[v1.0.6](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.6) / 2020-10-16 +what's new +* 朋友圈转发 +* 支持7.0.17 +* 更新越狱包7.0.17 +* 更新已注入助手的7.0.17未签名包 +* 更新越狱源安装包 + +# DKWechatHelper ChangeLog +[v1.0.5](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.5) / 2020-09-29 what's new * 新增好友关系检测 * 新增自动收取个人红包 @@ -7,7 +16,8 @@ what's new * 支持7.0.15 * 更新越狱包7.0.15 * 更新已注入助手的7.0.15未签名包 -* 更新越狱源安装包 +* 更新越狱源安装包 + [v1.0.4](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.4) / 2020-07-07 what's new * 新增集赞助手 diff --git a/IMG_0031.JPG b/IMG_0031.JPG new file mode 100644 index 0000000..f03ad38 Binary files /dev/null and b/IMG_0031.JPG differ diff --git a/README.md b/README.md index 70444ce..280b64b 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ 不止于抢红包,功能丰富的微信插件。本软件已成功运行在(iphone7-iphone11、iPad) 给个⭐️不迷路↗️ +[v1.0.6](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.5)适用微信7.0.17 [v1.0.5](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.5)适用微信7.0.15 [v1.0.4](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.4)适用微信7.0.14 [v1.0.3](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.3)适用微信7.0.13 @@ -28,11 +29,13 @@ * [x] CallKit锁屏接视频语音 * [x] 集赞助手 * [x] 好友关系检测 +* [x] 朋友圈转发 安装后在微信设置中点击“微信小助手” 更多请查看下图: ![IMG_0223](./IMG_0223.png) +![IMG_0223](./IMG_0031.JPG) ## 使用: 1.源码学习 @@ -42,8 +45,9 @@ * [7.0.8-*提取码:h54d*](https://pan.baidu.com/s/11VoUXPC4vb5zg8HzP3kC0Q) * [7.0.11-*提取码: 2igg*](https://pan.baidu.com/s/1mU_mezsWhqL2-AY0PB-vVg) * [7.0.13-*提取码: nx4m*](https://pan.baidu.com/s/1rqB0pV4zMEB6Z3VJTsTa8Q) -* [7.0.14](https://n802.com/file/24576815-452231690) -* [7.0.15](https://n802.com/file/24576815-463029595) +* [7.0.14](https://n802.com/file/24576815-452231690) +* [7.0.15](https://n802.com/file/24576815-463029595) +* [7.0.17](https://n802.com/file/24576815-467161527) 将下载的微信放到'/dkhelper/dkhelper/TargetApp/'目录下该目录下有一个空白文件’put ipa or app here‘,和它放在同一文件夹下即可,修改项目BundleId及签名信息,选择真机设备运行即可 @@ -54,7 +58,8 @@ * [未签名版7.0.11-*提取码: fe9f*](https://pan.baidu.com/s/1sOPCqnCPxSdIKq7TKuHK9g) * [未签名版7.0.13-*提取码: fhes*](https://pan.baidu.com/s/1DgSl5u0Gip3cNdqZmRFEWw) * [未签名版7.0.14](https://n802.com/file/24576815-452232682) -* [未签名版7.0.15](https://n802.com/file/24576815-463034104) +* [未签名版7.0.15](https://n802.com/file/24576815-463034104) +* [未签名版7.0.17](https://n802.com/file/24576815-467161662) 注:推荐使用[ios-app-signer](https://github.com/DanTheMan827/ios-app-signer)签名,使用方法自行百度 3.普通用户: diff --git a/dkhelper/dkhelper.xcodeproj/project.pbxproj b/dkhelper/dkhelper.xcodeproj/project.pbxproj index cd99b32..ab80041 100644 --- a/dkhelper/dkhelper.xcodeproj/project.pbxproj +++ b/dkhelper/dkhelper.xcodeproj/project.pbxproj @@ -804,7 +804,7 @@ DEVELOPMENT_TEAM = NL54V6A3P5; ENABLE_BITCODE = NO; INFOPLIST_FILE = dkhelper/Info.plist; - MARKETING_VERSION = 7.0.14; + MARKETING_VERSION = 7.0.17; MONKEYDEV_ADD_SUBSTRATE = YES; MONKEYDEV_CLASS_DUMP = NO; MONKEYDEV_DEFAULT_BUNDLEID = YES; @@ -826,7 +826,7 @@ DEVELOPMENT_TEAM = NL54V6A3P5; ENABLE_BITCODE = NO; INFOPLIST_FILE = dkhelper/Info.plist; - MARKETING_VERSION = 7.0.14; + MARKETING_VERSION = 7.0.17; MONKEYDEV_ADD_SUBSTRATE = YES; MONKEYDEV_CLASS_DUMP = NO; MONKEYDEV_DEFAULT_BUNDLEID = YES; diff --git a/dkhelper/dkhelper/Info.plist b/dkhelper/dkhelper/Info.plist deleted file mode 100644 index a8a4ff3..0000000 --- a/dkhelper/dkhelper/Info.plist +++ /dev/null @@ -1,387 +0,0 @@ - - - - - BuildMachineOSBuild - 19F101 - CFBundleDevelopmentRegion - zh_CN - CFBundleDisplayName - 微信 - CFBundleDocumentTypes - - - CFBundleTypeName - officeopenxml - LSHandlerRank - Alternate - LSItemContentTypes - - org.openxmlformats.openxml - - - - CFBundleTypeName - data - LSHandlerRank - Alternate - LSItemContentTypes - - public.data - - - - CFBundleTypeName - ppt - LSHandlerRank - Alternate - LSItemContentTypes - - com.microsoft.powerpoint.ppt - - - - CFBundleTypeName - doc - LSHandlerRank - Alternate - LSItemContentTypes - - com.microsoft.word.doc - - - - CFBundleTypeName - xls - LSHandlerRank - Alternate - LSItemContentTypes - - com.microsoft.excel.xls - - - - CFBundleTypeName - pdf - LSHandlerRank - Alternate - LSItemContentTypes - - com.adobe.pdf - - - - CFBundleTypeName - archive - LSHandlerRank - Alternate - LSItemContentTypes - - org.gnu.gnu-tar-archive - - - - CFBundleTypeName - audivideo - LSHandlerRank - Alternate - LSItemContentTypes - - public.audiovisual-content - - - - CFBundleTypeName - image - LSHandlerRank - Alternate - LSItemContentTypes - - public.image - - - - CFBundleTypeName - txt - LSHandlerRank - Alternate - LSItemContentTypes - - public.text - - - - CFBundleExecutable - WeChat - CFBundleIconFiles - - dkhelper/icon.png - - CFBundleIcons - - CFBundlePrimaryIcon - - CFBundleIconFiles - - AppIcon60x60 - - CFBundleIconName - AppIcon - - - CFBundleIcons~ipad - - CFBundlePrimaryIcon - - CFBundleIconFiles - - AppIcon60x60 - AppIcon76x76 - AppIcon83.5x83.5 - - CFBundleIconName - AppIcon - - - CFBundleIdentifier - com.tencent.xin - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - WeChat - CFBundlePackageType - APPL - CFBundleShortVersionString - 7.0.15 - CFBundleSignature - ???? - CFBundleSupportedPlatforms - - iPhoneOS - - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLName - com.tencent.xin - CFBundleURLSchemes - - wexinVideoAPI - weixin - weixinapp - fb290293790992170 - wechat - QQ41C152CF - prefs - wx703 - weixinULAPI - wx7015 - - - - CFBundleVersion - 7.0.15.33 - DTAppStoreToolsBuild - 11E707 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 17F65 - DTPlatformName - iphoneos - DTPlatformVersion - 13.5 - DTSDKBuild - 17F65 - DTSDKName - iphoneos13.5 - DTXcode - 1150 - DTXcodeBuild - 11E608c - FacebookAppID - 290293790992170 - FacebookAutoInitEnabled - - FacebookAutoLogAppEventsEnabled - - ITSDRMScheme - v2 - LSApplicationQueriesSchemes - - qqnews - weixinbeta - qqnewshd - qqmail - whatsapp - wxwork - wxworklocal - wxcphonebook - mttbrowser - mqqapi - mqzonev2 - qqmusic - tenvideo2 - tenvideohd - qnreading - weread - sosomap - comgooglemaps - iosamap - baidumap - sgmap - fbauth2 - wx76fc280041c16519 - wx3bef52104e238bff - rijvideo - wx95a3a4d7c627e07d - wx44b60f3ea0534cd7 - wxacbfe7e1bb3e800f - wxfdab5af74990787a - wx58164a91f1821369 - wxd477edab60670232 - wx82dd7436af5db835 - qqstock - openApp.jdMobile - openapp.toplife - qmkege - mqzonex - txvp - sybapp - wx5a4a8ac0fd48303a - qqsports - qqcar - tencentedu - wemusic - qqmap - mqq - webank - weiyun - weishi - wemeet - - LSRequiresIPhoneOS - - LSSupportsOpeningDocumentsInPlace - - MidasConfig - - HideLoading - - - MinimumOSVersion - 13.0 - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - NSBluetoothAlwaysUsageDescription - Allow WeChat Use Bluetooth Peripheral. - NSBluetoothPeripheralUsageDescription - Allow WeChat Use Bluetooth Peripheral. - NSCameraUsageDescription - Use your Camera to record video, using VoIP features. - NSContactsUsageDescription - Allow WeChat Use your Contact. - NSFaceIDUsageDescription - Allow WeChat Use FaceID. - NSHealthShareUsageDescription - Allow WeChat Use Health Share. - NSHealthUpdateUsageDescription - Allow WeChat Use Health Update. - NSLocationAlwaysUsageDescription - Allow WeChat Use your Location always. - NSLocationUsageDescription - Allow WeChat Use your Location. - NSLocationWhenInUseUsageDescription - Allow WeChat Use your Location when in use. - NSMicrophoneUsageDescription - Use your Microphone to record voice messages, using VoIP features. - NSMotionUsageDescription - Allow WeChat Use Motion. - NSPhotoLibraryAddUsageDescription - Allow WeChat Save Photo. - NSPhotoLibraryUsageDescription - Allow WeChat Use your PhotoLibrary. - NSSiriUsageDescription - Allow WeChat Use Siri. - NSUserActivityTypes - - com.tencent.xin - com.tencent.xin.watch - - UIAppFonts - - WeChatSansStd-Bold.ttf - WeChatSansStd-Medium.ttf - WeChatSansStd-Regular.ttf - WeChatSansSuperscript-Bold.ttf - WeChatSansSuperscript-Regular.ttf - WeChatSansSuperscript-Medium.ttf - - UIBackgroundModes - - location - audio - fetch - voip - remote-notification - network-authentication - - UIDeviceFamily - - 1 - 2 - - UILaunchStoryboardName - Launch Screen - UIPrerenderedIcon - - UIRequiredDeviceCapabilities - - arm64 - - UIStatusBarHidden - - UIStatusBarStyle - UIStatusBarStyleBlackOpaque - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - UIInterfaceOrientationPortraitUpsideDown - - UISupportsDocumentBrowser - - UIViewControllerBasedStatusBarAppearance - - WeChatBundleVersion - 7.0.15.33 - WeChatFeatureIdentifier - release_appstore_7.0.15 - build_time - 2020-08-03 23:07:27 - by - wx_ios_code_helper - path - release_appstore_7.0.15_2020_7_30_23_1_0 - rev - 8a2d4b8b37a11de738ace1ec126991085c057907 - tag - release_appstore_7.0.15 #29 - uuid - 2ccd1b78fb963cb1af6f0e1ec2864066 - ver - 0x17000f21 - - diff --git a/dkhelper/dkhelperDylib/DKHelperSettingController.m b/dkhelper/dkhelperDylib/DKHelperSettingController.m index b1343a0..9f3ec23 100644 --- a/dkhelper/dkhelperDylib/DKHelperSettingController.m +++ b/dkhelper/dkhelperDylib/DKHelperSettingController.m @@ -12,6 +12,8 @@ #import "DKGroupFilterController.h" #import "DKCleanFriendsController.h" #import +#import +#import @interface DKHelperSettingController (){ WCTableViewManager * manager; MMUIViewController *helper; @@ -66,7 +68,7 @@ - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; if(DKHelperConfig.hasShowTips){return;} - [DKHelper showAlertWithTitle:@"重要提示" message:@"本软件完全免费,插件功能仅供学习,由本软件产生的任何利益纠纷须有使用者自行承担。在收到微信团队\"非法客户端提示后\"继续使用可能有封号风险,需使用者自行承担。如遇到提醒,请卸载本软件,更换官方微信客户端" btnTitle:@"我明白了" handler:^(UIButton *sender) { + [DKHelper showAlertWithTitle:@"重要提示" message:@"本软件完全免费,插件功能仅供学习,由本软件产生的任何利益纠纷须有使用者自行承担。在收到微信团队\"非法客户端提示后\"继续使用可能有封号风险,需使用者自行承担。如遇到提醒,请卸载本软件,更换官方微信客户端!\n插件开发占用了作者的大量业余时间,同时部分越狱软件源盗用插件,甚至修改插件名称,如果在使用后觉得有用还请支持!" btnTitle:@"我明白了" handler:^(UIButton *sender) { DKHelperConfig.hasShowTips = true; } btnTitle:@"有风险我不使用了" handler:^(UIButton *sender) { exit(0); @@ -138,20 +140,25 @@ - (void)reloadTableData{ WCTableViewCellManager *callKitCell = [DKHelper switchCellWithSel:@selector(callKitEnable:) target:self title:@"使用CallKit" switchOn:[DKHelperConfig callKitEnable]]; [toBeNO1Section addCell:callKitCell]; + WCTableViewCellManager *timelineForwardCell = [DKHelper switchCellWithSel:@selector(forwardTimeline:) target:self title:@"朋友圈转发" switchOn:[DKHelperConfig timeLineForwardEnable]]; + [toBeNO1Section addCell:timelineForwardCell]; + //MARK: 支持作者 WCTableViewSectionManager *supportAuthorSection = [DKHelper sectionManage]; supportAuthorSection.headerTitle = @"支持作者"; [manager addSection:supportAuthorSection]; - WCTableViewNormalCellManager * payMeCell = [DKHelper cellWithSel:@selector(payForMe) target:self title:@"请作者喝杯咖啡"]; + WCTableViewNormalCellManager * payMeCell = [DKHelper cellWithSel:@selector(payForMe) target:self title:@"给作者倒一杯卡布奇诺"]; [supportAuthorSection addCell:payMeCell]; - WCTableViewNormalCellManager *myBlogCell = [DKHelper cellWithSel:@selector(openBlog) target:self title:@"我的博客"]; + WCTableViewNormalCellManager *myBlogCell = [DKHelper cellWithSel:@selector(openBlog) target:self title:@"关于本软件"]; [supportAuthorSection addCell:myBlogCell]; WCTableViewNormalCellManager *myGitHubCell = [DKHelper cellWithSel:@selector(openGitHub) target:self title:@"本项目GitHub" rightValue:@"请给个⭐️" accessoryType:1]; [supportAuthorSection addCell:myGitHubCell]; + WCTableViewNormalCellManager *joinGroupCell = [DKHelper cellWithSel:@selector(joinGroup) target:self title:@"加入交流群"]; + [supportAuthorSection addCell:joinGroupCell]; //MARK: 积攒助手 @@ -255,6 +262,10 @@ - (void)revokeIntercept:(UISwitch *)sender{ DKHelperConfig.preventRevoke = sender.isOn; } +- (void)forwardTimeline:(UISwitch *)sender{ + DKHelperConfig.timeLineForwardEnable = sender.isOn; +} + - (void)changedSteps:(UISwitch *)sender{ DKHelperConfig.changeSteps = sender.isOn; [self reloadTableData]; @@ -325,6 +336,13 @@ - (void)payForMe{ item.codeUrl = @"m0E25xJo038.ran,NI96(j"; [scMgr retryRequetScanResult:item viewController:self]; } +- (void)joinGroup{ + ScanQRCodeResultsMgr *scMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("ScanQRCodeResultsMgr") class]]; + ScanCodeHistoryItem *item = [[objc_getClass("ScanCodeHistoryItem") alloc] init]; + item.type = @"QR_CODE"; + item.codeUrl = @"https://weixin.qq.com/g/AQYAAHh7lIFHinAoS0lK9bf4Ew4iQs_looYQ8idimgU-BlwZh-agX8grDS1Gwvuq"; + [scMgr retryRequetScanResult:item viewController:self]; +} - (void)openBlog{ NSURL *blogUrl = [NSURL URLWithString:@"https://www.jianshu.com/p/8f3eae328a20"]; diff --git a/dkhelper/dkhelperDylib/Logos/dkhelperDylib.mm b/dkhelper/dkhelperDylib/Logos/dkhelperDylib.mm index 2496a51..fb16dd4 100644 --- a/dkhelper/dkhelperDylib/Logos/dkhelperDylib.mm +++ b/dkhelper/dkhelperDylib/Logos/dkhelperDylib.mm @@ -35,9 +35,9 @@ #define _LOGOS_RETURN_RETAINED #endif -@class CContactMgr; @class CContact; @class MMServiceCenter; @class WCTimelineMgr; @class VoipCXMgr; @class MicroMessengerAppDelegate; @class CMessageWrap; @class CMessageMgr; @class NewSettingViewController; @class WCTableViewNormalCellManager; @class CGroupMgr; @class WCBizUtil; @class MMContext; @class MMTipsViewController; @class WCRedEnvelopesLogicMgr; @class WCDeviceStepObject; @class UIViewController; -static id _logos_meta_method$_ungrouped$MMServiceCenter$defaultCenter(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$)(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void _logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void (*_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$)(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void _logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void (*_logos_orig$_ungrouped$NewSettingViewController$reloadTableData)(_LOGOS_SELF_TYPE_NORMAL NewSettingViewController* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$NewSettingViewController$reloadTableData(_LOGOS_SELF_TYPE_NORMAL NewSettingViewController* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$NewSettingViewController$setting(_LOGOS_SELF_TYPE_NORMAL NewSettingViewController* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$)(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static void _logos_method$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static void (*_logos_orig$_ungrouped$CMessageMgr$onRevokeMsg$)(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, CMessageWrap *); static void _logos_method$_ungrouped$CMessageMgr$onRevokeMsg$(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, CMessageWrap *); static void (*_logos_orig$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$)(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static void _logos_method$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static NSInteger (*_logos_orig$_ungrouped$WCDeviceStepObject$m7StepCount)(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static NSInteger _logos_method$_ungrouped$WCDeviceStepObject$m7StepCount(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static NSInteger (*_logos_orig$_ungrouped$WCDeviceStepObject$hkStepCount)(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static NSInteger _logos_method$_ungrouped$WCDeviceStepObject$hkStepCount(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$)(_LOGOS_SELF_TYPE_NORMAL WCRedEnvelopesLogicMgr* _LOGOS_SELF_CONST, SEL, HongBaoRes *, HongBaoReq *); static void _logos_method$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$(_LOGOS_SELF_TYPE_NORMAL WCRedEnvelopesLogicMgr* _LOGOS_SELF_CONST, SEL, HongBaoRes *, HongBaoReq *); static unsigned int _logos_method$_ungrouped$WCRedEnvelopesLogicMgr$calculateDelaySeconds(_LOGOS_SELF_TYPE_NORMAL WCRedEnvelopesLogicMgr* _LOGOS_SELF_CONST, SEL); static BOOL (*_logos_meta_orig$_ungrouped$VoipCXMgr$isCallkitAvailable)(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static BOOL _logos_meta_method$_ungrouped$VoipCXMgr$isCallkitAvailable(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static BOOL (*_logos_meta_orig$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable)(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static BOOL _logos_meta_method$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$UIViewController$viewWillAppear$)(_LOGOS_SELF_TYPE_NORMAL UIViewController* _LOGOS_SELF_CONST, SEL, BOOL); static void _logos_method$_ungrouped$UIViewController$viewWillAppear$(_LOGOS_SELF_TYPE_NORMAL UIViewController* _LOGOS_SELF_CONST, SEL, BOOL); static NSString * _logos_method$_ungrouped$MMTipsViewController$text(_LOGOS_SELF_TYPE_NORMAL MMTipsViewController* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$WCTimelineMgr$modifyDataItem$notify$)(_LOGOS_SELF_TYPE_NORMAL WCTimelineMgr* _LOGOS_SELF_CONST, SEL, WCDataItem *, BOOL); static void _logos_method$_ungrouped$WCTimelineMgr$modifyDataItem$notify$(_LOGOS_SELF_TYPE_NORMAL WCTimelineMgr* _LOGOS_SELF_CONST, SEL, WCDataItem *, BOOL); static void (*_logos_orig$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$)(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST, SEL, id, id); static void _logos_method$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST, SEL, id, id); static void (*_logos_orig$_ungrouped$CGroupMgr$addCreateMsg$ContactList$)(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST, SEL, id, id); static void _logos_method$_ungrouped$CGroupMgr$addCreateMsg$ContactList$(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST, SEL, id, id); static BOOL (*_logos_orig$_ungrouped$CContact$isEqual$)(_LOGOS_SELF_TYPE_NORMAL CContact* _LOGOS_SELF_CONST, SEL, CContact *); static BOOL _logos_method$_ungrouped$CContact$isEqual$(_LOGOS_SELF_TYPE_NORMAL CContact* _LOGOS_SELF_CONST, SEL, CContact *); -static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$WCTableViewNormalCellManager(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("WCTableViewNormalCellManager"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$MMServiceCenter(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("MMServiceCenter"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$WCBizUtil(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("WCBizUtil"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$MMContext(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("MMContext"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$CContactMgr(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("CContactMgr"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$CMessageWrap(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("CMessageWrap"); } return _klass; } +@class WCRedEnvelopesLogicMgr; @class MMServiceCenter; @class WCTableViewNormalCellManager; @class CMessageWrap; @class WCBizUtil; @class WCDeviceStepObject; @class CGroupMgr; @class MMContext; @class VoipCXMgr; @class MicroMessengerAppDelegate; @class WCTimelineMgr; @class UIViewController; @class MMTipsViewController; @class CMessageMgr; @class WCOperateFloatView; @class CContactMgr; @class NewSettingViewController; +static id _logos_meta_method$_ungrouped$MMServiceCenter$defaultCenter(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$)(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void _logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void (*_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$)(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void _logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void (*_logos_orig$_ungrouped$NewSettingViewController$reloadTableData)(_LOGOS_SELF_TYPE_NORMAL NewSettingViewController* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$NewSettingViewController$reloadTableData(_LOGOS_SELF_TYPE_NORMAL NewSettingViewController* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$NewSettingViewController$setting(_LOGOS_SELF_TYPE_NORMAL NewSettingViewController* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$)(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static void _logos_method$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static void (*_logos_orig$_ungrouped$CMessageMgr$onRevokeMsg$)(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, CMessageWrap *); static void _logos_method$_ungrouped$CMessageMgr$onRevokeMsg$(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, CMessageWrap *); static void (*_logos_orig$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$)(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static void _logos_method$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static NSInteger (*_logos_orig$_ungrouped$WCDeviceStepObject$m7StepCount)(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static NSInteger _logos_method$_ungrouped$WCDeviceStepObject$m7StepCount(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static NSInteger (*_logos_orig$_ungrouped$WCDeviceStepObject$hkStepCount)(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static NSInteger _logos_method$_ungrouped$WCDeviceStepObject$hkStepCount(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$)(_LOGOS_SELF_TYPE_NORMAL WCRedEnvelopesLogicMgr* _LOGOS_SELF_CONST, SEL, HongBaoRes *, HongBaoReq *); static void _logos_method$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$(_LOGOS_SELF_TYPE_NORMAL WCRedEnvelopesLogicMgr* _LOGOS_SELF_CONST, SEL, HongBaoRes *, HongBaoReq *); static unsigned int _logos_method$_ungrouped$WCRedEnvelopesLogicMgr$calculateDelaySeconds(_LOGOS_SELF_TYPE_NORMAL WCRedEnvelopesLogicMgr* _LOGOS_SELF_CONST, SEL); static BOOL (*_logos_meta_orig$_ungrouped$VoipCXMgr$isCallkitAvailable)(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static BOOL _logos_meta_method$_ungrouped$VoipCXMgr$isCallkitAvailable(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static BOOL (*_logos_meta_orig$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable)(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static BOOL _logos_meta_method$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$UIViewController$viewWillAppear$)(_LOGOS_SELF_TYPE_NORMAL UIViewController* _LOGOS_SELF_CONST, SEL, BOOL); static void _logos_method$_ungrouped$UIViewController$viewWillAppear$(_LOGOS_SELF_TYPE_NORMAL UIViewController* _LOGOS_SELF_CONST, SEL, BOOL); static NSString * _logos_method$_ungrouped$MMTipsViewController$text(_LOGOS_SELF_TYPE_NORMAL MMTipsViewController* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$WCTimelineMgr$modifyDataItem$notify$)(_LOGOS_SELF_TYPE_NORMAL WCTimelineMgr* _LOGOS_SELF_CONST, SEL, WCDataItem *, BOOL); static void _logos_method$_ungrouped$WCTimelineMgr$modifyDataItem$notify$(_LOGOS_SELF_TYPE_NORMAL WCTimelineMgr* _LOGOS_SELF_CONST, SEL, WCDataItem *, BOOL); static void (*_logos_orig$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$)(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST, SEL, id, id); static void _logos_method$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST, SEL, id, id); static void (*_logos_orig$_ungrouped$CGroupMgr$addCreateMsg$ContactList$)(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST, SEL, id, id); static void _logos_method$_ungrouped$CGroupMgr$addCreateMsg$ContactList$(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST, SEL, id, id); static UIButton * _logos_method$_ungrouped$WCOperateFloatView$m_shareBtn(_LOGOS_SELF_TYPE_NORMAL WCOperateFloatView* _LOGOS_SELF_CONST, SEL); static UIImageView * _logos_method$_ungrouped$WCOperateFloatView$m_lineView2(_LOGOS_SELF_TYPE_NORMAL WCOperateFloatView* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$WCOperateFloatView$showWithItemData$tipPoint$)(_LOGOS_SELF_TYPE_NORMAL WCOperateFloatView* _LOGOS_SELF_CONST, SEL, id, struct CGPoint); static void _logos_method$_ungrouped$WCOperateFloatView$showWithItemData$tipPoint$(_LOGOS_SELF_TYPE_NORMAL WCOperateFloatView* _LOGOS_SELF_CONST, SEL, id, struct CGPoint); static void _logos_method$_ungrouped$WCOperateFloatView$forwordTimeLine$(_LOGOS_SELF_TYPE_NORMAL WCOperateFloatView* _LOGOS_SELF_CONST, SEL, id); +static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$WCBizUtil(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("WCBizUtil"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$CMessageWrap(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("CMessageWrap"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$MMContext(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("MMContext"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$WCTableViewNormalCellManager(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("WCTableViewNormalCellManager"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$CContactMgr(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("CContactMgr"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$MMServiceCenter(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("MMServiceCenter"); } return _klass; } #line 16 "/Users/zhudekun/mycode/github/DKWechatHelper/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm" @@ -454,10 +454,56 @@ -static BOOL _logos_method$_ungrouped$CContact$isEqual$(_LOGOS_SELF_TYPE_NORMAL CContact* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd, CContact * other) { - return [other.m_nsUsrName isEqual: self.m_nsUsrName]; + +static UIButton * _logos_method$_ungrouped$WCOperateFloatView$m_shareBtn(_LOGOS_SELF_TYPE_NORMAL WCOperateFloatView* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd){ + static char m_shareBtnKey; + UIButton * btn = objc_getAssociatedObject(self, &m_shareBtnKey); + if (!btn) { + btn = [UIButton buttonWithType:UIButtonTypeCustom]; + [btn setTitle:@" 转发" forState:UIControlStateNormal]; + [btn addTarget:self action:@selector(forwordTimeLine:) forControlEvents:UIControlEventTouchUpInside]; + [btn setTitleColor:self.m_likeBtn.currentTitleColor forState:0]; + btn.titleLabel.font = self.m_likeBtn.titleLabel.font; + [self.m_likeBtn.superview addSubview:btn]; + NSString *base64Str = @"iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABf0lEQVQ4T62UvyuFYRTHP9/JJimjMpgYTBIDd5XEIIlB9x+Q5U5+xEIZLDabUoQsNtS9G5MyXImk3EHK/3B09Ly31/X+cG9Onek5z+c5z/l+n0f8c+ivPDMrAAVJG1l7mgWWgc0saCvAKnCWBm0F2A+cpEGbBkqSmfWlQXOBZjbgYgCDwIIDXZQ0aCrQzOaAZWAIuAEugaqk00jlJOgvYChaA6aAFeBY0nuaVRqhP4CxxQ9gVZJ3lhs/oAnt1ySN51JiBWa2FMYzW+/QzNwK3cCkpM+/As1sAjgAZiRVIsWKwHZ4Wo9NwFz5W2Ba0oXvi4Cu4L2kUrBEOzAMjIXsAjw7YrbpBZ6BeUlHURNu0h7gFXC/vQRlveM34AF4AipAG1AOxu4Me0qS9uM3cqB7bRS4A3y4556SvOt6hN8mAnrtoaTdxvE40H+QEcBP2pFUS5phBASu3eiS1pPqIuCWpKssMWLAPUl+k8T4fuiSfFaZEYBFSYtZhbmfQ95Bjetfmweww0YOfToAAAAASUVORK5CYII="; + NSData *imageData = [[NSData alloc] initWithBase64EncodedString:base64Str options:NSDataBase64DecodingIgnoreUnknownCharacters]; + UIImage *image = [UIImage imageWithData:imageData ]; + [btn setImage:image forState:0]; + [btn setTintColor:self.m_likeBtn.tintColor]; + objc_setAssociatedObject(self, &m_shareBtnKey, btn, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + } + return btn; +} + + +static UIImageView * _logos_method$_ungrouped$WCOperateFloatView$m_lineView2(_LOGOS_SELF_TYPE_NORMAL WCOperateFloatView* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd){ + static char m_lineView2Key; + UIImageView * imageView = objc_getAssociatedObject(self, &m_lineView2Key); + if (!imageView) { + imageView = [[UIImageView alloc] initWithImage:MSHookIvar(self, "m_lineView").image]; + [self.m_likeBtn.superview addSubview: imageView]; + objc_setAssociatedObject(self, &m_lineView2Key, imageView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return imageView; } +static void _logos_method$_ungrouped$WCOperateFloatView$showWithItemData$tipPoint$(_LOGOS_SELF_TYPE_NORMAL WCOperateFloatView* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd, id arg1, struct CGPoint arg2){ + _logos_orig$_ungrouped$WCOperateFloatView$showWithItemData$tipPoint$(self, _cmd, arg1,arg2); + if (DKHelperConfig.timeLineForwardEnable){ + self.frame = CGRectOffset(CGRectInset(self.frame, self.frame.size.width / -4, 0),self.frame.size.width / -4,0); + self.m_shareBtn.frame = CGRectOffset(self.m_likeBtn.frame, self.m_likeBtn.frame.size.width * 2, 0); + self.m_lineView2.frame = CGRectOffset(MSHookIvar(self, "m_lineView").frame, [self buttonWidth:self.m_likeBtn], 0); + } +} + + +static void _logos_method$_ungrouped$WCOperateFloatView$forwordTimeLine$(_LOGOS_SELF_TYPE_NORMAL WCOperateFloatView* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd, id arg1){ + WCForwardViewController *forwardVC = [[objc_getClass("WCForwardViewController") alloc] initWithDataItem:self.m_item]; + [self.navigationController pushViewController:forwardVC animated:true]; +} + + @@ -465,5 +511,5 @@ static __attribute__((constructor)) void _logosLocalInit() { -{Class _logos_class$_ungrouped$MMServiceCenter = objc_getClass("MMServiceCenter"); Class _logos_metaclass$_ungrouped$MMServiceCenter = object_getClass(_logos_class$_ungrouped$MMServiceCenter); { char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_metaclass$_ungrouped$MMServiceCenter, @selector(defaultCenter), (IMP)&_logos_meta_method$_ungrouped$MMServiceCenter$defaultCenter, _typeEncoding); }Class _logos_class$_ungrouped$MicroMessengerAppDelegate = objc_getClass("MicroMessengerAppDelegate"); MSHookMessageEx(_logos_class$_ungrouped$MicroMessengerAppDelegate, @selector(applicationDidEnterBackground:), (IMP)&_logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$, (IMP*)&_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$);MSHookMessageEx(_logos_class$_ungrouped$MicroMessengerAppDelegate, @selector(applicationDidBecomeActive:), (IMP)&_logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$, (IMP*)&_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$);Class _logos_class$_ungrouped$NewSettingViewController = objc_getClass("NewSettingViewController"); MSHookMessageEx(_logos_class$_ungrouped$NewSettingViewController, @selector(reloadTableData), (IMP)&_logos_method$_ungrouped$NewSettingViewController$reloadTableData, (IMP*)&_logos_orig$_ungrouped$NewSettingViewController$reloadTableData);{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'v'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$NewSettingViewController, @selector(setting), (IMP)&_logos_method$_ungrouped$NewSettingViewController$setting, _typeEncoding); }Class _logos_class$_ungrouped$CMessageMgr = objc_getClass("CMessageMgr"); MSHookMessageEx(_logos_class$_ungrouped$CMessageMgr, @selector(AddEmoticonMsg:MsgWrap:), (IMP)&_logos_method$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$, (IMP*)&_logos_orig$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$);MSHookMessageEx(_logos_class$_ungrouped$CMessageMgr, @selector(onRevokeMsg:), (IMP)&_logos_method$_ungrouped$CMessageMgr$onRevokeMsg$, (IMP*)&_logos_orig$_ungrouped$CMessageMgr$onRevokeMsg$);MSHookMessageEx(_logos_class$_ungrouped$CMessageMgr, @selector(AsyncOnAddMsg:MsgWrap:), (IMP)&_logos_method$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$, (IMP*)&_logos_orig$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$);Class _logos_class$_ungrouped$WCDeviceStepObject = objc_getClass("WCDeviceStepObject"); MSHookMessageEx(_logos_class$_ungrouped$WCDeviceStepObject, @selector(m7StepCount), (IMP)&_logos_method$_ungrouped$WCDeviceStepObject$m7StepCount, (IMP*)&_logos_orig$_ungrouped$WCDeviceStepObject$m7StepCount);MSHookMessageEx(_logos_class$_ungrouped$WCDeviceStepObject, @selector(hkStepCount), (IMP)&_logos_method$_ungrouped$WCDeviceStepObject$hkStepCount, (IMP*)&_logos_orig$_ungrouped$WCDeviceStepObject$hkStepCount);Class _logos_class$_ungrouped$WCRedEnvelopesLogicMgr = objc_getClass("WCRedEnvelopesLogicMgr"); MSHookMessageEx(_logos_class$_ungrouped$WCRedEnvelopesLogicMgr, @selector(OnWCToHongbaoCommonResponse:Request:), (IMP)&_logos_method$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$, (IMP*)&_logos_orig$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$);{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'I'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$WCRedEnvelopesLogicMgr, @selector(calculateDelaySeconds), (IMP)&_logos_method$_ungrouped$WCRedEnvelopesLogicMgr$calculateDelaySeconds, _typeEncoding); }Class _logos_class$_ungrouped$VoipCXMgr = objc_getClass("VoipCXMgr"); Class _logos_metaclass$_ungrouped$VoipCXMgr = object_getClass(_logos_class$_ungrouped$VoipCXMgr); MSHookMessageEx(_logos_metaclass$_ungrouped$VoipCXMgr, @selector(isCallkitAvailable), (IMP)&_logos_meta_method$_ungrouped$VoipCXMgr$isCallkitAvailable, (IMP*)&_logos_meta_orig$_ungrouped$VoipCXMgr$isCallkitAvailable);MSHookMessageEx(_logos_metaclass$_ungrouped$VoipCXMgr, @selector(isDeviceCallkitAvailable), (IMP)&_logos_meta_method$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable, (IMP*)&_logos_meta_orig$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable);Class _logos_class$_ungrouped$UIViewController = objc_getClass("UIViewController"); MSHookMessageEx(_logos_class$_ungrouped$UIViewController, @selector(viewWillAppear:), (IMP)&_logos_method$_ungrouped$UIViewController$viewWillAppear$, (IMP*)&_logos_orig$_ungrouped$UIViewController$viewWillAppear$);Class _logos_class$_ungrouped$MMTipsViewController = objc_getClass("MMTipsViewController"); { char _typeEncoding[1024]; unsigned int i = 0; memcpy(_typeEncoding + i, @encode(NSString *), strlen(@encode(NSString *))); i += strlen(@encode(NSString *)); _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$MMTipsViewController, @selector(text), (IMP)&_logos_method$_ungrouped$MMTipsViewController$text, _typeEncoding); }Class _logos_class$_ungrouped$WCTimelineMgr = objc_getClass("WCTimelineMgr"); MSHookMessageEx(_logos_class$_ungrouped$WCTimelineMgr, @selector(modifyDataItem:notify:), (IMP)&_logos_method$_ungrouped$WCTimelineMgr$modifyDataItem$notify$, (IMP*)&_logos_orig$_ungrouped$WCTimelineMgr$modifyDataItem$notify$);Class _logos_class$_ungrouped$CGroupMgr = objc_getClass("CGroupMgr"); MSHookMessageEx(_logos_class$_ungrouped$CGroupMgr, @selector(addChatMemberNeedVerifyMsg:ContactList:), (IMP)&_logos_method$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$, (IMP*)&_logos_orig$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$);MSHookMessageEx(_logos_class$_ungrouped$CGroupMgr, @selector(addCreateMsg:ContactList:), (IMP)&_logos_method$_ungrouped$CGroupMgr$addCreateMsg$ContactList$, (IMP*)&_logos_orig$_ungrouped$CGroupMgr$addCreateMsg$ContactList$);Class _logos_class$_ungrouped$CContact = objc_getClass("CContact"); MSHookMessageEx(_logos_class$_ungrouped$CContact, @selector(isEqual:), (IMP)&_logos_method$_ungrouped$CContact$isEqual$, (IMP*)&_logos_orig$_ungrouped$CContact$isEqual$);} } -#line 441 "/Users/zhudekun/mycode/github/DKWechatHelper/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm" +{Class _logos_class$_ungrouped$MMServiceCenter = objc_getClass("MMServiceCenter"); Class _logos_metaclass$_ungrouped$MMServiceCenter = object_getClass(_logos_class$_ungrouped$MMServiceCenter); { char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_metaclass$_ungrouped$MMServiceCenter, @selector(defaultCenter), (IMP)&_logos_meta_method$_ungrouped$MMServiceCenter$defaultCenter, _typeEncoding); }Class _logos_class$_ungrouped$MicroMessengerAppDelegate = objc_getClass("MicroMessengerAppDelegate"); MSHookMessageEx(_logos_class$_ungrouped$MicroMessengerAppDelegate, @selector(applicationDidEnterBackground:), (IMP)&_logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$, (IMP*)&_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$);MSHookMessageEx(_logos_class$_ungrouped$MicroMessengerAppDelegate, @selector(applicationDidBecomeActive:), (IMP)&_logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$, (IMP*)&_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$);Class _logos_class$_ungrouped$NewSettingViewController = objc_getClass("NewSettingViewController"); MSHookMessageEx(_logos_class$_ungrouped$NewSettingViewController, @selector(reloadTableData), (IMP)&_logos_method$_ungrouped$NewSettingViewController$reloadTableData, (IMP*)&_logos_orig$_ungrouped$NewSettingViewController$reloadTableData);{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'v'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$NewSettingViewController, @selector(setting), (IMP)&_logos_method$_ungrouped$NewSettingViewController$setting, _typeEncoding); }Class _logos_class$_ungrouped$CMessageMgr = objc_getClass("CMessageMgr"); MSHookMessageEx(_logos_class$_ungrouped$CMessageMgr, @selector(AddEmoticonMsg:MsgWrap:), (IMP)&_logos_method$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$, (IMP*)&_logos_orig$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$);MSHookMessageEx(_logos_class$_ungrouped$CMessageMgr, @selector(onRevokeMsg:), (IMP)&_logos_method$_ungrouped$CMessageMgr$onRevokeMsg$, (IMP*)&_logos_orig$_ungrouped$CMessageMgr$onRevokeMsg$);MSHookMessageEx(_logos_class$_ungrouped$CMessageMgr, @selector(AsyncOnAddMsg:MsgWrap:), (IMP)&_logos_method$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$, (IMP*)&_logos_orig$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$);Class _logos_class$_ungrouped$WCDeviceStepObject = objc_getClass("WCDeviceStepObject"); MSHookMessageEx(_logos_class$_ungrouped$WCDeviceStepObject, @selector(m7StepCount), (IMP)&_logos_method$_ungrouped$WCDeviceStepObject$m7StepCount, (IMP*)&_logos_orig$_ungrouped$WCDeviceStepObject$m7StepCount);MSHookMessageEx(_logos_class$_ungrouped$WCDeviceStepObject, @selector(hkStepCount), (IMP)&_logos_method$_ungrouped$WCDeviceStepObject$hkStepCount, (IMP*)&_logos_orig$_ungrouped$WCDeviceStepObject$hkStepCount);Class _logos_class$_ungrouped$WCRedEnvelopesLogicMgr = objc_getClass("WCRedEnvelopesLogicMgr"); MSHookMessageEx(_logos_class$_ungrouped$WCRedEnvelopesLogicMgr, @selector(OnWCToHongbaoCommonResponse:Request:), (IMP)&_logos_method$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$, (IMP*)&_logos_orig$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$);{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'I'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$WCRedEnvelopesLogicMgr, @selector(calculateDelaySeconds), (IMP)&_logos_method$_ungrouped$WCRedEnvelopesLogicMgr$calculateDelaySeconds, _typeEncoding); }Class _logos_class$_ungrouped$VoipCXMgr = objc_getClass("VoipCXMgr"); Class _logos_metaclass$_ungrouped$VoipCXMgr = object_getClass(_logos_class$_ungrouped$VoipCXMgr); MSHookMessageEx(_logos_metaclass$_ungrouped$VoipCXMgr, @selector(isCallkitAvailable), (IMP)&_logos_meta_method$_ungrouped$VoipCXMgr$isCallkitAvailable, (IMP*)&_logos_meta_orig$_ungrouped$VoipCXMgr$isCallkitAvailable);MSHookMessageEx(_logos_metaclass$_ungrouped$VoipCXMgr, @selector(isDeviceCallkitAvailable), (IMP)&_logos_meta_method$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable, (IMP*)&_logos_meta_orig$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable);Class _logos_class$_ungrouped$UIViewController = objc_getClass("UIViewController"); MSHookMessageEx(_logos_class$_ungrouped$UIViewController, @selector(viewWillAppear:), (IMP)&_logos_method$_ungrouped$UIViewController$viewWillAppear$, (IMP*)&_logos_orig$_ungrouped$UIViewController$viewWillAppear$);Class _logos_class$_ungrouped$MMTipsViewController = objc_getClass("MMTipsViewController"); { char _typeEncoding[1024]; unsigned int i = 0; memcpy(_typeEncoding + i, @encode(NSString *), strlen(@encode(NSString *))); i += strlen(@encode(NSString *)); _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$MMTipsViewController, @selector(text), (IMP)&_logos_method$_ungrouped$MMTipsViewController$text, _typeEncoding); }Class _logos_class$_ungrouped$WCTimelineMgr = objc_getClass("WCTimelineMgr"); MSHookMessageEx(_logos_class$_ungrouped$WCTimelineMgr, @selector(modifyDataItem:notify:), (IMP)&_logos_method$_ungrouped$WCTimelineMgr$modifyDataItem$notify$, (IMP*)&_logos_orig$_ungrouped$WCTimelineMgr$modifyDataItem$notify$);Class _logos_class$_ungrouped$CGroupMgr = objc_getClass("CGroupMgr"); MSHookMessageEx(_logos_class$_ungrouped$CGroupMgr, @selector(addChatMemberNeedVerifyMsg:ContactList:), (IMP)&_logos_method$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$, (IMP*)&_logos_orig$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$);MSHookMessageEx(_logos_class$_ungrouped$CGroupMgr, @selector(addCreateMsg:ContactList:), (IMP)&_logos_method$_ungrouped$CGroupMgr$addCreateMsg$ContactList$, (IMP*)&_logos_orig$_ungrouped$CGroupMgr$addCreateMsg$ContactList$);Class _logos_class$_ungrouped$WCOperateFloatView = objc_getClass("WCOperateFloatView"); { char _typeEncoding[1024]; unsigned int i = 0; memcpy(_typeEncoding + i, @encode(UIButton *), strlen(@encode(UIButton *))); i += strlen(@encode(UIButton *)); _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$WCOperateFloatView, @selector(m_shareBtn), (IMP)&_logos_method$_ungrouped$WCOperateFloatView$m_shareBtn, _typeEncoding); }{ char _typeEncoding[1024]; unsigned int i = 0; memcpy(_typeEncoding + i, @encode(UIImageView *), strlen(@encode(UIImageView *))); i += strlen(@encode(UIImageView *)); _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$WCOperateFloatView, @selector(m_lineView2), (IMP)&_logos_method$_ungrouped$WCOperateFloatView$m_lineView2, _typeEncoding); }MSHookMessageEx(_logos_class$_ungrouped$WCOperateFloatView, @selector(showWithItemData:tipPoint:), (IMP)&_logos_method$_ungrouped$WCOperateFloatView$showWithItemData$tipPoint$, (IMP*)&_logos_orig$_ungrouped$WCOperateFloatView$showWithItemData$tipPoint$);{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'v'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$WCOperateFloatView, @selector(forwordTimeLine:), (IMP)&_logos_method$_ungrouped$WCOperateFloatView$forwordTimeLine$, _typeEncoding); }} } +#line 487 "/Users/zhudekun/mycode/github/DKWechatHelper/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm" diff --git a/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm b/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm index 8a10dc1..af090bd 100644 --- a/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm +++ b/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm @@ -426,15 +426,61 @@ } %end -%hook CContact -- (BOOL)isEqual:(CContact *)other -{ - return [other.m_nsUsrName isEqual: self.m_nsUsrName]; -} -%end +%hook WCOperateFloatView +%new +-(UIButton *)m_shareBtn{ + static char m_shareBtnKey; + UIButton * btn = objc_getAssociatedObject(self, &m_shareBtnKey); + if (!btn) { + btn = [UIButton buttonWithType:UIButtonTypeCustom]; + [btn setTitle:@" 转发" forState:UIControlStateNormal]; + [btn addTarget:self action:@selector(forwordTimeLine:) forControlEvents:UIControlEventTouchUpInside]; + [btn setTitleColor:self.m_likeBtn.currentTitleColor forState:0]; + btn.titleLabel.font = self.m_likeBtn.titleLabel.font; + [self.m_likeBtn.superview addSubview:btn]; + NSString *base64Str = @"iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABf0lEQVQ4T62UvyuFYRTHP9/JJimjMpgYTBIDd5XEIIlB9x+Q5U5+xEIZLDabUoQsNtS9G5MyXImk3EHK/3B09Ly31/X+cG9Onek5z+c5z/l+n0f8c+ivPDMrAAVJG1l7mgWWgc0saCvAKnCWBm0F2A+cpEGbBkqSmfWlQXOBZjbgYgCDwIIDXZQ0aCrQzOaAZWAIuAEugaqk00jlJOgvYChaA6aAFeBY0nuaVRqhP4CxxQ9gVZJ3lhs/oAnt1ySN51JiBWa2FMYzW+/QzNwK3cCkpM+/As1sAjgAZiRVIsWKwHZ4Wo9NwFz5W2Ba0oXvi4Cu4L2kUrBEOzAMjIXsAjw7YrbpBZ6BeUlHURNu0h7gFXC/vQRlveM34AF4AipAG1AOxu4Me0qS9uM3cqB7bRS4A3y4556SvOt6hN8mAnrtoaTdxvE40H+QEcBP2pFUS5phBASu3eiS1pPqIuCWpKssMWLAPUl+k8T4fuiSfFaZEYBFSYtZhbmfQ95Bjetfmweww0YOfToAAAAASUVORK5CYII="; + NSData *imageData = [[NSData alloc] initWithBase64EncodedString:base64Str options:NSDataBase64DecodingIgnoreUnknownCharacters]; + UIImage *image = [UIImage imageWithData:imageData ]; + [btn setImage:image forState:0]; + [btn setTintColor:self.m_likeBtn.tintColor]; + objc_setAssociatedObject(self, &m_shareBtnKey, btn, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return btn; +} +%new +-(UIImageView *)m_lineView2{ + static char m_lineView2Key; + UIImageView * imageView = objc_getAssociatedObject(self, &m_lineView2Key); + if (!imageView) { + imageView = [[UIImageView alloc] initWithImage:MSHookIvar(self, "m_lineView").image]; + [self.m_likeBtn.superview addSubview: imageView]; + objc_setAssociatedObject(self, &m_lineView2Key, imageView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return imageView; +} +- (void)showWithItemData:(id)arg1 tipPoint:(struct CGPoint)arg2{ + %orig(arg1,arg2); + if (DKHelperConfig.timeLineForwardEnable){ + self.frame = CGRectOffset(CGRectInset(self.frame, self.frame.size.width / -4, 0),self.frame.size.width / -4,0); + self.m_shareBtn.frame = CGRectOffset(self.m_likeBtn.frame, self.m_likeBtn.frame.size.width * 2, 0); + self.m_lineView2.frame = CGRectOffset(MSHookIvar(self, "m_lineView").frame, [self buttonWidth:self.m_likeBtn], 0); + } +} +%new +- (void)forwordTimeLine:(id)arg1{ + WCForwardViewController *forwardVC = [[objc_getClass("WCForwardViewController") alloc] initWithDataItem:self.m_item]; + [self.navigationController pushViewController:forwardVC animated:true]; +} + +%end +//%hook ScanQRCodeResultsMgr +//- (void)retryRequetScanResult:(id)arg1 viewController:(id)arg2{ +// %orig; +//} +//%end diff --git a/dkhelper/dkhelperDylib/MyUtils/DKHelperConfig.h b/dkhelper/dkhelperDylib/MyUtils/DKHelperConfig.h index dd6ecd0..b92773d 100644 --- a/dkhelper/dkhelperDylib/MyUtils/DKHelperConfig.h +++ b/dkhelper/dkhelperDylib/MyUtils/DKHelperConfig.h @@ -77,6 +77,9 @@ NS_ASSUME_NONNULL_BEGIN /// 启用callkit +(BOOL)callKitEnable; +(void)setCallKitEnable:(BOOL)value; +/// 启用朋友圈转发 ++(BOOL)timeLineForwardEnable; ++(void)setTimeLineForwardEnable:(BOOL)value; /// 启用积攒助手 +(BOOL)likeCommentEnable; diff --git a/dkhelper/dkhelperDylib/wechatHeaders/WCUIAlertView.h b/dkhelper/dkhelperDylib/wechatHeaders/WCUIAlertView.h index 78b2e0d..14f7b3e 100644 --- a/dkhelper/dkhelperDylib/wechatHeaders/WCUIAlertView.h +++ b/dkhelper/dkhelperDylib/wechatHeaders/WCUIAlertView.h @@ -47,3 +47,19 @@ @end +@interface WCUIActionSheet : UIWindow + +- (void)addDestructiveButtonTitle:(id)arg1 target:(id)arg2 sel:(SEL)arg3; +- (void)addCancelBtnTitle:(id)arg1 target:(id)arg2 sel:(SEL)arg3; +- (void)addBtnTitle:(id)arg1 target:(id)arg2 sel:(SEL)arg3; +- (id)initWithTitle:(id)arg1; +- (id)init; +- (void)showInView:(id)arg1; + +@end + +//WCUIActionSheet *actionSheet = [[objc_getClass("WCUIActionSheet") alloc] initWithTitle:@"朋友圈转发"]; +//for (NSString* str in @[@"转发给好友",@"转发到朋友圈"]){ +// [actionSheet addBtnTitle:str target:self sel:@selector(startForword:)]; +//} +//[actionSheet showInView:self]; diff --git a/dkhelper/dkhelperDylib/wechatHeaders/WechatHeaders.h b/dkhelper/dkhelperDylib/wechatHeaders/WechatHeaders.h index e3cc896..334c44a 100644 --- a/dkhelper/dkhelperDylib/wechatHeaders/WechatHeaders.h +++ b/dkhelper/dkhelperDylib/wechatHeaders/WechatHeaders.h @@ -321,6 +321,13 @@ @end + +@interface WCContentItem : NSObject +@property(retain, nonatomic) NSString *linkUrl; +@property(nonatomic) int type; +@property(retain, nonatomic) NSMutableArray *mediaList; +@end + /// 朋友圈数据 @interface WCDataItem : NSObject @property (retain, nonatomic) NSMutableArray * likeUsers; @@ -329,9 +336,18 @@ @property (retain, nonatomic) NSMutableArray * commentUsers; @property (nonatomic) int commentCount; @property(nonatomic,assign) BOOL likeFlag; -@property(nonatomic) unsigned int createtime; +@property(nonatomic) unsigned int createtime; +@property(retain, nonatomic) NSString *contentDesc; +@property(retain, nonatomic) WCContentItem *contentObj; @end +@interface WCNewCommitViewController : MMUIViewController +- (id)initWithSightDraft:(id)arg1; +@end +@interface WCForwardViewController : WCNewCommitViewController +- (id)initWithDataItem:(id)arg1 sessionID:(id)arg2; +- (id)initWithDataItem:(id)arg1; +@end @interface SettingUtil : NSObject @@ -457,6 +473,29 @@ - (void)setLabelText:(id)arg1; - (void)ShowTipView:(id)arg1 Title:(id)arg2 Delay:(double)arg3; +@end + +@interface WCOperateFloatView : UIView{ + UIImageView *m_lineView; +} + +@property(nonatomic) __weak UINavigationController *navigationController; +@property(readonly, nonatomic) UIButton *m_commentBtn; +@property(readonly, nonatomic) UIButton *m_likeBtn; +@property(nonatomic,strong) UIButton *m_shareBtn; +@property(nonatomic,strong)UIImageView *m_lineView2; +@property(readonly, nonatomic) WCDataItem *m_item; +- (void)onLikeItem:(id)arg1; +- (void)hide; +- (void)animationDidStopHide; +- (void)animationDidStop; +- (void)showWithItemData:(id)arg1 tipPoint:(struct CGPoint)arg2; +- (id)init; +- (double)protectWidth:(double)arg1; +- (double)buttonWidth:(id)arg1; +/// 朋友圈转发 +- (void)forwordTimeLine:(id)arg1; + @end #endif /* WechatHeaders_h */