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...
上面大概的意思就是Accessibility是一個輔助服務,主要是面向一些使用Android手機的用戶有相關障礙(年齡、視覺、聽力、身體等),這個功能可以更容易使用手機,可以幫用戶在點擊屏幕或者顯示方面得到幫助等等。接下來就是查找相關API,看能做到哪個地步。
當然accessibility
除了可以輔助點擊界面的事件外,還可以用作自動化測試,或者一鍵返回,是一個非常強大與實用的功能,具體實例可以看我另一個App虛擬按鍵助手
請往下載 GooglePlay市場 或 應用寶。
關于搶紅包的流程
在有以上的一些關于輔助服務的基礎知識后,我們就可以分析怎樣自動化搶紅包。 大家使用過微信都知道,如果不是在微信的可見界面范圍(在桌面或者在使用其它應用時),在收到新的消息,就會在通知欄提醒用戶。而在微信的消息列表界面,就不會彈出通知欄,所以可以區分這兩種情況。然后抓取相關關鍵字作進一步處理。
1、在非微信消息列表界面,收到通知消息的事件,判斷通知欄里的文本是否有[微信紅包]的關鍵字,有則可以判斷為用戶收到紅包的消息(當然,你可以故意發一條包括這個關鍵字的文本消息去整蠱你的朋友)。然后,我們就自動化觸發這個消息的意圖事件(Intent
);
2、在通知欄跳進微信界面后,是去到com.tencent.mm.ui.LauncherUI
這個Activity
界面。我們知道,紅包的消息上,包括了關鍵字領取紅包
或者View
的id
,那我們就根據這個關鍵字找到相應的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