韦德国际bv1946_www.bv1946com_韦德国际1946手机版
做最好的网站

添加一个开关控制自动抢红包

日期:2020-04-21编辑作者:韦德国际bv1946计算机

在前两篇文章中,我们详细介绍了如何反汇编、创建Tweak项目实现自动抢红包功能的思路。今天我们继续下篇,主要说两个事:添加一个开关控制自动抢红包,打包重签名安装到非越狱手机上。

添加抢红包开关

我们先来讲解怎么在设置页面添加一个开关控制自动抢红包。

效果如下图:

图片 10001.jpg

可以通过cycript附加微信进程或者Reveal工具的方式查找当前Controller的名字(不会的可以看前两篇文章),很容易可以找到设置页面Controller是:NewSettingViewController

下面要考虑,怎么在UITableView中添加一个cell呢?

在导出的头文件中可以找到NewSettingViewController同名的头文件NewSettingViewController.h,分析头文件可以看到有一个MMTableViewInfo *m_tableViewInfo;,猜测它可能含有TableView的信息。

分析MMTableViewInfo

查看MMTableViewInfo同名的头文件,里边有一个MMTableView *_tableView;成员变量,并且MMTableViewInfo实现了UITableView的UITableViewDelegate, UITableViewDataSource两个协议。所以可以肯定MMTableViewInfo负责TableView的数据源和代理事件。

仔细观察MMTableViewInfo头文件,还有两个方法

- addSection:arg1;- insertSection:arg1 At:(unsigned int)arg2;

这可能正是为TableView添加一个Section。

使用logify.pl可以查看insertSection: At:第一个参数是什么类型

%hook MMTableViewInfo- insertSection:arg1 At:(unsigned int)arg2 { NSLog(@"insertSection arg1:%@",[arg1 class]); %log; %orig;}- addSection:arg1 { NSLog(@"addSection arg1:%@",[arg1 class]); %log; %orig;}%end

经验证,以上方法的arg1类型是:MMTableViewSectionInfo,查看MMTableViewSectionInfo同名的头文件,可以看到我们想要的另外两个方法:

- addCell:arg1;- insertCell:arg1 At:(unsigned int)arg2;

相同的方式可以确定以上两个方法的arg1类型:MMTableViewCellInfo。接下来就需要查找MMTableViewCellInfo同名的头文件MMTableViewCellInfo.h怎么创建一个CellInfo。

经查找,发现三个我们用得到的方法

  switchCellForSel:arg1 target:arg2 title:arg3 on:arg4;  switchCellForSel:arg1 target:arg2 title:arg3 on:arg4 isFitIpadClassic:arg5;  switchDisableCellForSel:arg1 target:arg2 title:arg3 on:arg4;

我们选择第一个来创建。

最终在设置页添加开关的代码如下:

%hook NewSettingViewController- reloadTableData{ %orig; MMTableViewInfo *tableViewInfo = [self valueForKey:@"m_tableViewInfo"]; MMTableViewSectionInfo *sectionInfo = [%c(MMTableViewSectionInfo) sectionInfoDefaut]; MMTableViewCellInfo *cellInfo = [%c(MMTableViewCellInfo) switchCellForSel:@selector(handleRedSwitch) target:[LLRedManager sharedInstance] title:@"微信抢红包" on:[LLRedManager sharedInstance].isAutoRed]; [sectionInfo addCell:cellInfo]; [tableViewInfo insertSection:sectionInfo At:0]; MMTableView *tableView = [tableViewInfo valueForKey:@"_tableView"]; [tableView reloadData];}%end

抢红包开关单例

抢红包的开关显示出来了,我们需要一个单例可以把开关状态和抢红包关联起来,我们定义一个LLRedManager的单例,里边有两个成员变量,一个是isAutoRed开关状态,另一个用于存储抢红包的信息NSMutableArray *array;LLRedManager代码如下:

@interface LLRedManager : NSObject@property (nonatomic, strong) NSMutableArray *array;//是否自动抢红包@property (nonatomic, assign) BOOL isAutoRed; (instancetype) sharedInstance;//添加对象- addParams:(LLRedEnvelopParam *) params;//获得对象- (LLRedEnvelopParam *) getParams:(NSString *) sendId;@end@implementation LLRedManager (instancetype) sharedInstance{ static LLRedManager *_instance; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[LLRedManager alloc] init]; }); return _instance;}-(instancetype)init{ if (self = [super init]){ _array = [[NSMutableArray alloc] init]; } return self;}//添加对象- addParams:(LLRedEnvelopParam *) params{ @synchronized { [_array addObject:params]; }}//获得对象- (LLRedEnvelopParam *) getParams:(NSString *) sendId{ @synchronized { NSInteger resultIndex = -1; for (NSInteger index = 0 ; index < self.array.count ; index  ) { LLRedEnvelopParam *params = self.array[index]; if ([params.sendId isEqualToString:sendId]){ //找到了 resultIndex = index; } } if (resultIndex != -1 ){ LLRedEnvelopParam *params = self.array[resultIndex]; [self.array removeObjectAtIndex:resultIndex]; return params; } return nil; }}//控制设置开关-  handleRedSwitch{ self.isAutoRed = !self.isAutoRed;}@end

重签名装到非越狱手机上

抢红包的代码我们写好了,下面就是考虑把动态库注入到微信项目,重签名实现微信多开,安装到非越狱手机上了。

具体步骤我在iOS逆向第四篇(dylib动态库注入和重签名打包)文章中详细介绍了,不会的童鞋可以移步到那篇文章。

Github链接

我把源码传到了...

更多iOS逆向和Swift开发相关文章,请关注我的微信公众账号:乐Coding

本文由韦德国际bv1946手机版发布于韦德国际bv1946计算机,转载请注明出处:添加一个开关控制自动抢红包

关键词: 韦德娱乐平台 iOS 实战 抢红包

iOS应用之间的通信就只能通过间接的方式

出于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件(也有例外,比如系统通讯录能...

详细>>

怎么实现组件化

本片文章主要讲解我们项目中为什么要组件化 组件化的好处 怎么使用组件化怎么实现组件化 随着项目的更新迭代 项...

详细>>

可以在单例这里直接设置属性

最新!!! 有人反映使用有问题,换了一种实现方式,修改如下。 集成过高德地图的筒子们应该都清楚,创建地图内...

详细>>

通过检查比2.0更大的值来检测强烈的摇动

一、概念 加速计和陀螺仪是通过CoreMotion框架访问的。此框架提供了CMMotionManager等类,该类提供的所有数据都用来描述...

详细>>