前言:本文主要讲述使用hook方式实现红包插件,涉及到tweak相关知识,如果你不想了解具体实现细节可直接到我的Github地址参考安装(包含越狱和非越狱两种方法)

  转眼间2017即将过去,又到了领红包拿到手软的时候。年会上少不了几百上千的红包,真是稍不留神就错过几个亿额... 你是否还是一直死死盯着屏幕,等待着随时来临的红包雨?有没有想过放下手机随便玩耍自动领红包?

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

抢红包效果预览:

功能特性

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

实现方式

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

本文主要讲述方式1的实现方法,相对方式2稍微复杂一点,但是被微信检测出的风险更小一点。

首先来看看源文件目录



这个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];

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

iOS微信自动抢红包插件(支持后台和锁屏下抢红包)的更多相关文章

  1. 一步一步实现iOS微信自动抢红包

    微信红包 前言:最近笔者在研究iOS逆向工程,顺便拿微信来练手,在非越狱手机上实现了微信自动抢红包的功能.   此教程所需要的工具/文件 yololib class-dump dumpdecrypte ...

  2. iOS音频的后台播放 锁屏

    初始化AudioSession和基本配置 音频播放器采用的AVPlayer ,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打断等等, ...

  3. iOS 微信消息拦截插件系列教程-(总目录)

    微信iOS消息拦截插件教程 标签: 越狱开发 背景介绍 本教程所有内容免费 本教程来源于一次知识分享,如果有需要了解更多的 请联系QQ:480071411 iOS逆向高级开发群:375024882 1 ...

  4. iOS 微信消息拦截插件系列教程-附录(服务端成果展示)

    微信iOS消息拦截插件教程 标签: 越狱开发 背景介绍 本教程所有内容免费 本教程来源于一次知识分享,如果有需要了解更多的 请联系QQ:480071411 iOS逆向高级开发群:375024882 服 ...

  5. ios微信自动播放音乐

    <!DOCTYPE html> <html> <head lang="en">     <meta charset="UTF-8 ...

  6. iOS开发——使用技术OC篇&简单九宫格锁屏功能的实现与封装

    简单九宫格锁屏功能的实现与封装 首先来看看最后的实现界面. 在这开始看下面的内容之前希望你能先大概思考活着回顾一下如果 你会怎么做,只要知道大概的思路就可以. 由于iphone5指纹解锁的实现是的这个 ...

  7. iOS微信运动 刷分

    修改 iOS微信运动的数据  很简单,这里记录下实现步骤. 首先要安装Theos,具体安装步骤就不说了.网上很多. 大体安装步骤: sudo brew install dpkg sudo brew i ...

  8. IOS AudioServicesPlaySystemSound 后台锁屏播放

    AudioServicesPlaySystemSound 想在锁屏后台播放报警提示音. 添加了UIBackgroundModes,audio,官方审核不通过! IOS的闹钟是怎么实现的,锁屏不能播放声 ...

  9. 不会吧,这也行?iOS后台锁屏监听摇一摇

    目录 背景介绍 探索过程 其他 APP 有没有类似功能 系统提供的摇一摇回调能否满足 其他方法能否实现 利用 CoreMotion 框架,监听加速计原始数据 通过加速计监听摇一摇 控制器相关逻辑和代码 ...

随机推荐

  1. FPGA设计思想与技巧(转载)

    题记:这个笔记不是特权同学自己整理的,特权同学只是对这个笔记做了一下完善,也忘了是从那DOWNLOAD来的,首先对整理者表示感谢.这些知识点确实都很实用,这些设计思想或者也可以说是经验吧,是很值得每一 ...

  2. Python的range函数详细用法

    1. >>> range(1,5)  #代表从1到5(不包含5) [1, 2, 3, 4]>>> 2. >>> range(1,5,2) #代表从 ...

  3. java inputstream to string stack overflow

    https://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string 过千赞的答案

  4. spring的注解使用

    1.注解测试在xml里面配置<context:component-scan base-package="cn.ql"></component-scan>co ...

  5. (五):C++分布式实时应用框架——微服务架构的演进

    C++分布式实时应用框架--微服务架构的演进 上一篇:(四):C++分布式实时应用框架--状态中心模块 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法律 ...

  6. JavaScript 浏览器类型及版本号

    项目中偶尔用到判断浏览器类型及相关版本问题,现记录相关代码: function getBrowserVertion(userAgent) { var browserName, browserVersi ...

  7. 简单MVC理解与实现

    MVC基本概念 MVC大家不陌生,包含模型(Model).视图(View).控制器(Controller),其中模型用于基本业务逻辑的实现,视图用于响应结果的表示,控制器用于模型控制和请求分派.先放上 ...

  8. Java第一章----Java概述+环境搭建

    写在前面的话: Java基础的东西看过好几遍,但是过一段都就忘记了,所以这次我决定花费一些时间整理一个系列博客供以后方便查阅.此系列根据Java编程思想+Java核心技术两本书整理而来,这两本书也是我 ...

  9. Java学习笔记8---类的静态成员变量与静态成员方法的访问与调用方式

    (注:静态变量修改为静态成员变量,静态方法改为静态成员方法) 静态成员变量又称类变量,静态成员方法又称类方法,它们统称为静态成员或类成员.静态成员由static修饰,是属于整个类的,所有的对象共享这些 ...

  10. 【状压DP】poj3254 Corn Fields

    题意: 一块n*m的田,1表示这个地方可以种植,0代表这个地方不能种植.植物种植还必须满足两株植物不能相邻(横竖都不行).问共有几种种植方法,而且当什么都不种时认为是一种方法. 解题思路: 种植用1表 ...