中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

破解Chrome小恐龍游戲的示例分析

發布時間:2021-12-27 09:34:17 來源:億速云 閱讀:160 作者:柒染 欄目:大數據

今天就跟大家聊聊有關破解Chrome小恐龍游戲的示例分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一個陽光明媚的周末,透光的窗簾把我從睡夢中叫醒,大腦說今天是周六,可以慵懶個一上午,于是開心地打開我的 Mac 準備看兩集 Rick and Morty 再起床洗漱。

我迫不及待打開了對應的網站,發現瀏覽器提示 No internet,這才發現因為我的動作太過于行云流水,電腦還沒來得及連上 wifi 

破解Chrome小恐龍游戲的示例分析

Fine,那就等 wifi 自己重連吧,等待的這段時間剛好回味一下 Chrome 自帶的這款小恐龍游戲。

科普:Chrome 瀏覽器是 Google 家的官方瀏覽器,使用體驗全世界南波萬。當用戶在無網絡時訪問某一網址,瀏覽器會提示“無網絡鏈接”(也就是上面這張圖),按下空格鍵,就會喚醒一個小恐龍跑步刷分的游戲。

如果在有網絡連接時也想玩的話,可以直接在地址欄輸入:chrome://dino

出于職業本身的敏感和好奇,我突然心生疑問:這應該是用 JS 做的吧?

我順勢打開控制臺,不如先看一下所有的全局變量?

破解Chrome小恐龍游戲的示例分析

239 個...太多了,我可沒這個耐心

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

  1. 我在干什么? 嘗試自定義這個游戲
  2. 為什么要看全局變量? 因為假設關于游戲的對象被暴露在了全局
  3. 如果沒暴露在全局?行,那我就放棄了(周末的早晨我可不想在 sources 里面扒源碼)

也就是說,如果沒有在全局變量里找到那個對象,我就可以選擇性放棄了。

再看一下上面這張圖,不難發現,這 239 個全局變量,有很多都是老朋友了,name、history、location、onclick、onerror... 這些變量明顯和這只小恐龍沒啥關系,打印出來純粹是來充個數,還浪費了我找目標的時間,所以我遇到了第一個問題:如何快速找到由開發者自定義的全局變量?

假如我有一個正常的 window...不對,不用假如,新開一個空窗口不就得了 在新打開窗口的控制臺,我得到了這樣的結果:

破解Chrome小恐龍游戲的示例分析

也就是說,在這個恐龍快跑的小游戲里,Google 的前端工程師向 window 注入了 43 個全局變量(239-196)...

怎么把這 196 個原生的全局變量拿過來呢?復制粘貼就太 low 了,讓我想想...

在原有窗口的基礎上,再搞一個新窗口...這不就是 iframe 嗎!iframe 雖然沒有  window ,但是它有  contentWindow ,原則上來說,屬性差別應該不大。所以現在只需要創建一個 iframe,拿它里面  contentWindow  的全局變量去過濾當前  window  的全局變量,就可以篩選出那多余的 43 個嫌疑人了。

于是我在控制臺敲出了下面這些代碼

破解Chrome小恐龍游戲的示例分析

回車!

破解Chrome小恐龍游戲的示例分析

誒,怎么是 45 個?比預期的多了 2 個,難道  window  里面還包含哪些  contentWindow  里面沒有的變量嗎?于是我把相同的代碼拿去 url 為 about:blank 的窗口下執行了一遍,發現了罪魁禍首:

破解Chrome小恐龍游戲的示例分析

哦...原來是我給 Chrome 安裝的 React 開發者工具干的好事...忽略!

我打開了先前檢索到的 45(43+2) 個多余全局變量,大致掃了一眼,很快就發現了一個很可疑的選手:

破解Chrome小恐龍游戲的示例分析

Runner ,不就是這個一直在跑步的小恐龍嗎破解Chrome小恐龍游戲的示例分析

看看它是個什么貨色,無腦  typeof  一下:

破解Chrome小恐龍游戲的示例分析

emmm居然是函數,哦?函數,首字母還大寫,這熟悉的味道,這不就是個構造函數嗎!正所謂,構造函數的寶藏都在  prototype  里,在觀察了一遍這個寶藏之后,我發現了一個名為  gameOver  的方法,

破解Chrome小恐龍游戲的示例分析

這個函數名,難不成它就是那個讓小恐龍去死的方法?既然這樣,呵,我反手就把它用空函數覆蓋了。于是...

真的是...

然后我又發現了另一個有趣的方法:

破解Chrome小恐龍游戲的示例分析

顧名思義,這是用來給小恐龍設置奔跑速度的方法,但是怎么調用呢?由構造函數創建的實例對象,可通過原型鏈訪問構造函數 prototype 上的變量和方法,也就是說,如果能找到這個小恐龍對應的實例,那么就能直接調用這個  setSpeed  方法了。既然 Google 的前端工程師已經把這么多變量搞到全局了,那么...會不會也在全局存儲了這個小恐龍實例?我重新審視了一遍那 43 個多出來的全局變量,并沒有找到。我下意識地隨手輸入了一下這個  Runner  構造函數,真是山重水復疑無路柳暗花明又一村吶:

破解Chrome小恐龍游戲的示例分析

我甚至都不需要看  Runner  函數的全部代碼,就知道原來實例被保存在一個名叫  instance_  的  Runner  自身屬性里,論起好變量名的重要性,行,那我就不客氣了,直接調用!

破解Chrome小恐龍游戲的示例分析

于是...

當我凝視著這個飛奔的無敵小恐龍時,我突然覺得...一切變得...

看完上述內容,你們對破解Chrome小恐龍游戲的示例分析有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

余庆县| 邹平县| 襄垣县| 莱芜市| 弋阳县| 荆州市| 胶州市| 青海省| 绵阳市| 上杭县| 大理市| 利辛县| 福泉市| 南平市| 南江县| 靖州| 正阳县| 安塞县| 馆陶县| 鄢陵县| 梓潼县| 金沙县| 平果县| 阿瓦提县| 大连市| 奉新县| 勃利县| 白城市| 米脂县| 荥经县| 嘉荫县| 万荣县| 拜城县| 汝城县| 鄂托克旗| 彭水| 凌云县| 唐山市| 大关县| 多伦县| 双流县|