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


(nzt) #1

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

本文所讲述的红包插件不同于市面上存在的一些红包助手,原理是检测到红包消息到达后,直接模拟用户点击红包去领取。这种方式相对来说更加安全,更不易被微信系统检测出存在作弊行为。而且支持微信于后台运行以及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:

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

预告

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


(寻寻觅觅) #2

怎么联系