android黑科技系列——防自動搶紅包外掛原理解析

來源:互聯網
上載者:User

標籤:gid   b2c   利用反射   tar   get   為我   方法   sgid   打包   

一、前言

春節過年發個紅包本來就是為了討個喜慶,朋友親戚之間的關係交流,但是現在隨著技術變革,搶紅包外掛程式越來越多,導致現在不太願意發紅包了,特別是在一個多人群裡,潛水的非常多,但是丟個紅包瞬間就沒了,感覺真的很不爽呀,然後造成的現象就是你用外掛程式,我也用,結果搶紅包就變得沒有意思了。在這裡我還是覺得盡量不要用這些所謂的搶紅包外掛程式。多讀些書多好呀!

二、自動搶紅包外掛程式分析

本文就來應對那些自動搶紅包外掛程式功能的防護功能,我們知道現在自動搶紅包主要有著三種方式:

第一種:利用協助工具功能和通知欄訊息攔截來做到第一時間紅包來了提醒使用者

第二種:利用Xposed架構進行hook搶紅包功能

第三種:直接修改具備搶紅包功能app的代碼,二次打包安裝

但是這三種方式其實目的只有一個:在收到紅包之後能夠立即提醒使用者,核心點就一個字”快”,那麼防止這些外掛程式的出發點也就是如何能夠得到搶紅包的時間,通過這個時間來判斷一個人到底有沒有用外掛程式。因為我們搶過紅包的都知道,正常情況下搶一個紅包需要經曆:接受紅包訊息+手動點擊紅包+紅包開啟動畫,這三個情境。安裝平均網速和人的反應速度,搶一個紅包消耗的時間大約在4s-5s左右。當然可能會更長,如果更長的時間就不在我們這次討論範圍內了,而這個時間也是我們自己估摸出來的,不是非常準確的。所以我們現在的思路是,如何能夠擷取一個紅包被搶了之後,每個人搶包消耗的時間。

三、尋找Hook入口

先來看看一個紅包被搶完之後的詳情頁面資訊:


從這個詳情頁面可以看到,有一個值就是時間欄位,而這個頁面應該是個ListView控制項,所以這裡就是我們的突破口,這裡依然使用命令查看當前頁面名稱:adb shell dumpsys activity top


然後用Jadx開啟WX應用,這裡我依然用的是6.3.9版本:


這裡就阻礙住了,為何找不到這個類呢?在之前的一篇文章中已經踩過這個坑了,就是WX應用進行了拆包技術,就是有多個dex檔案,不瞭解的可以看這篇文章:如何擷取WX應用的聊天記錄和通訊錄資訊;他把從dex放在assets目錄下:


所以我們可以直接解壓這個jar,得到對應的dex檔案,然後用jadx開啟即可,繼續搜尋類:


看到了吧,這時候就找到了,點擊進入即可:


找到了ListView控制項,要想看具體資料肯定要找到他的Adapter值:


這裡的代碼就非常簡單了,福士化的Adapter代碼,為了能夠看到資料,直接找到資料列表資訊:


我們只要hook這個ix方法即可,然後得到他的傳回值,在使用反射列印所有欄位值:


四、列印紅包詳情資訊

上面就分析完了紅包詳情頁面資料資訊,下面可以直接寫Xposed模組,來hook這個方法即可,不過這裡有一個坑需要注意的:Xposed預設是載入classes.dex主dex中的類。對於從dex中的類,按照以前方式載入的話會提示找不到類資訊的,所以這裡需要做一個處理,就是先hook系統的Application類的attach方法,然後得到對應的Context的類載入器,然後用這個類載入器去載入指定的類,如果找不到這個類就直接返回,因為無法知道想要載入類是在哪個dex中,而且你也無法知道當前hook的是哪個dex檔案。所以只能一次一次進行嘗試,一旦載入成功就開始後續的操作了,載入代碼非常簡單,如下所示:


這裡載入com.tencent.mm.plugin.luckymoney.ui.h這個類成功之後,咋們就來hook他的ix方法:


模組編寫完成之後,安裝重啟裝置生效,然後在開啟一個紅包的詳情頁面,列印值如下:


我們看到這裡的eNC欄位值應該是一個時間戳記,是10位的,注意後面如果要計算時間差得注意13位的時間戳記和10位的時間戳記問題。而eNc欄位代表的是一個id值。暫且認為是當前紅包的唯一id值。

五、擷取紅包id值和時間戳記

那麼有了這些資訊之後,我們應該還需要知道一個資訊,那就是接受紅包的時間戳記和id值,這樣我們才能計算每個人搶包的時間值。這個值擷取也比較簡單了,這個可以直接攔截訊息,過濾是紅包資訊之後,解析xml資訊得到對應的值,關於如何攔截訊息在之前的一篇關於:如何自動開啟公眾號文章和連結文章 中已經詳細介紹了,這裡不再多說,直接上代碼:


我們可以看到當發送一個紅包之後的訊息xml格式如下:


我們看到這個paymsgid值和上面的eNc欄位值非常類似,不過不是一致的,但是可以作為唯一id值來處理,這裡我們用這個id值的倒數13位開始截斷作為Map儲存結構的key值。這樣就把當前紅包的id值和時間戳記儲存下來了,然後在查看紅包詳情資訊的時候在計算時間差資訊即可。

這裡為了更好的在介面上看到每個人搶包時間,我們需要在修改列表資訊,這時候我們可能需要去hook資訊列表的getView方法了,我們知道每次展示item的時候都會調用getView方法的,看看getView方法的實現邏輯:


這裡的代碼也是非常福士化的,沒難度,我們找到介面中展示時間的TextView控制項,將其內容改成搶包時間差資訊,這裡找的方法也比較簡單,直接計算id值轉化成16進位,然後去public.xml檔案中找到對應的id名稱,查看布局檔案即可。首先我們找到item的布局檔案,將上面的2131362602十進位轉化成16進位,然後去public.xml中查看:


找到布局檔案是v6.xml,開啟這個檔案:


看到這裡的布局層次是外層LinearLayout,然後內層第二個子View是LinearLayout,然後內部多個子TextView展示資訊的,下面繼續找到展示時間的TextView,這個也比較簡單,因為從上面列印欄位資訊可以知道eNC這個值就是時間戳記資訊,可以查看代碼:eRq就是展示時間戳記資訊的


把十進位:2131167693轉化成16進位,查看public.xml內容:


然後在上面的布局檔案中找到b45這個id控制項:


看到這個是位於子LinearLayout的第4個子TextView控制項,這裡一定要注意子控制項的順序和索引值,後面會根據這個索引值來找到對應的TextView控制項,下面直接來看代碼實現吧:


代碼實現比較簡單了,主要分為三步:

第一步:hook住getView方法得到列表的item索引值,利用反射調用之前的ix方法得到對應item的資料資訊,包括時間戳記和id值。

第二步:利用紅包的id值去全域的Map結構中檢索到紅包發送的時間戳記值,計算搶包時間差。

第三步:通過方法的傳回值View,來檢索原來展示時間資訊的TextView,這裡一定要注意getChildAt這個方法的調用必須依賴於子控制項的索引值。

模組編寫完成之後,咋們就安裝重啟裝置生效,然後開啟一個紅包詳情頁面,看看:


看到了,在這個群裡果然有很多掛逼,盡然在2s之內就可以搶到紅包,不是掛逼是啥!

六、總結技巧

到這裡我們就講解完了防止自動搶紅包外掛程式原理,下面來總結一下本次操作的技巧知識點:

1、對於多dex應用進行hook的時候,會出現找不到類的錯誤,可以先hook住系統的Application的attach方法,得到Context之後,利用其ClassLoader進行載入類即可。

2、在進行hook的時候想修改介面資料的時候,大致思路是先找到指定的展示控制項,一般都是通過id值去public.xml中尋找布局檔案即可。當然也有些布局可能是代碼編寫的。那樣更容易尋找了。然後在利用布局的層級關係找到指定的控制項即可。

 

嚴重聲明:本文的目的只有一個,通過一個案例來分析現在應用逆向分析技巧,如果有人利用本文內容進行任何商業目的和非法牟利,帶來的任何法律責任將由操作者本人承擔,和本文作者沒有任何關係,所以還是由衷的希望大家秉著技術學習的目的閱讀此文,非常感謝!

 

七、總結

本文主要通過WX應用防止搶紅包外掛程式的功能作為案例,來介紹了利用Xposed進行hook的時候遇到的一些問題,以及解決方案,在說到搶紅包本文的結案方法很簡單,就是通過搶包時間來判斷,但是這個不是百分百的準確,因為有很多不確定因素在裡面,比如網速等,都可能決定一個紅包被搶的時間。但是在一定搶包時間內我們可以斷定是否使用了自動搶包功能外掛程式,如果希望做的更智能,最好是採樣多個紅包被搶資訊來進行簡單的資料分析來判定某個人是否真的的確用了自動搶包外掛程式。

android黑科技系列——防自動搶紅包外掛原理解析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.