微信自动抢红包android实现
AccessibilityService-微信自动抢红包
在领导发红包的时候,看到有些同事在1s、2s抢到红包,为什么他们能够这么快?一定是“开挂”的想法立马浮现出来。
做一个程序猿,为什么不自己写一个呢?
借助Android的辅助功能的AccessibilityService服务就能够做到。
- 检测当前界面是否有红包(未拆开的红包)
- 让手机自动点击发现的红包(未拆开的红包)
- 检测拆红包弹出窗口上那个“开”的按钮,并让手机自动点击
- 进入红包详情界面,检测到返回按钮,自动点击返回到聊天界面,继续抢红包
- <?xml version="1.0" encoding="utf-8"?>
- <accessibility-service
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:description="@string/app_name"
- android:accessibilityEventTypes="typeWindowStateChanged|typeWindowContentChanged"
- android:accessibilityFeedbackType="feedbackGeneric"
- android:accessibilityFlags="flagDefault"
- android:canRetrieveWindowContent="true"
- android:notificationTimeout="10"
- android:packageNames="com.tencent.mm"
- />
| android:accessibilityEventTypes | 辅助服务关注的事件类型 当前配置:typeWindowStateChanged|typeWindowContentChanged(对应等下需要使用到的事件) |
| android:accessibilityFeedbackType | 事件的反馈给用户的方式 当前配置:feedbackGeneric(通用) |
| android:accessibilityFlags | 辅助服务额外的flag信息 当前配置:flagDefault(默认) |
| android:canRetrieveWindowContent | 是否可以获取窗口内容 当前配置:true |
| android:notificationTimeout | 两个同样类型的辅助事件发给辅助服务的最小时间间隔 当前配置:10 |
| android:packageNames | 辅助服务监听的应用包名,可监听多个应用包名,使用逗号隔开。 当前配置:com.tencent.mm(监听微信发出的事件) |
二、在AndroidManifest.xml中注册AccessibilityService服务
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
- <service
- android:name=".LooterService"
- android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
- <intent-filter>
- <action android:name="android.accessibilityservice.AccessibilityService" />
- </intent-filter>
- <meta-data
- android:name="android.accessibilityservice"
- android:resource="@xml/accessible_service_config" />
- </service>
- AccessibilityService需要权限android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
- 添加intent-filter下的action android:name="android.accessibilityservice.AccessibilityService"
//如果当前的事件类型是窗口内容出现了变化,那么判断是否有红包视图出现
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED){
List<AccessibilityNodeInfo> hongbaoList = mRootNodeInfo.findAccessibilityNodeInfosByText("微信红包");
List<AccessibilityNodeInfo> weikaiList = mRootNodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/aeb");
Log.e("looter","发现红包检测数量 : " + hongbaoList.size());
for (int i = 0; i < weikaiList.size(); i++) {
if (weikaiList.get(i).getText().equals("领取红包")){
AccessibilityNodeInfo curNodeInfo = weikaiList.get(i);
curNodeInfo.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
}
通过findAccessibilityNodeInfosByText("微信红包")获取红包数量list;
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED){
List<AccessibilityNodeInfo> clickedWindowList = mRootNodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/c2i");
if (clickedWindowList.size() > 0){
AccessibilityNodeInfo curNodeInfo1 = clickedWindowList.get(0);
curNodeInfo1.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
通过findAccessibilityNodeInfosByViewId("com.tencent.mm:id/c2i"),根据特定id获取到“開”控件的节点list。
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED){
List<AccessibilityNodeInfo> backlist = mRootNodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/ho");
if (backlist.size() > 0){
AccessibilityNodeInfo curNodeInfo1 = backlist.get(0);
curNodeInfo1.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
再说下怎么获取到对应微信版本的控件id
public class LooterService extends AccessibilityService {
//该对象代表了整个窗口视图的快照
private AccessibilityNodeInfo mRootNodeInfo = null;
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
mRootNodeInfo = event.getSource();
if (mRootNodeInfo == null){
return;
}
//如果当前的事件类型是窗口内容出现了变化,那么判断是否有红包视图出现
try {
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED){
List<AccessibilityNodeInfo> hongbaoList = mRootNodeInfo.findAccessibilityNodeInfosByText("微信红包");
List<AccessibilityNodeInfo> weikaiList = mRootNodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/aeb");
Log.e("looter","发现红包检测数量 : " + hongbaoList.size());
for (int i = 0; i < weikaiList.size(); i++) {
Log.e("looter"," --- weikaiList.get(i).getText() --- " + weikaiList.get(i).getText() );
if (weikaiList.get(i).getText().equals("领取红包")){
AccessibilityNodeInfo curNodeInfo = weikaiList.get(i);
curNodeInfo.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
}
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED){
List<AccessibilityNodeInfo> clickedWindowList = mRootNodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/c2i");
if (clickedWindowList.size() > 0){
AccessibilityNodeInfo curNodeInfo1 = clickedWindowList.get(0);
curNodeInfo1.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED){
List<AccessibilityNodeInfo> backlist = mRootNodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/ho");
if (backlist.size() > 0){
AccessibilityNodeInfo curNodeInfo1 = backlist.get(0);
curNodeInfo1.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
@Override
public void onInterrupt() {
}
}
http://download.csdn.net/download/u014506842/10194630
微信自动抢红包android实现的更多相关文章
- 一步一步实现iOS微信自动抢红包
微信红包 前言:最近笔者在研究iOS逆向工程,顺便拿微信来练手,在非越狱手机上实现了微信自动抢红包的功能. 此教程所需要的工具/文件 yololib class-dump dumpdecrypte ...
- iOS微信自动抢红包插件(支持后台和锁屏下抢红包)
前言:本文主要讲述使用hook方式实现红包插件,涉及到tweak相关知识,如果你不想了解具体实现细节可直接到我的Github地址参考安装(包含越狱和非越狱两种方法) 转眼间2017即将过去,又到了 ...
- Android开发——Accessibility机制实现模拟点击(微信自动抢红包实现)
1. 何为Accessibility机制 许多Android使用者因为各种情况导致他们要以不同的方式与手机交互.对于那些由于视力.听力或其它身体原因导致不能方便使用Android智能手机的用户,And ...
- 程序员过年必备 -- Auto.js微信自动抢红包
打开微信就不用管了: - 自动打开未读消息 - 自动滑动屏幕检测红包 - 自动跳过无效红包 基于Auto JS,apk版本4.01: - 大多数动作均基于控件 - 极个别点击基于动态抓取的坐标 - 这 ...
- Python自动抢红包,超详细教程,再也不会错过微信红包了!
目录: 0 引言 1 环境 2 需求分析 3 前置准备 4 抢红包流程回顾 5 代码梳理 6 后记 0 引言 提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一 ...
- android黑科技系列——防自动抢红包外挂原理解析
一.前言 春节过年发个红包本来就是为了讨个喜庆,朋友亲戚之间的关系交流,但是现在随着技术变革,抢红包插件越来越多,导致现在不太愿意发红包了,特别是在一个多人群里,潜水的非常多,但是丢个红包瞬间就没了, ...
- 好推二维码如何通过应用宝微下载支持微信自动打开APP下载?
好推二维码 官网 http://www.hotapp.cn 1. 为什么使用应用宝微下载? APP下载二维码,通过微信扫描下载的时候,微信目前只支持应用宝微下载,才能在微信里直接打开下载,否则就需要在 ...
- Android开发——自动生成Android屏幕适配的dimens.xml文件
使用dimens.xml解决屏幕适配问题是Android官方解决方案,本文主要讲述了如何自动生成Android屏幕适配的dimens.xml,减少了工作量,在维护dimens.xml文件时更加省时省力 ...
- 微信5.0 Android版飞机大战破解无敌模式手记
微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...
随机推荐
- redis 的优化
1.pipeling “请求-响应”模式的服务器在处理完一个请求后就开始处理下一个请求,不管客户端是否读取到前一个请求的响应结果.这让客户端不需要发一个请求等一个响应的串行,可以一次发送多个请求,再最 ...
- 深度学习方法:受限玻尔兹曼机RBM(二)网络模型
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 上解上一篇RBM(一)基本概念, ...
- [BZOJ4456] [Zjoi2016]旅行者 分治+最短路
4456: [Zjoi2016]旅行者 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 777 Solved: 439[Submit][Status] ...
- AC日记——色板游戏 洛谷 P1558
色板游戏 思路: sb题: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 struct Tre ...
- vue-vuex安装
npm install vuex --save 然后在package.json文件的 dependencies中就看到有了一个vuex的文件 解释一下 dependencies生产环境它的意思就是上线 ...
- react native 增加react-native-storage
现时需要使用react-native-storage本地存储 第一步:配置storage主文件 mystorage.js import { AsyncStorage } from 'react-nat ...
- Codeforces 1131 F. Asya And Kittens-双向链表(模拟或者STL list)+并查集(或者STL list的splice()函数)-对不起,我太菜了。。。 (Codeforces Round #541 (Div. 2))
F. Asya And Kittens time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 51nod 1201 (dp)
整数划分 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2,4} {1,2,3},共4种.由于数据较大,输出Mod 10^9 + 7的结果即可. In ...
- 31、Flask实战第31天:cms后台修改密码
cms后台修改密码界面布局 先创建cms_resetpwd.html页面,继承cms_base.html {% extends 'cms/cms_base.html' %} {% block titl ...
- 【SPOJ Query on a tree 】 (树链剖分)
http://acm.hust.edu.cn/vjudge/problem/13013 题意: 有一棵N个节点的树(1<=N<=10000),N-1条边,边的编号为1~N-1,每条边有一个 ...