3

即刻寻找果果活动技术向剧透收集

 2 years ago
source link: https://geofftools.cn/blog/jike-gone-cat-review/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

即刻在2020年6月10号上午回归了,回归还做了一个特别有意思的活动,寻找果果。活动本身的解谜即友都有做汇总,技术上很多即友也发现了可以剧透的内容,这里做一个收集。本文需要一点点基本的前端知识,算是另一个视角下的解谜。

第零天:预览关卡内容

第零天,官方发布了一张污损的海报预告有一个大型解谜活动,通过补全二维码可以获得活动入口。

https://h5.codefuture.top/hybrid-gone-cat

由于活动于第一天开始,所以无法进入活动,甚至因为界面设置问题无法看到规则。

通过浏览页面JS可以发现这样一些代码:

// 代码段一
baseURL: W ? "/proxy" : "https://meow.codefuture.top/api",
withCredentials: !0,
headers: {
Accept: "application/json",
"Content-Type": "application/json"
}
// 代码段二
list: function(e, t) {
return regeneratorRuntime.async((function(n) {
while (1)
switch (n.prev = n.next) {
case 0:
return n.abrupt("return", $("/chapters/list", {
skip: e,
limit: t
}));
case 1:
case "end":
return n.stop()
}
}
))
}
// 代码段三
setPollingData: function(e, t) {
e.cats.data = t.data,
e.cats.currentIndex = t.currentIndex
}
// 代码段四
var t = JSON.parse(localStorage.getItem("gone-cat-intro") || "false");
if (t && 0 !== e.currentIndex) {
if (void 0 === e.currentIndex)
return void H.replace("/prev");
if (6 !== e.currentIndex)
return void H.replace("/ch/".concat(e.currentIndex));
H.replace("/final6")
} else
0 !== e.currentIndex && (H.replace("/intro"),
localStorage.setItem("gone-cat-intro", "true"))

通过代码段四可以分析出通过currentIndex判断页面,通过代码段二、三可以发现该值通过/chapters/list获取,通过代码段一可以获得完整的地址https://meow.codefuture.top/api/chapters/list

虽然当时返回的是空值,但通过代码段三可以大致猜测一下返回值的结构,应该类似:

{"data":[{"index":6,"feeds":[{"content":"content"}]}],"currentIndex":6}

通过伪造返回值,将这段数据返回给网页,就可以在第零天预览规则和全部关卡的美工。

具体关卡的内容就需要等待上线后后端服务器在content字段中返回。这段数据可以获得这样一个界面:伪造数据预览

第一天:获得两个彩蛋

第一天通过宠语翻译器可以进入第一个彩蛋,网址为:

https://h5.codefuture.top/hybrid-gone-cat-eggs/translator-egg.html

在这个网站的头部,可以看到有由于失误加入的其他代码。

<link as="style" href="https://static.codefuture.top/hybrid-gone-cat-eggsstatic/css/calendar-egg.132d081f1832e4ca3ac6.css" rel="preload">
<link as="style" href="https://static.codefuture.top/hybrid-gone-cat-eggsstatic/css/translator-egg.b14590d3779db1625490.css" rel="preload">
<link as="script" href="https://static.codefuture.top/hybrid-gone-cat-eggsstatic/js/calendar-egg.8fee2dc09008986e5c9f.js" rel="preload">
<link as="script" href="https://static.codefuture.top/hybrid-gone-cat-eggsstatic/js/translator-egg.5f9b4347afea071ef8c4.js" rel="preload">

所以可以猜到第二个彩蛋和calendar有关,虽然这些文件存在错误,但是通过第一个彩蛋js和css正确的网址可以拼接出第二个彩蛋的js和css文件。

伪造第二个彩蛋

于是可以通过第二个彩蛋的css文件找到第二个彩蛋的猫图:

https://static.codefuture.top/hybrid-gone-cat-eggs/static/image/calendar-egg.png

通过将第二个彩蛋的css当成第一个彩蛋的css返回,将页面中的一改成二,就可以伪造出第二个彩蛋的页面。当然,如果第二个彩蛋的提示更改了那也是没办法的事情。

获取彩蛋网址

在第二个彩蛋的js中,可以找到这样的代码:

i.default.updateShareInfo({
title: "GoneCat解谜日历",
desc: "我在GoneCat解谜日历寻找线索,帮帮忙!",
imgUrl: "https://static.codefuture.top/hybrid-decrypt-calendar/img/home-center.c10e5681.png",
link: location.href
})

结合第一天翻译器及彩蛋页面的域名:

https://h5.codefuture.top/hybrid-cat-translator
https://h5.codefuture.top/hybrid-gone-cat-eggs/translator-egg.html

不难猜出第二天的活动页面及彩蛋域名:

https://h5.codefuture.top/hybrid-decrypt-calendar
https://h5.codefuture.top/hybrid-gone-cat-eggs/calendar-egg.html

不过第一天的时候这两个页面由于时间没到没有开,会返回403。

但在第二天活动没开始之前页面就可以访问了,并且和伪造的第二个彩蛋没有区别。

第三天:提前进入回归页面

对于重要的内容和文件一般都会有个提醒和监控,具体实现可能不一样,用着习惯就好。

第零天由于没有预告几点开始活动,当时是监控这个网址的返回值变化做的活动开启提醒:

https://meow.codefuture.top/api/chapters/list

通过监控主活动页面的JS,可以发现final的JS有更新一开始内容为:

var g = ["喵~喵~喵呜呜呜~", "汪~汪~汪汪", "吱~吱吱", "喵~喵呜呜~"],

后来更新为:

var g = ["喵~喵~喵呜呜呜~"]

第一天就把这一段内容在翻译器中试过,所以活动的时候也没想到这就是最终线索。

但回头回顾这个活动,翻译器返回值每天都更新,第三天翻译器返回值有更新也在情理之中。

也不知道这个返回值是南北大战活动结束更新还是定时更新。

即刻的后端返回HTTP数据包,”x-server”一项返回的是”Potato-Server”。

南北大战活动的解锁需要给babel-t单条点赞600,结果点了一天没点满,估计是故意的。最后第二天十点满了500点赞以后babel-t发了一张歌手伍佰的图,开启了南北大战活动。对,就是那个所以暂时将你眼睛闭了起来。

最后一页还更新了一张图,可惜的是,常规方法大部分人没办法看到,这里一起放出来:

thank-cat

其余彩蛋如果有人分享再继续更新,恭喜即刻回归 🎉!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK