罗杰·帕特罗(Roger Patrol)登顶之旅

这是我第二次参加MozCon,今年我对这个主题感到非常兴奋。 在Mario时代长大,复古的游戏感觉确实带回了我。 当我看到在MozCon为Roger Patrol设置的街机柜时,我立即陷入了热恋!

在会议开始之前,我玩了一大堆,然后玩得很开心。 真的没有什么比在大型街机柜上玩游戏更有趣的了,令我惊讶的是Moz团队竟然为会议准备了完整的视频游戏。

后来,当人们开始进入主要会议区域开始讨论时,我在笔记本电脑上打开了Roger Patrol网站,令我高兴的是,我看到Moz团队也创建了Mac和PC版本的游戏! 我将不得不在一天结束时在我的酒店房间中播放更多这些内容。

那天晚上晚些时候……

我回到酒店房间,突然打开笔记本电脑,开始下载游戏。 在这样做的同时,我开始在网站上闲逛一些。 我看到可以从街机上兑换分数,这是将“离线游戏”连接到您的Moz帐户以进入排行榜的一种有趣方式。 只是为了好玩,我用随机代码提交了表单,以查看会发生什么。

那让我开始思考。 嗯,街机柜必须在游戏完成兑换后将代码发送到服务器,以便以后兑换(一旦用户从计算机登录其Moz帐户)。

我想知道是否有一种方法可以直接提交分数,就像它来自机器一样?

实验中

我一直很好奇,非常喜欢解决问题。 我喜欢挑战,每当我专注于解决问题时,其他所有事物似乎都会淡出背景。 我继续将应用程序下载到我的Macbook中,随着时间的流逝,它渐渐消失了。 它连接到我的Moz帐户,然后我继续玩了几轮。 太酷了,游戏结束后,似乎可以将比分直接发布到网站的整体排行榜上。

我想看看笔记本电脑在游戏之前,期间和之后与游戏服务器之间进行了何种通信,因此我在笔记本电脑上启动了一个名为nettop的程序,并在加载游戏时观看了该程序。一轮,并在一轮完成后。 我看到了几个要点,似乎在向游戏服务器打电话。

然后一个主意打了我…

如果在发布分数时我能够截取通讯,将分数编辑为我想要的东西,然后将消息传递给服务器,就好像它来自游戏一样怎么办?

近距离观察

我想仔细看一下,所以我加载了一个名为mitmproxy的工具,以查看可以找到的内容。 该应用程序实质上侦听通信,允许您查看和修改它们,然后将其传递。 当应用程序通过cookie登录我,检索我的Moz帐户信息,对游戏服务器执行ping操作,检索高分等时,我来回地看着聊天。

然后,我将该工具设置为在它发送通讯之前暂停,这样我就可以查看是否可以修改分数。

就像更改发送的分数一样简单吗?

只有一种方法可以找出答案。

我加载了一个新游戏,累积了几分,然后点击“游戏结束”屏幕。 《冰雪奇缘》 …我重新启动了游戏,再次尝试了游戏,《冰雪奇缘》再次出现……不幸的是,每当游戏进入“游戏结束”屏幕以触发游戏结果时,它就会锁定。 ( 我假设它不想连接到我的代理服务器的ssl证书,但此时我仍然不是100%为什么这样做 )。

mm

换档

我确实注意到的一件事是,在请求的标题中,这似乎表明该游戏是在Unity中构建的。

过去有一些Unity经验,这给了我另一个主意…

如果我可以拆卸游戏以查看分数的确切交流方式该怎么办? 如果可以看到,我可以手动将该消息放在一起,然后将其发送到游戏本身之外。

为了使游戏更加有趣,我解压缩了应用程序,以便可以查看文件。 我能够找到我想要的游戏文件,从而控制了游戏的逻辑。 但是,当我发现路障时,我的喜悦立刻被平息了。

我仔细研究了代码,发现不仅游戏发送了分数,而且还发送了游戏本身的使用统计信息:

  • 摧毁了多少颗小行星
  • 有多少敌人被杀死
  • 射击了多少枚导弹
  • 等等…

即使我具有所需消息的整个结构,也无法发送正确的数据来构成与给定分数相对应的完整游戏……我将不得不想出另一种方法。

会有更好的方法

我去自助餐桌吃午餐时,让问题浮现在脑海。 我坐在一张桌子旁,试图在吃东西时全神贯注。 当我整理完并喝了一口我的可口可乐时,尤里卡的时刻像马克卡车一样打在我身上。 我这一切都是错的

与其尝试仅发送伪造的游戏数据, 不如发送真实数据怎么办? 如果我更改游戏以使其更易于玩,这将使我获得更高的分数,然后在发送游戏状态时,它将发送游戏本身的真实结果怎么办?

我打开了一个反编译器,并寻找一种修改游戏的方法。 我遇到了一个与播放器相关的函数HandleCollision(),它看起来像是进行修改的理想位置。 本质上,该功能检查敌人的飞船,激光或小行星是否与玩家的飞船相撞(您可能会丢失的三种方式)。 如果我可以修改此功能以实质上使我的飞船无敌,那么我将能够在关卡中进行任意测试。

该游戏寻找名为:

  • 敌人
  • 激光
  • 小行星

我改为:

  • 非敌人
  • 公证人
  • 非小行星

这样就永远不会满足碰撞的条件。

我修补了游戏文件,重新打包了应用程序,并加载了它。 随着我的脉搏赛车,手指交叉,我进入了比赛并开始四处飞行。 激光击中了船的侧面,没有造成伤害,我反弹了一颗小行星,撞上了敌舰,再也没有! 当我飞越该区域,炸毁视线中的所有物体时,我感到无比欢乐。

终于有了突破!

我查看了排行榜,并试图将得分排在前5名中作为测试。 我打了电话,然后……慢慢地..意识到了……

那么,我应该如何结束这件事以获取分数?

好了,回到绘图板上……(建造,运送,学习,决定-对吗,Ross Simmonds?)我被如此激动的兴奋所吸引,以至于我在那个小细节上完全隔开了(没有双关语)。 我再次拉开反编译器,重新打好补丁,使小行星实际上可以杀死我(但敌舰无法杀害我),然后重新打包所有东西。

关键时刻

再次,我开始飞越关卡,敌人炸开,小行星崩溃,当我达到想要的比分时,我直接自杀成了小行星。 当我看到经典的“游戏结束”文字在屏幕上弹出时,又一次肾上腺素激增袭来。 就是这样-关键时刻。 我打开网站,发现我确实出现在排行榜上! 在我的脑海中,我在肺部的顶部大叫一声,但是从演讲厅外面,一切都很平静。

我从走廊的地板上站起来,收起笔记本电脑,然后走进去。 令我高兴的是,里面的记分牌是现场的,并且有刚提交的分数! LukeSkyRgr的所有辉煌成就

我迫不及待地想玩更多游戏,但需要休息一下以解压缩,从高位下降下来,并对即将开始的会谈做更多记录。 这是非常有趣和令人兴奋的,但毕竟,我一直到西雅图向演讲者学习,而不是玩视频游戏。 我搁置了一会儿,然后将注意力重新集中在会议的主要部分上。

排行榜加速

第二天,事情变得很有趣。 我在排行榜上曾进行过激烈的比赛,我会发布一个比分,然后,我看到它又被击败了,来回了。 一整天,比赛真的很热。

一天快结束时,在下午的会议上,我决定提高一个分数,并发布超过100万的分数(当时,如果我没记错的话,最高分数约为60万。)与会者,并在下午晚些时候进入走廊。 我在走廊上找到了一个舒适的地方,然后再次打开笔记本电脑,开始工作。

休息时间结束时,我累积了一些严重的分数,并意外地将我想要的分数提高了100,000以上,但事实确实如此-突破了100万!

我关上笔记本电脑,急切地回到房间,检查进来的排行榜。 在板上! 得分1,148,10…天哪! 它切断了分数的最后一位! 我猜他们没想到分数会超过7位。 显然,也没有其他人参加。 当人们开始在下一次谈话开始之前返回时,我开始看到一些推特消息流入: