Java 破解腾讯微信跳一跳(几乎每次命中中心点,目前最高 19844 分)

一. 效果展示

程序控制小人自动跳,几乎每次命中中心点。

为了更好的展示运行效果,我贴一个刚刚录制的视频。http://v.youku.com/v_show/id_XMzI4NzM4MzI0NA==.html?spm=a2h0k.8191407.0.0&from=s1.8-1-1.2

如果你的运行效果,不像这个视频中所示,请一定要认真阅读“温馨提示”这个章节。

欢迎大家与我交流意见。附上 GitHub 地址burningcl/wechat_jump_hack

破解过程,总共花了3个小时,不断地调整算法与参数,因此代码比较乱,还请见谅。

喜欢这个程序的同学,求在GitHub上加star。

二. 实现原理

具体识别的算法,我现在没有时间总结了,大家可以先看源码。源码中部分参数是在笔者的手机上进行调试的(分辨率为1080),大家可以根据自己手机,进行相应修改。

主要步骤

识别玩家位置

如下图中白色空心方格所示:

识别目标方块位置

如下图中红色实心方格所示,识别最上面的顶点,最左边的点,与最右边的点,从而计算出中心点:

识别目标方块中心圆点的位置

如果你前一次踩中中心点,会有下一个中心点的提示(一个白色的圆点)。

流程

通过ADB截屏;

通过ADB将截屏保存到电脑;

识别玩家位置;

识别目标方块位置;

识别目标方块中心圆点的位置;

如果第5步成功,则取第5步的中心点为下一步的位置;否则,取第4步的中心点为下一步的位置;

计算玩家位置与下一步的位置,乘以一定的系数,得到长按的时间;

通过ADB,触发长按;

三. 运行教程

准备Java运行与编译环境,使用Java8以上,IDE推荐使用Intellij;

安装Android SDK;

使用 git工具clone项目,地址为https://github.com/burningcl/wechat_jump_hack;

使用IDE(笔者使用Intellij)import该项目;

准备好一部已经打开开发者模式的Android手机;

请确认是否adb已经联接上你的手机;如果adb连接失败,则会导致截图与拉取截图失败,提示“find myPos,

fail”;如果连着多个Android设备的话,最好关到只有一个;

打开开发者选项,找到“USB调试(安全设置)允许通过USB调试修改权限或者模拟点击”(在mui上是这样的,在其他手机上,应该也是差不多这样)这个开关,打开它;如果这个权限没有授予,则不能正常触发弹跳;

修改com.skyline.wxjumphack.Hack中ADB_PATH,将其改为你自己的ADB位置;

打开微信,打开跳一跳游戏,并点击开始;

运行程序(Hack.java中的main方法)吧,骚年,观察它自动跳动;

四. 温馨提示

有些同学反馈,程序报错,提示找不到文件或者“find myPos,

fail”。请确认是否adb已经联接上你的手机;如果adb连接失败,则会导致截图与拉取截图失败。

有些同学反馈,位置都计算出来了,但是没有触发弹跳。打开开发者选项,找到“USB调试(安全设置)允许通过USB调试修改权限或者模拟点击”(在mui上是这样的,在其他手机上,应该也是差不多这样)这个开关,打开它。

这个小游戏,后来腾讯好像加了一些干扰的动效,会干扰位置计算。后期可以优化。

因为我总共才花了3小时去破解,主要的时间都花了前期的识别算法的优化上。代码中,还有很多魔法值什么的,代码也比较乱。如果要阅读的话,还请见谅。

有同学反馈,跳几步就掉下去了。主要原因是弹跳系数的问题,我是根据我的自己的手机(1080p分辨率)来调试的。如果你的手机分辨率,不是1080p,则需要修改弹跳系数(JUMP_RATIO)。

至于位置计算的准确性,请运行MyPosFinder.java与NextCenterFinder.java中的main方法,观察生成文件,查看标记的位置是否正确。

作者:就不告诉你

文章来源:知乎

原文:https://zhuanlan.zhihu.com/p/32595233?

更多Java学习干货,Java学习捷径:http://www.zparkedu.com/

你可能感兴趣的:(Java 破解腾讯微信跳一跳(几乎每次命中中心点,目前最高 19844 分))