<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Chrome 的小恐龍游戲,被我破解了...

          共 2239字,需瀏覽 5分鐘

           ·

          2021-01-23 10:22



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


          我迫不及待打開了對應(yīng)的網(wǎng)站,發(fā)現(xiàn)瀏覽器提示?No?internet,這才發(fā)現(xiàn)因為我的動作太過于行云流水,電腦還沒來得及連上 wifi?
          Fine,那就等 wifi 自己重連吧,等待的這段時間剛好回味一下 Chrome 自帶的這款小恐龍游戲。
          科普:Chrome 瀏覽器是 Google 家的官方瀏覽器,使用體驗全世界南波萬。當(dāng)用戶在無網(wǎng)絡(luò)時訪問某一網(wǎng)址,瀏覽器會提示“無網(wǎng)絡(luò)鏈接”(也就是上面這張圖),按下空格鍵,就會喚醒一個小恐龍跑步刷分的游戲。
          如果在有網(wǎng)絡(luò)連接時也想玩的話,可以直接在地址欄輸入:chrome://dino


          出于職業(yè)本身的敏感和好奇,我突然心生疑問:這應(yīng)該是用 JS 做的吧?
          我順勢打開控制臺,不如先看一下所有的全局變量?
          239?個...太多了,我可沒這個耐心
          我停止了操作,開始思考這一切的可行性:
          1. 我在干什么?嘗試自定義這個游戲
          2. 為什么要看全局變量?因為假設(shè)關(guān)于游戲的對象被暴露在了全局
          3. 如果沒暴露在全局?行,那我就放棄了(周末的早晨我可不想在 sources 里面扒源碼)
          也就是說,如果沒有在全局變量里找到那個對象,我就可以選擇性放棄了。


          再看一下上面這張圖,不難發(fā)現(xiàn),這?239?個全局變量,有很多都是老朋友了,name、history、location、onclick、onerror... 這些變量明顯和這只小恐龍沒啥關(guān)系,打印出來純粹是來充個數(shù),還浪費了我找目標(biāo)的時間,所以我遇到了第一個問題:如何快速找到由開發(fā)者自定義的全局變量?
          假如我有一個正常的 window...不對,不用假如,新開一個空窗口不就得了?在新打開窗口的控制臺,我得到了這樣的結(jié)果:
          也就是說,在這個恐龍快跑的小游戲里,Google 的前端工程師向 window 注入了 43 個全局變量(239-196)...
          怎么把這?196?個原生的全局變量拿過來呢?復(fù)制粘貼就太 low 了,讓我想想...
          在原有窗口的基礎(chǔ)上,再搞一個新窗口...這不就是 iframe 嗎!iframe 雖然沒有??window?,但是它有??contentWindow?,原則上來說,屬性差別應(yīng)該不大。所以現(xiàn)在只需要創(chuàng)建一個 iframe,拿它里面??contentWindow??的全局變量去過濾當(dāng)前??window??的全局變量,就可以篩選出那多余的?43?個嫌疑人了。
          于是我在控制臺敲出了下面這些代碼
          回車!
          誒,怎么是?45?個?比預(yù)期的多了?2?個,難道??window??里面還包含哪些??contentWindow??里面沒有的變量嗎?于是我把相同的代碼拿去 url 為?about:blank?的窗口下執(zhí)行了一遍,發(fā)現(xiàn)了罪魁禍?zhǔn)祝?/span>
          哦...原來是我給 Chrome 安裝的 React 開發(fā)者工具干的好事...忽略!
          我打開了先前檢索到的?45(43+2) 個多余全局變量,大致掃了一眼,很快就發(fā)現(xiàn)了一個很可疑的選手:
          Runner?,不就是這個一直在跑步的小恐龍嗎
          看看它是個什么貨色,無腦??typeof??一下:
          emmm居然是函數(shù),哦?函數(shù),首字母還大寫,這熟悉的味道,這不就是個構(gòu)造函數(shù)嗎!正所謂,構(gòu)造函數(shù)的寶藏都在??prototype??里,在觀察了一遍這個寶藏之后,我發(fā)現(xiàn)了一個名為??gameOver??的方法,
          這個函數(shù)名,難不成它就是那個讓小恐龍去死的方法?既然這樣,呵,我反手就把它用空函數(shù)覆蓋了。于是...
          真的是...
          然后我又發(fā)現(xiàn)了另一個有趣的方法:
          顧名思義,這是用來給小恐龍設(shè)置奔跑速度的方法,但是怎么調(diào)用呢?由構(gòu)造函數(shù)創(chuàng)建的實例對象,可通過原型鏈訪問構(gòu)造函數(shù) prototype?上的變量和方法,也就是說,如果能找到這個小恐龍對應(yīng)的實例,那么就能直接調(diào)用這個??setSpeed??方法了。既然 Google 的前端工程師已經(jīng)把這么多變量搞到全局了,那么...會不會也在全局存儲了這個小恐龍實例?我重新審視了一遍那 43 個多出來的全局變量,并沒有找到。我下意識地隨手輸入了一下這個??Runner??構(gòu)造函數(shù),真是山重水復(fù)疑無路柳暗花明又一村吶:
          我甚至都不需要看??Runner??函數(shù)的全部代碼,就知道原來實例被保存在一個名叫??instance_??的??Runner??自身屬性里,論起好變量名的重要性,行,那我就不客氣了,直接調(diào)用!
          于是...
          當(dāng)我凝視著這個飛奔的無敵小恐龍時,我突然覺得...一切變得...

          良許個人微信


          添加良許個人微信即送3套程序員必讀資料


          → 精選技術(shù)資料共享

          → 高手如云交流社群





          本公眾號全部博文已整理成一個目錄,請在公眾號里回復(fù)「m」獲??!

          推薦閱讀:

          微軟發(fā)布免費的文件恢復(fù)工具

          三分鐘構(gòu)建自動化運維平臺-nightingale(夜鶯)

          用 Linux 讓舊 MacBook 重獲新生


          5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機,樹莓派,等等。在公眾號內(nèi)回復(fù)「1024」,即可免費獲?。?!


          瀏覽 41
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免看一级a毛片一片成人不卡 | 亚洲无码视频日本 | 日批在线免费看网站 | 亚洲黄色性爱电影 | 成人做爱视频免费看 |