AccessibilityService+OpenCV实现微信7.0.0抢红包插件

本文介绍了如何利用AccessibilityService和OpenCV在微信7.0.0中实现抢红包功能。通过 AccessibilityService 监听微信事件,结合OpenCV进行屏幕截图和特征点匹配,识别红包消息。详细讲解了AccessibilityService的基本用法,微信抢红包的原理和实现,以及代码实现过程,包括聊天列表查找红包消息、模拟点击操作等。
摘要由CSDN通过智能技术生成

引言

提起AccessibilityService首先想到的肯定是抢红包插件。没错,目前基本上抢红包插件分为两类:root和免root,而免root的红包插件全是基于AccessibilityService。随着AccessibilityService的广泛应用,现今已经有比较多的方法可以防御基于AccessibilityService实现的自动化插件了。有兴趣的朋友可以参考这篇文章:红包外挂史及AccessibilityService分析与防御
本文通过AccessibilityService加上OpenCV辅助识别一些关键的特征,以此在高版本微信中实现抢红包的效果。

AccessibilityService基本用法

1、继承AccessibilityService

编写自己的Service类,必须重写onAccessibilityEvent()方法和onInterrupt()方法

public class HongbaoService extends AccessibilityService {

    /**
     * 当启动服务的时候就会被调用(非必须重写)
     */
    @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
    }

    /**
     * 监听窗口变化的回调
     */
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        int eventType = event.getEventType();
        //根据事件回调类型进行处理
    }

    /**
     * 中断服务的回调
     */
    @Override
    public void onInterrupt() {

    }
}

下面简要地介绍用到的几个AccessibilityEvent的事件类型

事件类型 描述
TYPE_VIEW_CLICKED View被点击
TYPE_VIEW_LONG_CLICKED View被长按
TYPE_VIEW_SELECTED View被选中
TYPE_NOTIFICATION_STATE_CHANGED 状态栏发生变化
TYPE_WINDOW_CONTENT_CHANGED 窗口内容发生变化
TYPE_WINDOW_STATE_CHANGED 打开弹出窗口、菜单、对话框等的时候触发

2、声明服务

首先,我们需要在manifests中配置该服务信息

        <service
            android:name=".service.HongbaoService"
            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>

我们必须注意:任何一个信息配置错误,都会使该服务无反应

  • android:label:在无障碍列表中显示该服务的名字(默认与APP名字相同)
  • android:permission:需要指定BIND_ACCESSIBILITY_SERVICE权限,这是4.0以上的系统要求的
  • intent-filter:这个name是固定不变的
    ##3、配置服务参数
    配置服务参数是指:配置用来接受指定类型的事件,监听指定package,检索窗口内容,获取事件类型的时间等等。其配置服务参数有两种方法:
  • 方法一:安卓4.0之后可以通过meta-data标签指定xml文件进行配置
  • 方法二:通过代码动态配置参数

这里我使用的是第一种方法:
在项目中增加accessible_service_config文件,配置如下:

<accessibility-service
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:description="@string/app_description"
    android:accessibilityEventTypes="typeWindowStateChanged|typeWindowContentChanged|typeNotificationStateChanged"
    android:accessibilityFeedbackType="feedbackAllMask"
    android:packageNames="com.tencent.mm"
    android:notificationTimeout="300"
    android:settingsActivity="com.shareder.ln_jan.wechatluckymoneygetter.activities.MainActivity"
    android:accessibilityFlags="flagDefault"
    android:canRetrieveWindowContent="true"
    android:canPerformGestures="true"/>
  • accessibilityEventTypes:表示该服务对界面中的哪些变化感兴趣,即哪些事件通知,比如窗口打开,滑动,焦点变化,长按等。具体的值可以在AccessibilityEvent类中查到,如typeAllMask表示接受所有的事件通知
  • accessibilityFeedbackType:表示反馈方式,比如是语音播放,还是震动
  • canRetrieveWindowContent:表示该服务能否访问活动窗口中的内容。也就是如果你希望在服务中获取窗体内容,则需要设置其值为true
  • description:对该无障碍功能的描述
  • notificationTimeout:接受事件的时间间隔,这里我设置的是300
  • packageNames:表示对该服务是用来监听哪个包的产生的事件,如"com.tencent.mm"为微信的包名
  • canPerformGestures: 安卓7.0后可通过dispatchGesture实现点击屏幕的操作,如需用此方法需将canPerformGestures设置为true

4、预备知识

4.1、获取节点信息

获取了界面窗口变化后,这个时候就要获取控件的节点。整个窗口的节点本质是个树结构,通过以下操作节点信息

1、获取窗口节点(根节点)
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
2、获取指定子节点(控件节点)
//通过文本找到对应的节点集合
List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText(text);
//通过控件ID找到对应的节点集合,如com.tencent.mm:id/gd
List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByViewId(clickId);

4.2、模拟点击的方法

获取节点信息后可通过performAction方法或dispatchGesture方法产生点击屏幕的效果

1、performAction
//模拟点击
accessibil
一个帮助你在微信抢红包时战无不胜的Android应用。自动检测并且拆开红包,速度超乎你的想象。 支持中英文。前往Release下载最新本。已下载用户可直接在设置里面更新。 特性 监视选项任意组合,满足多样化的使用需求[?] 提供了系统通知/聊天列表/聊天页面三档选项,无论是想要谨慎不被察觉,还是想要高效志在必得,这个插件如你所愿。 不仅快人一步,红包识别更加智能 多种特征标识,聊天时不再重复点击红包。智能过滤红包关键字[?],避免落入“专属红包”、“抢到翻倍”的陷阱。还可以设置延时抢红包和自动回复感谢语[?]。 紧跟微信更新 第一时间适配最新微信,应用内即可一键更新。 轻量、安全、值得信赖 安装包仅1M,无需ROOT,下载即用。代码公开透明,活跃的社区讨论,数万用户下载,值得你的信赖。 使用方法 打开『微信红包』应用,开启插件。 做你想做的事。 坐等红包进账。 实现原理 请见技术文档,注意文档描述的是dev分支(已弃用)的具体实现,而不是stable分支。若有疑问,请在ISSUES中提出。 更新日志 完整的更新日志请见CHANGELOG。 权及免责声明 本项目源自小米去年秋季发布会时演示的MIUI 7抢红包测试代码。 插件可能会在一定程度上改变微信的交互方式。使用本项目中包含的代码及其生成物时,使用者自行承担随之而来的各种风险,包括但不限于“禁用红包功能”、“微信封号”。 本项目使用MIT许可证。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值