作者:
蒸米
·
2015/09/06 10:29
0x00 序
隨著帶協處理器和買手環的人越來越多,微信運動一下子火了,只要你在微信關注微信運動,手機就能自動記錄你每天行走的步數,還可以跟朋友圈裡的好友PK運動量。並且每日排名第一的使用者可以佔據當日排行榜的封面。這充分激起了大家的求勝的慾望,於是出現了很多勵志的和悲傷的故事……
0x01微信運動作弊大法
其實想要拿第一沒有那麼麻煩,只要會一點Android的Hook知識,就可以輕鬆衝到排行榜第一名。接下來我就手把手教你如何變成第一。
首先我們需要一臺帶協處理的root後的android機器,比如說nexus 5。然後我們裝上作弊用的XPosed Hook框架和作弊外掛。這兩個apk可以在我的github上下載到。
https://github.com/zhengmin1989/WechatSportCheat
下載完後,先安裝XPosed.apk
。接著開啟Xposed,選擇“安裝/更新
”,然後根據提示重啟手機。
重啟完後,再安裝xposedwechat.apk
外掛。然後開啟Xposed的模組介面,會看到xposedwechat這個外掛。我們在這裡將它選中,然後再根據提示重啟手機。
接下來就是見證奇蹟的時刻…你隨意走兩步,然後開啟微信運動,咦,怎麼就多了1000步?再隨便走幾步,咦,怎麼又多了1000步?… demo影片如下:
僅僅刷步數還是不夠過癮吧?微信運動還推出了益行家活動,可以用每天的步數換取愛心捐款。有了微信運動作弊大法,我們可以每天在家隨便走幾步然後換取愛心捐款(如圖所示)。
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);
比如說x就代表開機以來行走的步數,timestamp是獲取步數時候的時間戳等。
另外,我們不僅在android上可以hook計步器,在iOS上也是可以透過越獄後hook iHealth的API介面達到同樣的作弊效果,有興趣的同學可以繼續研究。
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 參考文章
Android.Hook框架xposed篇(Http流量監控)
人手一份核武器 - Hacking Team 洩露(開源)資料導覽手冊
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!