本文主要是介绍程序员就是这么皮,逆向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
这篇关于程序员就是这么皮,逆向Google maps snake游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!