iOS自动抢红包插件(支持后台和锁屏下抢红包)

前言:如果你不想了解具体实现细节可直接到我的Github地址参考安装(包含越狱和非越狱两种方法)

    本文所讲述的红包插件不同于市面上存在的一些红包助手,原理是检测到红包消息到达后,直接模拟用户点击红包去领取。这种方式相对来说更加安全,更不易被微信系统检测出存在作弊行为。而且支持微信于后台运行以及iPhone锁屏状态下自动抢红包,真正做到无忧无虑领红包。

抢红包效果预览:

手机锁屏情况演示

微信在前台情况演示

功能特性

  • 支持微信在后台和锁屏状态下自动抢红包
  • 支持自定义延迟抢红包
  • 完全模拟用户点击红包,可有效防止微信发现作弊封号
  • 兼容最新版本微信,跟随微信更新及时更新迭代
  • 支持修改微信运动步数

实现方式

  1. hook红包消息,检测有新的红包到达后,用代码模拟用户点击领取红包
  2. hook红包消息,当有新的红包时,调用微信的红包组件领取红包

本文主要讲述方式1的实现方法,相对方式2稍微复杂一点,但是被微信检测出的风险更小一点。
#首先来看看源文件目录
src目录

这个Tweak.xm就是我们今天的重头戏啦

源码分析

首先要拦截红包消息,红包消息的m_uiMessageType为49,检测到红包消息后先做一个标记

- (void)MainThreadNotifyToExt:(NSDictionary *)ext{
	%orig;
	if([LLRedEnvelopesMgr shared].isOpenRedEnvelopesHelper){
		CMessageWrap *msgWrap = ext[@"3"];
	    if (msgWrap && msgWrap.m_uiMessageType == 49){
	        //红包消息
	        [LLRedEnvelopesMgr shared].haveNewRedEnvelopes = YES;
	    }
	}
}

当有消息到达后,微信会自动调用列表页面的reloadSession方法,我们在这个方法里判断是否是红包消息造成的reloadSession调用。如果是,直接回调打开红包的block

%hook NewMainFrameViewController

- (void)viewDidLoad{
	%orig;
	[LLRedEnvelopesMgr shared].openRedEnvelopesBlock = ^{
		if([LLRedEnvelopesMgr shared].isOpenRedEnvelopesHelper && [LLRedEnvelopesMgr shared].haveNewRedEnvelopes){
			[LLRedEnvelopesMgr shared].haveNewRedEnvelopes = NO;
			[LLRedEnvelopesMgr shared].isHongBaoPush = YES;
			[[LLRedEnvelopesMgr shared] openRedEnvelopes:self];
		}
	};
}

- (void)reloadSessions{
	%orig;
	if([LLRedEnvelopesMgr shared].isOpenRedEnvelopesHelper && [LLRedEnvelopesMgr shared].openRedEnvelopesBlock){
		[LLRedEnvelopesMgr shared].openRedEnvelopesBlock();
	}
}

%end

在block内部模拟用户点击到聊天界面,这里先做了一个检测,判断当前导航控制器是否已经push了聊天的控制器,如果有直接拿来用。

- (void)openRedEnvelopes:(NewMainFrameViewController *)mainVC{
    NSArray *controllers = mainVC.navigationController.viewControllers;
    UIViewController *msgContentVC = nil;
    for (UIViewController *aController in controllers) {
        if ([aController isMemberOfClass:NSClassFromString(@"BaseMsgContentViewController")]) {
            msgContentVC = aController;
            break;
        }
    }
    if (msgContentVC) {
        [mainVC.navigationController PushViewController:msgContentVC animated:YES];
    } else {
        [mainVC tableView:[mainVC valueForKey:@"m_tableView"] didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];
    }
}

hook导航控制器的PushViewController方法, 先找到红包Cell上面的WCPayC2CMessageCellView后直接调用tapAppNodeView方法触发红包点击事件(tapAppNodeView方法就是用户点击红包的处理方法)

[baseMsgVC tapAppNodeView:payC2CView];

最后再hook红包WCRedEnvelopesReceiveHomeView(就是用户点击红包弹出的View)的初始化方法,调用OnOpenRedEnvelopes方法领取红包

[view OnOpenRedEnvelopes];

大功告成,坐等红包雨,打开微信锁上屏幕即可抢红包,岂不是爽歪歪:smile:

项目完整代码,已托管到Github。如果喜欢,欢迎Star

预告

最近几天会出一个钉钉远程打卡助手的文章,支持Wi-Fi和定位两种模式哦,欢迎关注
打卡助手

4 个赞

WechatIMG161.jpeg

iphone6s
ios 11.2.1 系统
见截图上面一条显示不出来

github上源码和最新ipa包已经修复了这个问题
增加了一段代码

    if (@available(iOS 11, *)) {         
        [tableInfo getTableView].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAlways;             
    }

具体请参考LLSettingController

1 个赞

期待钉钉■■的文章

支持分享干货,分享干货的都是牛人:stuck_out_tongue_closed_eyes:

好帖子!要点赞

安装的时候出现了
Error:
./plist.hpp:201
not PLIST_STRING

CFBundleIdentifier
com.kevll.wechat

[Status]
这是什么原因呢? 是因为我手机上原来有wechat的嘛? 我写在了也还是不能安装…
我看的是github上非越狱的安装步骤

iOS10.3.2 上只能在聊天界面上抢到红包, 后台 锁屏 均无效… iPhone 6Plus

下载的越狱版的微信然后注入然后打包重签名安装上之后打开就闪退是什么问题一直卡在这个坑里边

你是不是 打开了 群免打扰

报这个错误貌似也是可以装成功的

用Xcode的Devices查看一下手机的崩溃日志

请试一下我最新打包签名的ipa,做了一些优化体验更好,我的Github上有百度网盘下载链接

楼主, 问下用Xcode的Devices查看一下手机的崩溃日志, 怎么符号化呀, 要不都是地址怎么看?

看崩溃日志里面的堆栈信息 看主线程的就行了。常见的要么是dylib的镜像找不到,要么是方法未找到,或者是数组字典插入nil值导致的崩溃。可以看看有没有image not found,或者doseNotRecognize类似的关键字

请问安装上去了Hook没生效会是哪里造成的

用你钉钉的Tweak安装后被检测到了

666,可以可以,厉害厉害

nice啊,这下总算可以不用帮我妈过年的时候抢红包了_(:」∠)

真不错~~