程序员就是这么皮,逆向Google maps snake游戏

ang010ela 技术 2019年4月9日发布
Favorite收藏

导语:程序员就是这么皮,Check Point研究人员用远程调试方法对对Google Maps应用中的snake游戏应用进行了逆向破解。

为了庆祝愚人节,Google在Google Maps应用安卓版和IOS版本中加入了snake游戏。Check Point研究人员对该应用进行了逆向破解……你不知道的是逆向竟然使用的是远程调试的方法。

本文详细介绍远程调试进行逆向的全过程。

首先用Genymotion在虚拟设备中启动Google maps应用,然后进入snake游戏。

看起来该应用是基于WebView的,因此研究人员打开了chrome开发者攻击远程调试,如下图所示:

研究人员发现网站中sources tab中只有一个有趣的JS文件v18.js。进一步分析该文件研究人员发现了一些函数。

函数fa()的作用是开始一个面积为20×20的面板:

this.height = this.width = 20;

变量width和height分别表示游戏板的宽度和长度,因此研究人员在源码中搜索了width和height然后找到了如下函数F(a,b):

函数F(a, b)好像是检查snake的身体的坐标是否超过面板的限制。研究人员想要删除该函数中的条件使该函数返回的结果都是true,这样游戏就进入了无敌(无限)模式。

因此研究人员在远程console中输入了inspect,然后将F(a,b)函数修改为:

然后玩游戏就进入了无敌模式,界面如下图所示:

图1:无敌模式

但是研究人员的目的是对战赢取积分,因此进入下一步逆向:

通过逆向调用栈,研究人员发现有很多对函数wa(a)的调用。研究人员进一步分析该函数发现该函数的递归的,负责请求帧动画。Wa(a)调用函数xa(a, b)和ya(a)来生成生成组成游戏的小方块和面板。

函数xa(a, b)代码如下所示:

其中有2个参数是a和b。a是全部变量Q的一部分,含有表示游戏面板的数组,还可以看到train(M)火车,人和路标(K)。该函数还负责计算玩家得分并保存在c.i中,与Q.b的值相同。

图2:表示游戏界面的数组

表示的界面如下所示:

图3:游戏页

xa(a)会调用函数sa(a)(如图4),函数sa(a)负责当新的小人创建后来生成随机坐标。如果多次调用该函数,就会生成多个小人,如图5所示。

图4: 调用函数sa(a)

图5:调用的结果,创建了很多小人

虽然多次调用sa(a),也接到了很多人,但是研究人员发现分数并没有变。当火车接到乘客后,会调用函数ka(a,b)。因此还需要修改该函数来增加分数,并更新在屏幕上。

图6: 更新的函数

火车的每部分的坐标都在Q.b.o.b中,其中第一个元素表示火车的第一节车厢。

图7: 表示火车车厢的数组

研究人员创建了一个简单的AI算法,算法逻辑如下:

图8:AI逻辑

snake执行如下状态机:

· 当X=19时,继续向下直到Y=19;

· 当X=19且Y=19时间,继续向左直到X=0;

· 进入Z字形状态机:

a. 向上一次,然后向后,直到X=18;

b. 向下一次,然后向左,直到X=0

c. 返回步骤A.

· 当Y=0时,向后,直到X=19

· 回到步骤1

代码参见gihub地址:https://github.com/romanzaikin/Google_Maps_Snake_Hack

Demo视频如下:

参考视频:https://research.checkpoint.com/wp-content/uploads/2019/04/snake3.mp4

本文翻译自:https://research.checkpoint.com/reverse-engineering-the-google-maps-snake-game/如若转载,请注明原文地址: https://www.4hou.com/technology/17245.html
点赞 8
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论