高端大氣上檔次·玩轉微信搖色子

高端大氣上檔次·玩轉微信搖色子
每次宅寢室一起點外賣,誰下去拿都是個大問題,所以小編寢室一般選擇微信色子,誰小誰去拿。但是小編運氣不太好,總是輸。所以尋思着能不能每次都讓色子是6點。果然找到了方法。

 

準備工作:

 
  需要一臺已經root並且安裝了Hook神奇Xposed框架。在Hook過程中最重要的一點就是要找到Hook點這也是最難的部分。找到Hook點之後編寫Xposed模塊就比較簡單了。
  本次實驗使用的weixin版本是6513。

 

猜想假設

 
  我們先猜測微信搖色子是怎麼實現的。如果有簡單編程經驗的朋友肯定會猜測是random函數。其實我也是這麼猜的。

 

逆向分析

1. 反編譯apk

 進行簡單的準備工作:使用apktool反編譯apk。使用Jadx打開微信的apk。微信較大,打開會比較慢。

2. 找到色子對應控件的id

 這一步可以藉助AndroidSDK提供的一個工具:uiautomatorviewer.bat。可以看到下面的界面。
 
高端大氣上檔次·玩轉微信搖色子
 
 可以看到色子控件對應的id是cph。然後在public.xml中找到cph對應的值爲0x7f100d28。
 
高端大氣上檔次·玩轉微信搖色子
 
 最後用這個值去R類裏面找到真正使用的名稱爲bfq
 
高端大氣上檔次·玩轉微信搖色子

 

3. 查找Hook點

  最難的部分就是查找hook點。在jadx中全局搜索bqf。顯然這個findViewById()纔是我們要找的東西,雙擊點進去看代碼。如果有多個需要一個一個看。
 
高端大氣上檔次·玩轉微信搖色子
 
  上下查看這個類包含的內容。可以知道這是一個baseAdapter類。但是getView方法中沒有設置點擊事件。
 
高端大氣上檔次·玩轉微信搖色子
高端大氣上檔次·玩轉微信搖色子
高端大氣上檔次·玩轉微信搖色子
 
  全局搜索調用這個函數的地方進行查找。
 
高端大氣上檔次·玩轉微信搖色子
高端大氣上檔次·玩轉微信搖色子
 
  雙擊進入代碼查看,看到是SmileyGrid類型的控件。查看SmileyGrid定義。
 
高端大氣上檔次·玩轉微信搖色子
 
  對onItemClick中的方法一個一個分析,最後發現紅框中才是我們要找的方法。
 
高端大氣上檔次·玩轉微信搖色子
 
  查看a函數代碼,可以看到最下面兩個是toast,顯然不是。接下來就需要對剩下的分支進行查看。
 
高端大氣上檔次·玩轉微信搖色子
 
  查看之後我們知道是第一個也就是c c = ((com.tencent.mm.plugin.emoji.b.c) h.j(com.tencent.mm.plugin.emoji.b.c.class)).getEmojiMgr().c(cVar);
  根據導入的包信息我們可以知道是com.tencent.mm.kernel.h並且類型是com.tencent.mm.plugin.emoji.b.c繼續看這幾處的代碼進行分析。
 
高端大氣上檔次·玩轉微信搖色子
 
 下面是h.j的代碼,返回是j。
 
高端大氣上檔次·玩轉微信搖色子
 
 下面是emoji.b.c的代碼,我們可以知道是一個接口。
 
高端大氣上檔次·玩轉微信搖色子
 
  在做到這裏的時候卡了好久沒什麼思路了,然後寫了一個簡單的xposed模塊hook了com.tencent.mm.kernel.h的j函數看看返回的類型是什麼。
 
高端大氣上檔次·玩轉微信搖色子
 
  將模塊裝安裝重啓後,打開weixin清空logcat然後點擊色子,看到了下面的輸出,可以知道輸入參數的類型是com.tencent.mm.plugin.emoji.b.c返回的類型是com.tencent.mm.plugin.emoji.PluginEmoji。然後看看PluginEmoji的代碼。
 
高端大氣上檔次·玩轉微信搖色子
 
  看到PluginEmoji包含了getEmojiMgr方法,重點看這個方法。
 
高端大氣上檔次·玩轉微信搖色子
高端大氣上檔次·玩轉微信搖色子
 
  有了前面的經驗,這裏就在前面的那個模塊也hook了這個方法看看返回的具體是什麼。點擊之後在上面的提示出現了另一行。返回的具體是com.tencent.mm.plugin.emoji.e.g再去看emoji.e.g的代碼。
 
高端大氣上檔次·玩轉微信搖色子
高端大氣上檔次·玩轉微信搖色子
 
  重點當然是分析emoji.e.g的c方法。代碼如下。通過yH.movToPosition(dM)知道dM纔是關鍵,繼續追蹤bf.dM的代碼。通過導入的包可以知道來自com.tencent.mm.sdk.platformtools.bf。
 
高端大氣上檔次·玩轉微信搖色子
高端大氣上檔次·玩轉微信搖色子
 
  看到這個Random函數還真是有點小激動啊。估摸應該是這裏了。同樣hook看一下輸入參數和返回的參數是什麼。
 
高端大氣上檔次·玩轉微信搖色子
高端大氣上檔次·玩轉微信搖色子
 
  輸入的參數都是5和0,輸出的正好和點數相對應,3對應4點,1對應2點,1對應0點.
 
高端大氣上檔次·玩轉微信搖色子
高端大氣上檔次·玩轉微信搖色子

 

編寫模塊

 
  找到隨機數的返回點,接下來寫hook模塊就簡單了。還有一點要注意的是,石頭剪刀布也是用的這個隨機函數。所以寫的時候要注意一下。
 
高端大氣上檔次·玩轉微信搖色子
 
最後體驗一下效果如何。
 
高端大氣上檔次·玩轉微信搖色子
 
這下終於不用拿外賣了。

 

總結

1.  找id:對於控件的點擊事件可以用uiautomatorviewer定位到控件的id,然後通過public.xml和R類找到真正使用的類名和十六進制id。
2.  定位到關鍵代碼:接下來最難的就是定位到關鍵代碼,通常要花很多時間,多練習能夠提高速度。
3.  編寫xposed模塊:找到關鍵函數以後,編寫模塊就比較簡單了。有些app有分包的時候要注意一下。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章