一个阳光明媚的周末,透光的窗帘把我从睡梦中叫醒,大脑说今天是周六,可以慵懒个一上午,于是开心地打开我的 Mac 准备看两集Rick and Morty再起床洗漱。

我迫不及待打开了对应的网站,发现浏览器提示 No internet,这才发现因为我的动作太过于行云流水,电脑还没来得及连上 wifi 

Fine,那就等 wifi 自己重连吧,等待的这段时间刚好回味一下 Chrome 自带的这款小恐龙游戏。

科普:Chrome 浏览器是 Google 家的官方浏览器,使用体验全世界南波万。当用户在无网络时访问某一网址,浏览器会提示“无网络链接”(也就是上面这张图),按下空格键,就会唤醒一个小恐龙跑步刷分的游戏。

如果在有网络连接时也想玩的话,可以直接在地址栏输入:chrome://dino

出于职业本身的敏感和好奇,我突然心生疑问:这应该是用 JS 做的吧?

我顺势打开控制台,不如先看一下所有的全局变量?

239 个...太多了,我可没这个耐心

我停止了操作,开始思考这一切的可行性:

  1. 我在干什么?尝试自定义这个游戏

  2. 为什么要看全局变量?因为假设关于游戏的对象被暴露在了全局

  3. 如果没暴露在全局?行,那我就放弃了(周末的早晨我可不想在 sources 里面扒源码)

也就是说,如果没有在全局变量里找到那个对象,我就可以选择性放弃了。

再看一下上面这张图,不难发现,这 239 个全局变量,有很多都是老朋友了,name、history、location、onclick、onerror... 这些变量明显和这只小恐龙没啥关系,打印出来纯粹是来充个数,还浪费了我找目标的时间,所以我遇到了第一个问题:如何快速找到由开发者自定义的全局变量?

假如我有一个正常的 window...不对,不用假如,新开一个空窗口不就得了 在新打开窗口的控制台,我得到了这样的结果:

也就是说,在这个恐龙快跑的小游戏里,Google 的前端工程师向 window 注入了 43 个全局变量(239-196)...

怎么把这 196 个原生的全局变量拿过来呢?复制粘贴就太 low 了,让我想想...

在原有窗口的基础上,再搞一个新窗口...这不就是 iframe 吗!iframe 虽然没有  window ,但是它有  contentWindow ,原则上来说,属性差别应该不大。所以现在只需要创建一个 iframe,拿它里面  contentWindow  的全局变量去过滤当前  window  的全局变量,就可以筛选出那多余的 43 个嫌疑人了。

于是我在控制台敲出了下面这些代码

回车!

诶,怎么是 45 个?比预期的多了 2 个,难道  window  里面还包含哪些  contentWindow  里面没有的变量吗?于是我把相同的代码拿去 url 为 about:blank 的窗口下执行了一遍,发现了罪魁祸首:

哦...原来是我给 Chrome 安装的 React 开发者工具干的好事...忽略!

我打开了先前检索到的 45(43+2) 个多余全局变量,大致扫了一眼,很快就发现了一个很可疑的选手:

Runner ,不就是这个一直在跑步的小恐龙吗

看看它是个什么货色,无脑  typeof  一下:

emmm居然是函数,哦?函数,首字母还大写,这熟悉的味道,这不就是个构造函数吗!正所谓,构造函数的宝藏都在  prototype  里,在观察了一遍这个宝藏之后,我发现了一个名为  gameOver  的方法,

这个函数名,难不成它就是那个让小恐龙去死的方法?既然这样,呵,我反手就把它用空函数覆盖了。于是...

真的是...

然后我又发现了另一个有趣的方法:

顾名思义,这是用来给小恐龙设置奔跑速度的方法,但是怎么调用呢?由构造函数创建的实例对象,可通过原型链访问构造函数 prototype 上的变量和方法,也就是说,如果能找到这个小恐龙对应的实例,那么就能直接调用这个  setSpeed  方法了。既然 Google 的前端工程师已经把这么多变量搞到全局了,那么...会不会也在全局存储了这个小恐龙实例?我重新审视了一遍那 43 个多出来的全局变量,并没有找到。我下意识地随手输入了一下这个  Runner  构造函数,真是山重水复疑无路柳暗花明又一村呐:

我甚至都不需要看  Runner  函数的全部代码,就知道原来实例被保存在一个名叫  instance_  的  Runner  自身属性里,论起好变量名的重要性,行,那我就不客气了,直接调用!

于是...

当我凝视着这个飞奔的无敌小恐龙时,我突然觉得...一切变得...

Chrome 的小恐龙游戏,被我破解了...相关推荐

  1. Chrome 的小恐龙游戏,被破解了...

    一个阳光明媚的周末,透光的窗帘把我从睡梦中叫醒,大脑说今天是周六,可以慵懒个一上午,于是开心地打开我的 Mac 准备看两集 Rick and Morty 再起床洗漱. 我迫不及待打开了对应的网站,发现 ...

  2. 【MM32F5270开发板试用】移植Google Chrome小恐龙游戏到MM32F5270

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:曾是一颗薏米 一.项目背景 在几年前,Google 给 Chrome 浏览器加了一个有趣的 ...

  3. 小恐龙游戏python_补一波之前说好的用DQN自动玩Chrome浏览器的小恐龙游戏呗~

    原文链接补一波之前说好的用DQN自动玩Chrome浏览器的小恐龙游戏呗~​mp.weixin.qq.com 效果展示 在cmd窗口运行如下命令即可: 模型训练: python TRexRush.py ...

  4. python实现图片找不同游戏_用Python实现谷歌的小恐龙游戏

    (给Python开发者加星标,提升Python技能) 来源: Charles的皮卡丘-白露未晞me理 谷歌流量器中有个很有名的彩蛋:当你网络出现问题时,就会出现一个"小恐龙游戏". ...

  5. chrome谷歌小恐龙作弊代码【无敌,快跑,高跳,一键满分】有需要的小伙伴快快看过来!

    谷歌小恐龙游戏是浏览器自带的,断网时候可以玩,当然联网状态也是可以玩的. 那么如何在联网的状态下进行游戏呢? 打开chrome, Ctrl + T 新建标签页,Alt + D或者Ctrl + L 定位 ...

  6. Java 独门绝技 用Java玩谷歌小恐龙游戏 (有源码)

    目录 1.Swing成品演示 2.简介 3.Java的Robot类 4.实战开发例子 1.Swing成品演示 2.简介 Java有一个很厉害的类Robot类,这个类可以模仿人的手去操作电脑,鼠标移动, ...

  7. java小恐龙游戏_用Python实现谷歌的小恐龙游戏

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 谷歌流量器中有个很有名的彩蛋:当你网络出现问题时,就会出现一个"小恐龙游戏&quo ...

  8. python画恐龙_教你用Python实现谷歌的小恐龙游戏

    谷歌流量器中有个很有名的彩蛋:当你网络出现问题时,就会出现一个"小恐龙游戏". (如果想要直接进行游戏,可以在地址栏输入:chrome://dino ) 今天我们就来给大家演示下, ...

  9. 小恐龙快跑,不要被逮到拉~ python制作小恐龙游戏

    前言 嗨喽~大家好呀,这里是魔王呐 ! 这个小恐龙熟悉叭,相信你在摸鱼得时候玩过它~ 这是谷歌流量器中很有名的彩蛋:当你网络出现问题时,就会出现一个"小恐龙游戏". 当然你如果想要 ...

最新文章

  1. 面试集——redis
  2. spring aop 应用实例
  3. linux 卸载kde,Ubuntu KDE终端系统安装与卸载
  4. 20135337朱荟潼——实验三
  5. JUC原子类-数组类型(三)
  6. mysql数据库分隔符_MySQL对分隔符的处理(一)
  7. mysql锁表查询_Mysql upate 更新锁表还是锁行测试
  8. python实现GBDT算法的回归、二分类以及多分类,算法流程解读并可视化
  9. Linux 常用解压缩命令
  10. Stroustrup 谈 C++ 11的新特性
  11. 不使用随机数的洗牌算法
  12. 科大讯飞 离线语音识别python_用Python来使用科大讯飞语音识别,so easy
  13. 串口数据接收、发送与USB转串口驱动下载
  14. 计算机强制关机后桌面图标不见了,强制关机后桌面上的图标全不见了怎么办
  15. 达州中学高考2021成绩查询,2020达州高考成绩揭晓,恭喜恭喜!另附成绩统计表...
  16. 【C++】(一)C++入门第一课
  17. 证券从业考试科目如何备考?出题方式是什么?
  18. 知+付费推广:我花3W烧出来的投放经验
  19. 上海贝尔阿尔卡特移动通信系统有限公司
  20. 世界杯主题系列-用Scratch制作足球比赛小游戏,源码分享啦

热门文章

  1. creator 构建ios 项目 接入 google admob 横幅广告
  2. 超几何分布(Hypergeometric distribution)
  3. 解决在IE11浏览器上,css样式不起作用的问题
  4. wordpress模板安装- wordpress中文主题插件如何安装
  5. java前锋课件_篮球-精美课件-.ppt
  6. 利用For-Each循环进行遍历
  7. 业务 | 信贷模型中的评分卡
  8. SQL yog解除30天试用限制
  9. Unity Shader学习:Dissolve消融效果
  10. 金程教育是不是被RFP认证的正规培训机构?