歡迎訪問我的博客,閱讀體驗會更好哦。
微信自定義表情的石頭剪刀布還有擲骰子,相信大家都有玩過,它的結果是隨機的,那有沒有一種辦法使這個結果確定呢?
百度知道
百度知道上是這么說的,我試了一下,不行,重發的時候會骰子的點數會再次改變,可能是對老版本才適用吧。
其實,在 Android 中使用 Xposed 框架可以完成類似的需求的,在很久以前,我就用過這種插件了,而且在github 上有開源的項目,但是這些項目現在沒有適配新版本的微信,而且寫 xposed 插件,代碼本身沒什么,最主要的是找到切入點,什么時候hook,什么時候改變返回等,本文使用最新版本的微信,以hook擲骰子為例,寫一個插件,讓每一次擲骰子的結果確定。
微信版本
我們要找到擲骰子時執行的關鍵方法,怎么找呢?
- 反編譯app后,順著邏輯,猜著找,app經過混淆后,代碼可讀性很差,難度較大
- 通過一些工具來抓取關鍵方法執行順序的log,這里介紹兩款 icodetools 和 AppMethodOrder
通過 AppMethodOrder 抓到了擲骰子,到骰子點數出現的過程中,所有執行過的方法,如圖所示:
很多的
然后,我們搜索random,因為他有很大的可能會調用這個函數實現隨機,發現只有這個地方用到:
而且可以看到,跟 tencent 有關的,而且返回值是 int 的函數是這個:
基本確定是這個就是關鍵的的函數了,我們可以看一下代碼
這代碼是啥意思呢?經過我調試發現,但我們點剪刀石頭布的時候參數是2和0,當點擊骰子的時候,參數是5和0,所以其實函數的作用就是生成參數一范圍內的隨機數。
好的找到了關鍵函數函數后我們hook這個dM方法:
改變他的返回值:
這里稍微注意一下,如果將返回值設置成5,而選擇的是剪刀石頭布的時候,微信會崩掉。。。
z可以通過 XSharedPreferences
來完善這個項目,動態修改這個值實現骰子點數的變化。
最后看一下效果?
效果圖
歡迎打賞、點贊、關注。
參考