版本歸做者 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/