欢迎访问我的博客,阅读体验会更好哦。
微信自定义表情的石头剪刀布还有掷骰子,相信大家都有玩过,它的结果是随机的,那有没有一种办法使这个结果确定呢?
百度知道百度知道上是这么说的,我试了一下,不行,重发的时候会骰子的点数会再次改变,可能是对老版本才适用吧。
其实,在 Android 中使用 Xposed 框架可以完成类似的需求的,在很久以前,我就用过这种插件了,而且在github 上有开源的项目,但是这些项目现在没有适配新版本的微信,而且写 xposed 插件,代码本身没什么,最主要的是找到切入点,什么时候hook,什么时候改变返回等,本文使用最新版本的微信,以hook掷骰子为例,写一个插件,让每一次掷骰子的结果确定。
微信版本我们要找到掷骰子时执行的关键方法,怎么找呢?
- 反编译app后,顺着逻辑,猜着找,app经过混淆后,代码可读性很差,难度较大
- 通过一些工具来抓取关键方法执行顺序的log,这里介绍两款 icodetools 和 AppMethodOrder
通过 AppMethodOrder 抓到了掷骰子,到骰子点数出现的过程中,所有执行过的方法,如图所示:
很多的然后,我们搜索random,因为他有很大的可能会调用这个函数实现随机,发现只有这个地方用到:
而且可以看到,跟 tencent 有关的,而且返回值是 int 的函数是这个:
基本确定是这个就是关键的的函数了,我们可以看一下代码
这代码是啥意思呢?经过我调试发现,但我们点剪刀石头布的时候参数是2和0,当点击骰子的时候,参数是5和0,所以其实函数的作用就是生成参数一范围内的随机数。
好的找到了关键函数函数后我们hook这个dM方法:
改变他的返回值:
这里稍微注意一下,如果将返回值设置成5,而选择的是剪刀石头布的时候,微信会崩掉。。。
z可以通过 XSharedPreferences
来完善这个项目,动态修改这个值实现骰子点数的变化。
最后看一下效果?
效果图欢迎打赏、点赞、关注。
参考
网友评论