r3:0 異世界網站挑戰攻略與心得


Posted by i90681472a on 2021-06-21

  • 起始點

  • 第零關
    簡單說明遊戲背景,跟複習周的 HTTP Challenge 有所關聯,講解後續一樣用 /lv1.php?token=xxx 的方式來破關,提示則是用 /lv1.php?hint=help 的方式。

  • 第一關
    要把 100101001001100001110 二進位制轉成十八進位制,我原先找到這個網站,結果他給我的答案是錯的,所以我又找了另一個網站,得到的答案把大寫改成小寫就對了。

  • 第二關
    尋找畫面裡的怪物,那就是藏在 html 和 CSS 的程式碼囉,就會看到有一行 <div class="hidden"> {divsurprise} </div> 把 class 的 CSS 取消掉,就會看到它顯現在畫面上。
    lv2

  • 第三關
    好樣的,又一個潛藏在裡面的怪物,再看一次程式碼,這次藏的地方是在註解的位置 <!-- {commentfaker} -->
    lv3

  • 第四關
    遭遇替身攻擊,複製最底下紅字大括號內的文字,會得到 csspersona!,繼續前往下一關。
    lv4

  • 第五關
    我死了嗎?網址轉到第六關,細看 lv5.js,只有一行 window.location='./lv6.php?token=fail';,沒有其他東西,找第五關提示,得到的是 javascript 出了什麼事了
    在看了兩篇攻略文:關於我逃出胡立的異世界 R30 這件事之攻略包r3:0 異世界網站挑戰- 破關紀錄之後才知道,在要跳轉頁面的當下按下 Esc,就能看到畫面出現 {windowhack} 的 token。
    那這樣我就得懷疑是我之前擷取 html 沒有注意到... 我的蠢方法是一按下網址就點網址列左邊的 X 讓它停止載入,應該也是看的到,只是我沒注意到(暈倒)。

  • 第六關

  • 解法一:
    解出檔案裡面顏文字的秘密,或找到 window 裡面隱藏的 token 資訊。,因為上一題卡了很久,所以有查到可以在 console 下 window 的指令,看到整個 window 的資訊,再搜尋 token 找到 __IamToken: "emojicute" 這行。
  • 解法二:
    lv6.js 會看到底下一長串的 emoji,把開頭拿去查詢,可以找到第一個 decode 的網站,接著把那段複製貼上,得到 window.__IamToken = "emojicute",一樣可以得到 token,原因在這篇有解釋。
    lv6

  • 第七關
    檢查,看 Network 裡面對這個網址的 Request Headers,找到一行 Cookie:TokenIsMe={cookieyumyum}
    lv7

  • 第八關
    檢查,看 Network 裡面對這個網址的 Request Headers,找到一行 TokenIsMe:{headshot}
    lv8

  • 第九關
    看 HTML 會看到以下的註解:

    <!-- secret logic
    function isTokenValid($token) {
      if (strlen($token) !== 8) return false;
      for($i = 1; $i <= 7; $i+=2) {
        if ((ord($token[$i]) * ord($token[$i - 1])) % $i !== 0) {
          return false;
        }
      }
      return true;
    }
    -->
    

    翻找 ASCII 碼表,隨便帶進去只要符合:

  1. token 是八位
  2. 每個偶數位的 ASCII 十進位與前一位 ASCII 十進位相乘,除以該偶數位的位置 - 1,要整除
    就是答案啦,像我就用 AABBFFFF
  • 第十關
    這之後就不能再只用 dev tool 解題啦,所以是換 node.js 上場的時候。
    從 dev tool 的 Network 可以找到一個 https://r30-api.herokuapp.com/api.php 的網址,以這個網址為 url 向它傳送 post request 得到 {"token":["sosdan"]}
    api
    js.post

  • 第十一關
    系統要我們到新聞版去看看,在那裏的管理者登入介面,實際上登入按鈕是沒有效的XD,從 Network 去看 news.js 的內容,會看到有一行 fetch(`./news_api.php?id=${id}`) 那就是我們要發 request 的 url。
    在 request 這條網址的後面,要加上 id=888888 因為被鎖的那篇公告 id 就是 888888。看要用 node.js 發 GET 或是直接網址用 query string 的方式,都可以得到 token 的訊息 能看到這則留言的你,想必就是天選之人吧! {fakeituntilyoumakeit} 拯救這個世界吧!
    news

  • 第十二關
    打開 dev tool 看這個網址的 response,就會看到 Set-Cookie:token=do_you_really_know_how_to_set_cookie?; Comment=real_token_is:{you_are_cookie_master}
    cookieshot

  • 第十三關
    猜數字,原本我有打算用 node.js 跑 request 但會遇到不同步的問題,所以作罷,最後就純粹猜數字,用 https://r30challenge.herokuapp.com/lv14.php?token= 後面接四位數字去猜,正常大概會是 200ms 左右,1A 時間會拉長成 1 秒多,2A 就再往上加,從 4 碼同一個數字開始把答案的四個數字抓出來,分別是 1 3 5 7,接著就是排列組合去測,測到 5371 就進入下一關。

  • 第十四關
    跟時間賽跑!!!!! 打開 dev tool 會看到以下的東西:

    <!-- secret logic
    function isTokenValid($token) {
      $h = date('H');
      $m = date('i'); 
      $a = $h * $m + 42;
      $count = 0;
      for($i = 0; $i < 8; $i++) {
        $count += ord($token[$i]) - 65;
      }
      if ($count <= 100) {
        return false;
      }
      return $a % $count === 0;
    }
    -->
    

    與第九關一樣,只要符合條件就可以通過,只是這次有時間壓力,我會建議用比現在時間晚一點點來做,比較不用追著時間跑,一直更改 token,這次的條件是:

  1. 你當下的時間(可以看畫面中給的數字鐘),小時 * 分鐘 + 42 作為被除數
  2. token 一樣是 8 碼,只是 8 碼的 ASCII 十進位值,要至少大於 620。
  3. token 的每一碼取 ASCII 十進位值減去 65 後加總,作為除數。
  4. 只要這項除法可以被整除,就可以全破了!
    lv14
  • 第十五關--完結
    lv15

心得

整體來說,維持第五周複習周 http challenge 的調性與有趣,整合第 6~9 周學習到與 request, cookie, php 等內容,而且又加上了一些動態變化的 token 而不再只有單一解答,讓整個遊玩過程的豐富度提升了一些。
最令我驚豔的就屬第六關的 emoji 、第十一關的新聞版以及第十四關的時間賽跑,原來 emoji 本身也是可以作為密碼的一種,沒想到用來傳達自己當下情緒的 emoji 竟然還能轉換成文字;新聞版那個網頁做的超級有模有樣的,我一瞬間還以為我在逛 ptt,就像是一個 ptt 的超陽春版,但基本的樣子都有了,超酷;時間賽跑這個則是一邊想符合的密碼有什麼,一邊還要看自己選的時間是不是過了,壓力好大XD
總的來說,我認為這次的解謎比起上一次有更大的進展,令我很好奇,當這堂課結束,我們會碰到什麼樣的解謎遊戲呢~


#Lidemy #r3:0







Related Posts

學習 Git - 有些檔案想被 Git 忽略

學習 Git - 有些檔案想被 Git 忽略

什麼是盒模型(box modal)?

什麼是盒模型(box modal)?

[FE301] React 基礎(Class component 版):React 環境建置

[FE301] React 基礎(Class component 版):React 環境建置


Comments