简书文章:https://www.jianshu.com/p/e1099a94b979
附抢红包开源项目地址,代码已全改为Kotlin了,已适配到最新微信7.0.5版本,如果对你有所帮助赏个star吧:https://github.com/xbdcc/GrabRedEnvelope

前言

相信很多人见过群里总会有人抢红包速度很快,也可能有人用过抢红包外挂,那么他们是什么原理实现的呢?

  • 目前一般用得最多的就是通过AccessibilityService无障碍服务监控UI模拟点击实现,此方法不需要手机Root.
  • 另外还有一种方式可以通过Xposed直接Hook微信的代码调用。通过Hook需要手机Root或者安装Xposed虚拟环境,并且要反编译结合源码分析,找到关键Hook点。

今天就简单介绍下不需要Root的方式实现Android抢微信红包,如果你用Uiautomator或Appium写过一些Android脚本应该知道实现的过程其实很简单。注:在微信7.0.3和7.0.4版本中有效。

知识点

本篇会用到的相关知识工具,如果有不了解的Google一下你就知道:
DDMS,AccessibilityService,Kotlin语言

UI分析

  • 首先我们打开安装的SDK目录,MAC下可以在Finlder按Shift+Command+G快捷键快速进入。
    如我的SDK目录是/Users/caochang/Library/Android/sdk。进入tool文件夹打开monitor分析工具。如果是Eclipse的话可以直接打开DDMS
  • 手机连接电脑打开USB调试,可以通过adb devices命令查看是否连接上,如果连接不成功可以试试adb kill-server然后adb start-server。
  • 手机连接上后选中要看当前页面视图的进程名,如下图选中的当前测试的APP,点击圈中的图标中间就会显示当前顶层Activity视图如下:
    [外链图片转存失败(img-DSIPVoOw-1564133557878)(https://github.com/xbdcc/GrabRedEnvelope/raw/master/images/demo/monitor_main.jpg)]
  • 手机发个红包然后查看视图如下,我们可以找到id和text:
    [外链图片转存失败(img-VfY5jZ4B-1564133557885)(https://github.com/xbdcc/GrabRedEnvelope/raw/master/images/demo/monitor_wechat_chat.jpg)]
  • 同理我们点击红包,进入红包弹框,可以找到点击拆的ID如图:
    [外链图片转存失败(img-dA3Vrv1K-1564133557889)(https://github.com/xbdcc/GrabRedEnvelope/raw/master/images/demo/monitor_wechat_open_redenvelope.jpg)]

代码实现

本例子使用到了’com.github.xbdcc:Cutils:0.0.10’中的一些工具类,代码用Code Style-Kotlin格式化过。

  • 首先我们在自己写的继承AccessibilityService类实现的onAccessibilityEvent方法里面判断当前是通知还是界面还是内容改变了:
        when (event.eventType) {AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED -> {LogUtils.d("通知改变:$event")}AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED -> {LogUtils.d("界面改变:$event")openRedEnvelope(event)}AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED -> {LogUtils.d("内容改变:$event")clickRedEnvelope()}}
  • 找到相关的Activity类名和id或者text代码:
    private val WECHAT_PACKAGE = "com.tencent.mm"private val WECHAT_LUCKYMONEY_ACTIVITY ="$WECHAT_PACKAGE.plugin.luckymoney.ui.LuckyMoneyNotHookReceiveUI" //微信红包弹框private val RED_ENVELOPE_FLAG_ID = "com.tencent.mm:id/aq7" //聊天页面区分红包idprivate val RED_ENVELOPE_ID = "com.tencent.mm:id/aou" //聊天页面红包点击框控件idprivate val RED_ENVELOPE_OPEN_ID = "com.tencent.mm:id/cyf" //抢红包页面点开控件id
  • 发现红包点击红包代码:
    private fun clickRedEnvelope() {//如果没找到红包就不继续往下执行if (!AccessibilityServiceUtils.isExistElementById(RED_ENVELOPE_FLAG_ID,rootInActiveWindow)) return//点击红包AccessibilityServiceUtils.findAndClickOneById(RED_ENVELOPE_ID, rootInActiveWindow)}
  • 出现红包弹框页面拆开红包代码:
    private fun openRedEnvelope(event: AccessibilityEvent) {//如果当前页面不是微信红包弹出框则不继续往下执行if (WECHAT_LUCKYMONEY_ACTIVITY != event.className) returnAccessibilityServiceUtils.findAndClickOneById(RED_ENVELOPE_OPEN_ID, rootInActiveWindow)}

测试效果

[外链图片转存失败(img-Ssgusr50-1564133557890)(https://github.com/xbdcc/GrabRedEnvelope/raw/master/records/demo.gif)]

结语

以上就是实现微信自动抢红包的简单demo,你还可以做些优化做监听通知监听页面判断抢红包,以及延迟点击过滤口令,判断红包是否已抢等。

Demo完整代码地址

https://github.com/xbdcc/GrabRedEnvelope/tree/2.0.1/demo

Android通过辅助功能实现抢微信红包原理简单介绍相关推荐

  1. 用 Python 来全自动抢微信红包

    最近在做手机app自动化测试,想用python写个自动抢微信红包的程序,先在网上查了一下,发现抢红包教程要么是用itchat模块做到红包提醒功能,要么root手机后用Xposed框架,这两种方式都不是 ...

  2. python自动抢_Python+Appium实现自动抢微信红包

    前言 过年的时候总是少不了红包,不知从何时开始微信红包横空出世,对于网速和手速慢的人只能在一旁观望,做为python的学习者就是要运用编程解决生活和工作上的事情. 于是我用python解决我们的手速问 ...

  3. 如何写一个自动抢微信红包的程序

    春节临近,为避免错失土豪们的红包,动手写了一个自动抢微信红包的小程序,试了一下效果还不错.本程序适用于安卓4.1版本以上手机,不需要ROOT权限.现将程序的设计要点记录如下,供有兴趣的同行参考. 一. ...

  4. PHP红包搭建步骤,PHP 生成微信红包代码简单

    这篇文章主要介绍了PHP 生成微信红包代码简单的相关资料,需要的朋友可以参考下 废话不多说了,一切解释尽在代码中,具体代码如下所示: /** * @param $total [你要发的红包总额] * ...

  5. php生成红包,PHP 生成微信红包代码简单,php生成红包代码

    PHP 生成微信红包代码简单,php生成红包代码 废话不多说了,一切解释尽在代码中,具体代码如下所示: /** * @param $total [你要发的红包总额] * @param int $num ...

  6. BP神经网络原理简单介绍以及公式推导(矩阵形式和分量形式)

    BP神经网络原理简单介绍以及公式推导 标签(空格分隔): 神经网络 \def\net(#1){net^{(#1)}} \def\Y(#1){Y^{(#1)}} \def\part(#1){\parti ...

  7. Android Design Support Library 中控件的使用简单介绍(一)

    Android Design Support Library 中控件的使用简单介绍(一) 介绍 在这个 Lib 中主要包含了 8 个新的 material design 组件!最低支持 Android ...

  8. LDAP服务器的概念和原理简单介绍

    仅用于个人学习,侵删. 本文转自:LDAP服务器的概念和原理简单介绍 [http://seanlook.com/2015/01/15/openldap_introduction/] 1. 目录服务 目 ...

  9. Android 实现自动抢微信红包

    原理 我们使用的还是安卓自带的辅助功能 AccessibilityService . 先来讲述以下原理,原理很简单,当页面发生变化的时候,搜索屏幕中的关键字,搜索到了就点开.这个原理在微信旧版本的自动 ...

最新文章

  1. python csv模块 一次读多行_python中csv模块读取reader只能读取一次
  2. 这个机器人一个表情,看过的人不寒而栗
  3. CentOS7 下配置 Nginx + PHP7 + MariaDB + ThinkPHP5.1
  4. java isequal_Java LocalDate isEqual()用法及代码示例
  5. 全向轮移动机器人构型分析
  6. bim webgl 模型 轻量化_BIM模型轻量化是什么?BIM模型轻量化原理
  7. linux终端网易云播放问题,Ubuntu下完美解决网易云音乐无法启动的问题
  8. Android曲线水波纹动画,Android水波纹显示进度效果,很炫
  9. 《一代大商孟洛川》经典台词
  10. 纽约大学计算机和信息科学专业,纽约大学与罗切斯特大学计算机科学专业比较...
  11. c8051f020 I/O配置小结
  12. NTFS文件系统详解(三)NTFS元文件解析
  13. 设计模式学习--观察者模式(Observer Pattern)
  14. oracle reco进程停止,ORA-01089 数据库无法正常关闭
  15. activity destory掉后马上释放内存方法
  16. 【Matlab】Matlab图片清晰拷贝到论文中并去掉空白边距
  17. 【Java学习笔记】(二)Java平台和Java虚拟机
  18. shell编程之正则表达式与总结(grep,egrep)
  19. 【电子科学系保研】-- 南方科技大学保研之旅
  20. 数值分析李庆杨第五章习题

热门文章

  1. Java真的要没落了?
  2. php落寞了,php语言最近走势如何?php没落了吗?
  3. ubuntu14.04下wii模拟器(龙珠电光火石3)
  4. ScreenFlow 9.0.1中文汉化
  5. 魅蓝e android无限重启,魅蓝E手机怎么设置定时开关机 魅蓝E定时开关机设置图文教程...
  6. 查看文件目录下最近新增文件/显示C盘中隐藏文件办法/释放C盘空间办法
  7. 什么是QC080000有害物质过程控制管理体系认证辅导
  8. 看图猜口袋妖怪属性,这个神经网络可能比你强!(教程)
  9. 用 Python 读取巴菲特最近的持仓数据
  10. 商务汇报PPT制作的七堂课-第一课:配色技巧