微信搶紅包外掛

版本歸做者 Leon 全部,因此在此註明出處:http://www.happycodeboy.com/index.php/archives/10/php

源碼下載地址:https://github.com/lendylongli/qianghongbao
apk下載地址 : 百度雲下載 http://pan.baidu.com/s/1qWBZwUKhtml

繼微信刪好友以後,又被另一位同窗安利了一款搶紅包的外掛,俗稱過年必備神器= =android

預覽效果

此處輸入圖片的描述

技術詳述

關於 AccessibilityService

先看看官網的介紹 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

Android 官網詳解 accessibility安全

上面大概的意思就是 Accessibility 是一個輔助服務,主要是面向一些使用 Android 手機的用戶有相關障礙(年齡、視覺、聽力、身體等),這個功能能夠更容易使用手機,能夠幫用戶在點擊屏幕或者顯示方面獲得幫助等等。接下來就是查找相關 API,看能作到哪一個地步。微信

Accessibility 相關 API 描述app

固然accessibility除了能夠輔助點擊界面的事件外,還能夠用做自動化測試,或者一鍵返回,是一個很是強大與實用的功能ide

關於搶紅包的流程

在有以上的一些關於輔助服務的基礎知識後,咱們就能夠分析怎樣自動化搶紅包。 你們使用過微信都知道,若是不是在微信的可見界面範圍(在桌面或者在使用其它應用時),在收到新的消息,就會在通知欄提醒用戶。而在微信的消息列表界面,就不會彈出通知欄,因此能夠區分這兩種狀況。而後抓取相關關鍵字做進一步處理。工具

一、在非微信消息列表界面,收到通知消息的事件,判斷通知欄裏的文本是否有[微信紅包]的關鍵字,有則能夠判斷爲用戶收到紅包的消息(固然,你能夠故意發一條包括這個關鍵字的文本消息去整蠱你的朋友)。而後,咱們就自動化觸發這個消息的意圖事件(Intent);

二、在通知欄跳進微信界面後,是去到com.tencent.mm.ui.LauncherUI這個Activity界面。咱們知道,紅包的消息上,包括了關鍵字領取紅包或者Viewid,那咱們就根據這個關鍵字找到相應的View,而後再觸發ACTION_CLICK(點擊事件);

三、在點擊紅包後,會跳到com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI這個拆紅包的Activity,固然老方法,找關鍵字拆紅包或id,而後觸發自動化點擊事件。

這樣就能夠完成整個自動化完成搶紅包的流程了,因此核心就是找關鍵字,而後模擬用戶點擊事件,就這麼簡單。如下詳細說一下代碼的實現。

如下是經過DDMS工具裏的Dump View Hierarchy For UI Automator去分析微信UI結構。

此處輸入圖片的描述

此處輸入圖片的描述

此處輸入圖片的描述

使用 AccessibilityService去一步步監聽微信的動做

一、新建一個繼承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/

相關文章
相關標籤/搜索