版本归做者 Leon 全部,因此在此注明出处:http://www.happycodeboy.com/index.php/archives/10/php
源码下载地址:https://github.com/lendylongli/qianghongbao
apk下载地址 : 百度云下载 http://pan.baidu.com/s/1qWBZwUKhtml
继微信删好友以后,又被另一位同窗安利了一款抢红包的外挂,俗称过年必备神器= =android
先看看官网的介绍 Accessibility`git
Many Android users have different abilities that require them to interact with their Android devices in different ways. These include users who have visual, physical or age-related limitations that prevent them from fully seeing or using a touchscreen, and users with hearing loss who may not be able to perceive audible information and alerts...github
上面大概的意思就是 Accessibility 是一个辅助服务,主要是面向一些使用 Android 手机的用户有相关障碍(年龄、视觉、听力、身体等),这个功能能够更容易使用手机,能够帮用户在点击屏幕或者显示方面获得帮助等等。接下来就是查找相关 API,看能作到哪一个地步。微信
固然accessibility
除了能够辅助点击界面的事件外,还能够用做自动化测试,或者一键返回,是一个很是强大与实用的功能ide
在有以上的一些关于辅助服务的基础知识后,咱们就能够分析怎样自动化抢红包。 你们使用过微信都知道,若是不是在微信的可见界面范围(在桌面或者在使用其它应用时),在收到新的消息,就会在通知栏提醒用户。而在微信的消息列表界面,就不会弹出通知栏,因此能够区分这两种状况。而后抓取相关关键字做进一步处理。工具
一、在非微信消息列表界面,收到通知消息的事件,判断通知栏里的文本是否有[微信红包]的关键字,有则能够判断为用户收到红包的消息(固然,你能够故意发一条包括这个关键字的文本消息去整蛊你的朋友)。而后,咱们就自动化触发这个消息的意图事件(Intent
);
二、在通知栏跳进微信界面后,是去到com.tencent.mm.ui.LauncherUI
这个Activity
界面。咱们知道,红包的消息上,包括了关键字领取红包或者View
的id
,那咱们就根据这个关键字找到相应的View
,而后再触发ACTION_CLICK
(点击事件);
三、在点击红包后,会跳到com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI
这个拆红包的Activity
,固然老方法,找关键字拆红包或id
,而后触发自动化点击事件。
这样就能够完成整个自动化完成抢红包的流程了,因此核心就是找关键字,而后模拟用户点击事件,就这么简单。如下详细说一下代码的实现。
如下是经过DDMS
工具里的Dump View Hierarchy For UI Automator
去分析微信UI
结构。
一、新建一个继承AccessibilityService
的类,如QiangHongBaoService
,而后在AndroidManifest.xml
里声明组件,以下
<service android:label="@string/app_name" android:name=".QiangHongBaoService" 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/qianghongbao_service_config"/> </service>
在 meta-data 里声明的是辅助配置,这个是 Android4.0 以后才支持的写法,在 4.0 以前的系统要在代码里声明。
二、在res/xml
目录下生成辅助服务的配置文件qianghongbao_service_config.xml
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/accessibility_description" android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged" android:packageNames="com.tencent.mm" android:accessibilityFeedbackType="feedbackGeneric" android:notificationTimeout="100" android:accessibilityFlags="" android:canRetrieveWindowContent="true"/> android:description 这个是设置服务的描述,在用户受权的界面能够看到。
android:accessibilityEventTypes
这个是配置要监听的辅助事件,咱们只须要用到typeNotificationStateChanged
(通知变化事件)、typeWindowStateChanged
(界面变化事件)
android:packageNames
这个是要监听应用的包名,若是要监听多个应用,则用,去分隔,这里咱们只须要监听微信的就能够了
android:accessibilityFeedbackType
这个是设置反馈方式
FeedbackType | 描述 |
---|---|
feedbackSpoken | 语音反馈 |
feedbackHaptic | 触感反馈 |
feedbackAudible | 表示声音(不是语音)反馈 |
feedbackVisual | 视觉反馈 |
feedbackGeneric | 通用反馈 |
feedbackAllMask | 全部以上的反馈 |
详细看 AccessibilityServiceInfo 类文档描述
三、在以上都配置好后,咱们就能够在QiangHongBaoService
这个服务里进行编码了,要作的就是将整个 UI 跳转流程与逻辑串联起来。
@Override public void onAccessibilityEvent(AccessibilityEvent event) { //接收事件,如触发了通知栏变化、界面变化等 } @Override protected boolean onKeyEvent(KeyEvent event) { //接收按键事件 return super.onKeyEvent(event); } @Override public void onInterrupt() { //服务中断,如受权关闭或者将服务杀死 } @Override protected void onServiceConnected() { super.onServiceConnected(); //链接服务后,通常是在受权成功后会接收到 }
具体内容请看源码
在了解整个核心后,获取事件不外乎就是经过文本与 id 判断,那么就能够将文本改成图标方式,将 id 改成动态 id(每次显示都是随机生成),这样一来就能够提升外挂的门槛。
如今抢红包就看谁的外挂工具反应够快,如何去干扰这些外挂,其实也有点小技巧,就是在发红包前,发送文本[微信红包],能够致使部分外挂工具失效。
版本归做者全部,转载请注明出处:http://www.happycodeboy.com/index.php/archives/10/