iOS微信自動搶紅包插件(支持后台和鎖屏下搶紅包)


前言:本文主要講述使用hook方式實現紅包插件,涉及到tweak相關知識,如果你不想了解具體實現細節可直接到我的Github地址參考安裝(包含越獄和非越獄兩種方法)

  轉眼間2017即將過去,又到了領紅包拿到手軟的時候。年會上少不了幾百上千的紅包,真是稍不留神就錯過幾個億額... 你是否還是一直死死盯着屏幕,等待着隨時來臨的紅包雨?有沒有想過放下手機隨便玩耍自動領紅包?

紅包

  本文所講述的紅包插件不同於市面上存在的一些紅包助手,原理是檢測到紅包消息到達后,直接模擬用戶點擊紅包去領取。這種方式相對來說更加安全,更不易被微信系統檢測出存在作弊行為。而且支持微信於后台運行以及iPhone鎖屏狀態下自動搶紅包,真正做到無憂無慮領紅包。

搶紅包效果預覽:

手機鎖屏情況演示

微信在前台情況演示

功能特性

  • 支持微信在后台和鎖屏狀態下自動搶紅包
  • 支持自定義延遲搶紅包
  • 完全模擬用戶點擊紅包,可有效防止微信發現作弊封號
  • 兼容最新版本微信,跟隨微信更新及時更新迭代
  • 支持修改微信運動步數

實現方式

  1. hook紅包消息,檢測有新的紅包到達后,用代碼模擬用戶點擊領取紅包
  2. hook紅包消息,當有新的紅包時,調用微信的紅包組件領取紅包

本文主要講述方式1的實現方法,相對方式2稍微復雜一點,但是被微信檢測出的風險更小一點。

首先來看看源文件目錄

src目錄
這個Tweak.xm就是我們今天的重頭戲啦

項目完整代碼,已托管到Github,如果歡迎Star

源碼分析

首先要攔截紅包消息,紅包消息的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];

大功告成,坐等紅包雨,打開微信鎖上屏幕即可搶紅包,豈不是爽歪歪😄

項目完整代碼,已托管到Github。如果喜歡,歡迎Star

預告

最近幾天會出一個釘釘遠程打卡助手的文章,支持Wi-Fi和定位兩種模式哦,歡迎關注
打卡助手

想提前了解的可以自行參考釘釘打卡Github項目,歡迎Star


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM