Android微信搶紅包外掛源碼

CodeBoy微信搶紅包外掛

效果預覽

源碼下載地址:https://github.com/lendylongli/qianghongbao

apk下載地址 : 下載最新版本

前言

Codeboy微信搶紅包是我在2015年春節過年期間編寫的一個開源的興趣項目,只要是將整個核心搶紅包的流程編寫出來,至于再復雜的一些操作就沒深入研究。當這個項目發布后,也是反應挺大的,很多網友也找到我了與交流,也有做淘寶的人給錢讓我去增加一些功能,當然我是拒絕的。

作者聲明

在這里,我聲明一下,我所做的是自己有興趣的事情,只是通過開源的方式讓大家去學習相關技術,并不是為了營利,而我也知道淘寶上有人直接拿我的應用去售賣,這些都是沒經過我的允許,我也沒有半點收益,我留下聯系方式是為了方便開發者之間的討論與學習,所以請商業合作的與小白不要加我QQ,謝謝。

技術詳述

一開始大家都會覺得做一個Android外掛會汲取很多東西或者底層的東西,但當發現Android里有一個叫AccessibilityService的服務時,一切都變得很簡單。

關于AccessibilityService

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

Android官網詳解accessibility

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

Accessibility相關API描述

當然accessibility除了可以輔助點擊界面的事件外,還可以用作自動化測試,或者一鍵返回,是一個非常強大與實用的功能,具體實例可以看我另一個App虛擬按鍵助手 請往下載 GooglePlay市場應用寶

關于搶紅包的流程

在有以上的一些關于輔助服務的基礎知識后,我們就可以分析怎樣自動化搶紅包。 大家使用過微信都知道,如果不是在微信的可見界面范圍(在桌面或者在使用其它應用時),在收到新的消息,就會在通知欄提醒用戶。而在微信的消息列表界面,就不會彈出通知欄,所以可以區分這兩種情況。然后抓取相關關鍵字作進一步處理。

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

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

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

這樣就可以完成整個自動化完成搶紅包的流程了,所以核心就是找關鍵字,然后模擬用戶點擊事件,就這么簡單。以下詳細說一下代碼的實現。

以下是通過DDMS工具里的Dump View Hierarchy For UI Automator 去分析微信UI結構。


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

1、新建一個繼承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之前的系統要在代碼里聲明。

2、在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類文檔描述

3、在以上都配置好后,我們就可以在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/關于作者

英文名:Leon
個人博客:http://www.happycodeboy.com
Email:codeboy2013@gmail.com
QQ:730395591


項目地址: https://github.com/lendylongli/qianghongbao

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!