欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[翻译]谷歌贪吃蛇游戏的逆向研究

[翻译]谷歌贪吃蛇游戏的逆向研究

作者; Yaara Shriki,Roman Zaikin

有些人可能注意到今年的愚人节上,谷歌在IOS和安卓的谷歌地图上添加了一个贪吃蛇的小游戏。

我们的研究团队在研究最新安全威胁外,也沉迷在这个小游戏中,在不断的Game Over之后我们开始思考——能否修改游戏来获得胜利~

所以我们当中有人决定逆向分析一下APP,简单来说他们很快就取得了成功——既永远不会死亡,又弄出了一个简单的AI来自动进行游戏。

在这篇文章中,我们会具体讲解下实现的过程:

首先我们在Genymotion虚拟机中运行APP,然后找到位于菜单右上方的贪吃蛇游戏。

初步来看游戏是通过WebView渲染的,所以我们通过Chrome开发者工具来远程调试它

然后我们跳转到网页中发现只有sources标签中的一个名为v18.js的交互Javascript文件。仔细研究这个文件,我们发现了一些有趣的函数。

首先是函数fa(),表明地图共有20*20个格子

this.height = this.width = 20;

我们的主要目标是找到并修改判断我们撞到墙或者吃掉自己的游戏失败的函数,从而使我们不会Game Over。正如我们之前看到的一样,width和height变量对应了游戏地图的大小,所以我们搜索源码中的width和height可以看到F(a,b)函数

F(a,b)函数看起来是用于判断我们贪吃蛇的身体是否在地图内的,一个思路是移除判断条件使得返回值永远是真,从而让我们穿过墙也不会死亡。

要验证这个思路,我们首先将控制台中的F(a,b)函数修改成如下:

现在玩游戏的时候穿过墙旧不会死亡了。

上帝模式效果

尽管这里已经解决了游戏失败的问题,但我们还需要考虑下怎么玩游戏的时候顺便得分,所以逆向分析调用栈,可以看到多次调用了函数wa(a),如果我们仔细看下这个函数,可以看到它是个递归请求动画框架的函数。Wa(a)调用函数xa(a,b)和ya(a),渲染了游戏中的部件(地形和人物)以及地图。

来看一下xa(a,b)函数

可以看到它包含了两个参数a和b。a对应的全局变量Q包括了游戏的各种信息,比如表示地图大小的数组和地形M,人,地标K。这个函数也负责计算我们的得分并存储到c,i(对应Q,b)中。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功