歡迎訪問(wèn)我的博客躺同,閱讀體驗(yàn)會(huì)更好哦阁猜。
微信自定義表情的石頭剪刀布還有擲骰子,相信大家都有玩過(guò)笋籽,它的結(jié)果是隨機(jī)的蹦漠,那有沒(méi)有一種辦法使這個(gè)結(jié)果確定呢?
百度知道上是這么說(shuō)的车海,我試了一下笛园,不行隘击,重發(fā)的時(shí)候會(huì)骰子的點(diǎn)數(shù)會(huì)再次改變,可能是對(duì)老版本才適用吧研铆。
其實(shí)埋同,在 Android 中使用 Xposed 框架可以完成類似的需求的,在很久以前棵红,我就用過(guò)這種插件了凶赁,而且在github 上有開源的項(xiàng)目,但是這些項(xiàng)目現(xiàn)在沒(méi)有適配新版本的微信逆甜,而且寫 xposed 插件虱肄,代碼本身沒(méi)什么,最主要的是找到切入點(diǎn)交煞,什么時(shí)候hook咏窿,什么時(shí)候改變返回等,本文使用最新版本的微信素征,以hook擲骰子為例集嵌,寫一個(gè)插件,讓每一次擲骰子的結(jié)果確定御毅。
我們要找到擲骰子時(shí)執(zhí)行的關(guān)鍵方法根欧,怎么找呢?
- 反編譯app后端蛆,順著邏輯凤粗,猜著找,app經(jīng)過(guò)混淆后欺税,代碼可讀性很差侈沪,難度較大
- 通過(guò)一些工具來(lái)抓取關(guān)鍵方法執(zhí)行順序的log,這里介紹兩款 icodetools 和 AppMethodOrder
通過(guò) AppMethodOrder 抓到了擲骰子晚凿,到骰子點(diǎn)數(shù)出現(xiàn)的過(guò)程中,所有執(zhí)行過(guò)的方法瘦馍,如圖所示:
然后歼秽,我們搜索random,因?yàn)樗泻艽蟮目赡軙?huì)調(diào)用這個(gè)函數(shù)實(shí)現(xiàn)隨機(jī)情组,發(fā)現(xiàn)只有這個(gè)地方用到:
而且可以看到燥筷,跟 tencent 有關(guān)的,而且返回值是 int 的函數(shù)是這個(gè):
基本確定是這個(gè)就是關(guān)鍵的的函數(shù)了院崇,我們可以看一下代碼
這代碼是啥意思呢肆氓?經(jīng)過(guò)我調(diào)試發(fā)現(xiàn),但我們點(diǎn)剪刀石頭布的時(shí)候參數(shù)是2和0底瓣,當(dāng)點(diǎn)擊骰子的時(shí)候谢揪,參數(shù)是5和0,所以其實(shí)函數(shù)的作用就是生成參數(shù)一范圍內(nèi)的隨機(jī)數(shù)。
好的找到了關(guān)鍵函數(shù)函數(shù)后我們hook這個(gè)dM方法:
改變他的返回值:
這里稍微注意一下拨扶,如果將返回值設(shè)置成5凳鬓,而選擇的是剪刀石頭布的時(shí)候,微信會(huì)崩掉患民。缩举。。
z可以通過(guò) XSharedPreferences
來(lái)完善這個(gè)項(xiàng)目匹颤,動(dòng)態(tài)修改這個(gè)值實(shí)現(xiàn)骰子點(diǎn)數(shù)的變化仅孩。
最后看一下效果?
歡迎打賞印蓖、點(diǎn)贊辽慕、關(guān)注。
參考