手把手教你當微信運動第一名 – 利用Android Hook進行微信運動作弊

wyzsk發表於2020-08-19
作者: 蒸米 · 2015/09/06 10:29

0x00 序


隨著帶協處理器和買手環的人越來越多,微信運動一下子火了,只要你在微信關注微信運動,手機就能自動記錄你每天行走的步數,還可以跟朋友圈裡的好友PK運動量。並且每日排名第一的使用者可以佔據當日排行榜的封面。這充分激起了大家的求勝的慾望,於是出現了很多勵志的和悲傷的故事……

enter image description here

enter image description here

0x01微信運動作弊大法


其實想要拿第一沒有那麼麻煩,只要會一點Android的Hook知識,就可以輕鬆衝到排行榜第一名。接下來我就手把手教你如何變成第一。

首先我們需要一臺帶協處理的root後的android機器,比如說nexus 5。然後我們裝上作弊用的XPosed Hook框架和作弊外掛。這兩個apk可以在我的github上下載到。

https://github.com/zhengmin1989/WechatSportCheat

下載完後,先安裝XPosed.apk。接著開啟Xposed,選擇“安裝/更新”,然後根據提示重啟手機。

手把手教你當微信運動第一名 – 利用Android Hook進行微信運動作弊

重啟完後,再安裝xposedwechat.apk外掛。然後開啟Xposed的模組介面,會看到xposedwechat這個外掛。我們在這裡將它選中,然後再根據提示重啟手機。

手把手教你當微信運動第一名 – 利用Android Hook進行微信運動作弊

接下來就是見證奇蹟的時刻…你隨意走兩步,然後開啟微信運動,咦,怎麼就多了1000步?再隨便走幾步,咦,怎麼又多了1000步?… demo影片如下:

<embed>

僅僅刷步數還是不夠過癮吧?微信運動還推出了益行家活動,可以用每天的步數換取愛心捐款。有了微信運動作弊大法,我們可以每天在家隨便走幾步然後換取愛心捐款(如圖所示)。

手把手教你當微信運動第一名 – 利用Android Hook進行微信運動作弊

0x02 微信運動作弊原理


我們是如何作弊的呢?簡單來說,當微信運動想要知道我們走了多少步的時候,微信app會詢問android系統的計數感測器,隨後計數感測器會返回我們行走的步數。因此,如果我們能夠攔截微信運動和計數感測器之間的對話,然後偽造一個步數傳遞給微信運動就可以達到我們想要的作弊效果。

具體怎麼做呢?首先我們可以用Xposed框架來hook計數感測器的佇列函式dispatchSensorEvent(),這個函式在 android.hardware.SystemSensorManager$SensorEventQueue這個類中。隨後在微信運動每次詢問行走步數的時候,我們先獲取當前步數,然後在目前的步數的基礎上加1000步,然後將資訊返回給微信運動。微信運動就會誤以為我們運動了1000步,從而達到了欺騙的效果。

關鍵程式碼如下:

首先hook android.hardware.SystemSensorManager$SensorEventQueue這個類的dispatchSensorEvent()函式:

final Class<?> sensorEL = findClass("android.hardware.SystemSensorManager$SensorEventQueue",lpparam.classLoader);
XposedBridge.hookAllMethods(sensorEL, "dispatchSensorEvent", new XC_MethodHook() 

接著我們在記步感測器把步數資訊返回給微信運動之前,將返回的步數加上1000步:

protected void beforeHookedMethod(MethodHookParam param) throws
Throwable {
XposedBridge.log(" mzheng  Hooked method: " +  param.method);
 ((float[]) param.args[1])[0]=((float[]) param.args[1])[0]+1000*WechatStepCount;
WechatStepCount+=1;
…

另外我們還可以使用一些感測器的介面獲取一些資料的資訊:

Sensor ss = ((SparseArray<Sensor>) field.get(0)).get(handle);                            
XposedBridge.log("   SensorEvent: sensor=" + ss);

enter image description here

比如說x就代表開機以來行走的步數,timestamp是獲取步數時候的時間戳等。

另外,我們不僅在android上可以hook計步器,在iOS上也是可以透過越獄後hook iHealth的API介面達到同樣的作弊效果,有興趣的同學可以繼續研究。

手把手教你當微信運動第一名 – 利用Android Hook進行微信運動作弊

手把手教你當微信運動第一名 – 利用Android Hook進行微信運動作弊

0x03微信運動反作弊建議


如何防止這種作弊發生呢?我的第一個建議是加強伺服器端的邏輯檢測功能。比如說一個人是不可能十分鐘內走一萬步的,如果他做到了,那麼他一定是在作弊。 我的第二個建議是增加對hook的檢測功能。雖然微信運動作下弊無非就是滿足一下大家爭強好勝的虛榮心,並不會對大家的隱私和財產產生損失。但是既然微信運動可以被hook,同樣也意味著語音聊天,微信支付等功能也是可以被hook的,當駭客利用hook技術對你的隱私和財產產生危害的時候可就不是那麼好玩的事了。之前我們在Hacking Team事件中也親眼目睹了利用hook技術來獲取微信語音訊息的android木馬,所以一定要增加針對hook的檢測才行。

0x04 總結


此文只是介紹了Android Hook的簡單場景應用,關於Android Hook的原理以及更多的利用方式,比如說除錯,關鍵API攔截,外掛等技巧,敬請期待WooYun Book系列的文章《安卓動態除錯七種武器之離別鉤 - Hooking》。 https://github.com/zhengmin1989/TheSevenWeapons

0x05 參考文章


  1. Android.Hook框架xposed篇(Http流量監控)

  2. 人手一份核武器 - Hacking Team 洩露(開源)資料導覽手冊

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章