博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios-微信自动抢红包插件
阅读量:6279 次
发布时间:2019-06-22

本文共 2363 字,大约阅读时间需要 7 分钟。

hot3.png

之前分享过如何,

这次分享下用theos开发一个微信自动抢红包的插件

微信相关类参考来自 ,大家也可以自己结合静态动态分析来找到微信关于红包的几个类

---------------------------------------又是凌乱分割线----------------------------------------

大概思路:在微信聊天界面中BaseMsgContentViewController,发现有红包出现WCPayC2CMessageNodeView,自动模拟点击事件onClick,弹出红包详情页WCRedEnvelopesReceiveHomeView,自动获取红包OnOpenRedEnvelopes

问题来了:

问题1:怎么知道红包什么时候出现呢?

答:通过勾取(- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath) 方法,当红包出现的时候会通过reloadData刷出红包,ios开发都懂的,这是必走的过程。通过获取cell中contentView的subViews找到WCPayC2CMessageNodeView就是说明有红包的出现

问题2:如何过滤掉已经抢过的红包

答:其实最好的办法就是能记录下打开过的红包id,但是从上面几个类的分析中没有分析出红包id的位置,大家可以看看这个红包详情页WCRedEnvelopesReceiveHomeView的data类型,红包id肯定在data里面,只是什么结构需要继续分析下

-(id)initWithFrame:(CGRect)frame andData:(id)data delegate:(id)delegate;-(void)refreshViewWithData:(id)data;

我目前的做法是比较low,就是只查看最后一个cell的类型,如果是红包就打开,打开后会有打开提示语放到tableView的最后,所以不会重复打个一个cell

问题3:为什么要一直打开聊天界面才能自动抢红包,在首页不行吗?可能多个群在一起抢红包呢?

答:当然可以在首页做到直接抢红包了,只是需要分析底层消息体获取解析的代码,难度可能比界面分析要难很多。

当然,大神年年有,今年特别多,看这个  

------------------------------------------凌乱的分割线---------------------------------------------

我自问自答也是够了,上代码让大家看看吧

%hook BaseMsgContentViewController%new- (id)someValue {	return objc_getAssociatedObject(self, @selector(someValue));} %new- (void)setSomeValue:(id)value {	objc_setAssociatedObject(self, @selector(someValue), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}%end%hook BaseMsgContentViewController- (id)tableView:(id)arg1 cellForRowAtIndexPath:(id)arg2{	UITableViewCell *cell = %orig(arg1,arg2);	NSIndexPath *indexpath = arg2; 	NSString *value = [self performSelector:@selector(someValue)];  	if(indexpath.row + 1 == [value integerValue])  	{  		for (id subView in cell.contentView.subviews)  		{  			if([NSStringFromClass([subView class]) isEqualToString:@"WCPayC2CMessageNodeView"])    		{    		   			[subView performSelector:@selector(onClick)];   			}  		} 	}	return cell;}- (long long)tableView:(id)arg1 numberOfRowsInSection:(long long)arg2{	long long result = %orig(arg1,arg2);	[self performSelector:@selector(setSomeValue:) withObject:[NSString stringWithFormat:@"%zd",result]];	return result;}%end%hook WCRedEnvelopesReceiveHomeView- (void)refreshViewWithData:(id)arg1 {	%orig;	[self performSelector:@selector(OnOpenRedEnvelopes)];	[self performSelector:@selector(OnCancelButtonDone)];}%end

转载于:https://my.oschina.net/iq19900204/blog/644965

你可能感兴趣的文章
MyBatis-Plus | 最简单的查询操作教程(Lambda)
查看>>
rpmfusion 的国内大学 NEU 源配置
查看>>
spring jpa 配置详解
查看>>
IOE,为什么去IOE?
查看>>
java 用反射简单应用,将Object简单转换成map
查看>>
Storm中的Worker
查看>>
dangdang.ddframe.job中页面修改表达式后进行检查
查看>>
Web基础架构:负载均衡和LVS
查看>>
Linux下c/c++相对路径动态库的生成与使用
查看>>
SHELL实现跳板机,只允许用户执行少量允许的命令
查看>>
SpringBoot 整合Redis
查看>>
2014上半年大片早知道
查看>>
Android 6.0指纹识别App开发案例
查看>>
正文提取算法
查看>>
轻松学PHP
查看>>
Linux中的网络监控命令
查看>>
this的用法
查看>>
windows下安装redis
查看>>
CentOS7 yum 安装git
查看>>
启动日志中频繁出现以下信息
查看>>