前情提要
遊戲連結:r3:0 異世界網站挑戰
因為之前的關卡已經有人 寫過了 ,因此這篇就只寫最近更新的 11 ~ 15 關。
十一關
內容果然還是很中二 XDDD
用右鍵打開檢查後,發現有個 API 因為同源政策串接失敗,因此我們要避開瀏覽器,使用 Node.js 得到 API 。
const request = require('request');
request.post({uri:'https://glacial-everglades-11859.herokuapp.com/api.php'}, function(err, res, body) {
console.log(body);
})
執行後就可以得到 token 前往下一關了 XD
十二關
這吐槽意外的很精準啊 (?)
點開網址後會出現很像 PTT 風格的討論版,上面的「管理員登入」讓人卡好久,後來才發現他不是 submit 只是普通文字,超惡趣味 (?)
真正的機關在 .js 檔裡面:
id 不等於 888888 才會送出 request,那 id=888888 的那條訊息到底有甚麼呢?我們用 Node.js 發出 request 看看:
const request = require('request');
request('http://r30challenge.herokuapp.com/news_api.php?id=888888', function(err, res, body) {
console.log(body);
})
出現了!
能看到這則留言的你,想必就是天選之人吧! {fakeituntilyoumakeit} 拯救這個世界吧!
十三關
老實說我非常佩服主角堅持吐槽
點開瀏覽器的 Response Header ,會發現 Set-cookie 那攔寫 Set-Cookie: token=do_you_really_know_how_to_set_cookie?; Comment=real_token_is:{you_are_cookie_master}
輸入就可以破關了~
十四關
基本上就是變向的猜數字遊戲了,反應時間越長表示越接近標準答案。
十五關
從第二句看來,我們主角已經對異世界產生認同感ㄌ
不知道要做什麼的時候,只要打開 Devtool 就可以找到線索!果然 .php 檔中找到一段被隱藏的程式碼:
<!-- 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 有八個字。
- 這八個字的 ASCII 各自減掉 65 後相加等於
$count
,必須大於一百。 $a
是送出時間的小時(24 小時寫法)乘以分鐘再加上 42 ,必須可以整除$count
。
最後我設定在五分鐘後 16 點 35 送出,如此一來 $a 就等於 602 ,其大於一百的因數只有 301 。英文字母中 ASCII 最大的 z 是 122:
122 - 65 = 57
301 / 57 = 5.2(有五個 z)
301 % 57 = 16
剩下三個可以放 2 個 ASCII 為 73 的 I 和一個 65 的 A , 最後成功在時間內送出 ?token=zzzzzIIA
。
簡易破關心得
我還是回去當我的工程師好了(#
沒有啦,老實說我卡最久的是第十一關。一來是發現接下來的路沒有攻略可以偷看,二來是作賊心虛,看到 API 無論如何先害怕慌張一下,而且一直覺得 POST 應該就是要新增什麼東西,因此就算有 url 了,找不到要 POST 的東西又讓我更慌張,最後還是看到第十週心得偷偷去問 Nicolakacha 同學才解開,真的是十分感謝(合十)
這個系列都好有趣,滿足我市面上優質的免費解謎遊戲不夠的困擾,尤其這次完全透過螢幕感受到製作者的中二之力迎面而來 XD
如上面所說,我前十關偶爾會偷看別人的解答,是因為這幾關比較新才還沒有人製作攻略。不過完全靠自己解出來的關卡爽度就是不一樣,因此我也不是很確定這篇文章對其他人到底是好是壞,但總之我玩得很爽,希望能幫到你:)