微信掷骰子,如何掷出6个6?

欢迎访问我的博客,阅读体验会更好哦。

微信自定义表情的石头剪刀布还有掷骰子,相信大家都有玩过,它的结果是随机的,那有没有一种办法使这个结果确定呢?

微信掷骰子,如何掷出6个6?_第1张图片
百度知道

百度知道上是这么说的,我试了一下,不行,重发的时候会骰子的点数会再次改变,可能是对老版本才适用吧。

其实,在 Android 中使用 Xposed 框架可以完成类似的需求的,在很久以前,我就用过这种插件了,而且在github 上有开源的项目,但是这些项目现在没有适配新版本的微信,而且写 xposed 插件,代码本身没什么,最主要的是找到切入点,什么时候hook,什么时候改变返回等,本文使用最新版本的微信,以hook掷骰子为例,写一个插件,让每一次掷骰子的结果确定。

微信掷骰子,如何掷出6个6?_第2张图片
微信版本

我们要找到掷骰子时执行的关键方法,怎么找呢?

  1. 反编译app后,顺着逻辑,猜着找,app经过混淆后,代码可读性很差,难度较大
  2. 通过一些工具来抓取关键方法执行顺序的log,这里介绍两款 icodetools 和 AppMethodOrder

通过 AppMethodOrder 抓到了掷骰子,到骰子点数出现的过程中,所有执行过的方法,如图所示:

微信掷骰子,如何掷出6个6?_第3张图片
很多的

然后,我们搜索random,因为他有很大的可能会调用这个函数实现随机,发现只有这个地方用到:

微信掷骰子,如何掷出6个6?_第4张图片

而且可以看到,跟 tencent 有关的,而且返回值是 int 的函数是这个:

微信掷骰子,如何掷出6个6?_第5张图片

基本确定是这个就是关键的的函数了,我们可以看一下代码

微信掷骰子,如何掷出6个6?_第6张图片

这代码是啥意思呢?经过我调试发现,但我们点剪刀石头布的时候参数是2和0,当点击骰子的时候,参数是5和0,所以其实函数的作用就是生成参数一范围内的随机数。

好的找到了关键函数函数后我们hook这个dM方法:

微信掷骰子,如何掷出6个6?_第7张图片

改变他的返回值:

微信掷骰子,如何掷出6个6?_第8张图片

这里稍微注意一下,如果将返回值设置成5,而选择的是剪刀石头布的时候,微信会崩掉。。。

z可以通过 XSharedPreferences 来完善这个项目,动态修改这个值实现骰子点数的变化。

最后看一下效果?

微信掷骰子,如何掷出6个6?_第9张图片
效果图

欢迎打赏、点赞、关注。

参考

Android中利用icodetools工具快速定位App破解中关键点方法

你可能感兴趣的:(微信掷骰子,如何掷出6个6?)