截止2022年6月18日,在网站首页中含有一个彩蛋,类似与谷歌游览器小恐龙一致解闷游戏。
写这篇文章之前,一直纠结到底写不写,从其他人来看,修改一副成就横图图片没多大意义,并不会有什么营养,多数打上作弊标签?
接下来纯属鄙人日常记录:
接下来从前端程序员视角解剖分析
在首次游玩取得20分结束,大致判断无反作弊机制,纯纯“小游戏”,确定游戏逻辑运算不会通过服务器计算返回,现在的问题是如何修改分数。
有几条路可以走,第一条,修改引擎的重力,让玩家一直飘浮,这样在调用游戏函数取得分数;第二条,对生成分数时对其修改。
呃,看起来后面更简单 :>, 动工
为此调出开发者工具,首先对分享按钮的上绑定的事件分析,由于是单击触发,因此在事件监听一栏Click中找,在Click中需要先排除document、body这类,因为本身它DIV标签,不会在页面或身体上,剩下的div标签含option-bubble类便是关键。
点击后方链接,工具将直接引导到对应的js文件上。
此时可见游戏逻辑集中在activity.hdslb.com域名下的odXH9yzdsj.js脚本中,格式化代码后,在6602行就是触发“成就图片”关键。
this.domElements.shareEl.onclick = ()=>{
this.lastActive = performance.now(),
(0,
v.SZ)({
type: "click",
c: "banner_game",
d: "end_page",
e: "share"
}, {
msg: JSON.stringify({
id: 0,
game: "叶间穿行",
score: s.XH.score,
login: !!window.__BiliUser__?.cache?.data?.isLogin
})
}),
(0,
lB)(s.XH.score, this.domElements.scoreTextRef)
}
从now()依次调用更改匿名方法内部变量,在第三个参数内的s.XH.score便是分数
新的问题随之而来,要改什么?
从最终的图片中,我们有几个地方修改,分数、超过多少玩家以及对应的描述,一共三处
现在让我们通过修改游览器内存中值实现,在这里当然要借助开发者工具实现,由于odXH9yzdsj.js包含在一个匿名方法中,无法在window中找到它,这里便需借助断点完成。
第一步:打开首页,调出开发者工具,再次重载页面。
第二步:切至Sources,在Page内找到activity.hdslb.com,展开直到下面odXH9yzdsj.js,点击打开。
第三步:格式化代码,通过页面搜索share关键词,找到6602行打上断点。
第四步:开始游戏,点击“分享按钮”,触发断点。
第五步:切换到开发者工具Console中,输入:
// 在断点阶段下,输入
s.XH.score = <分数>
// 调用下接口 查询对应分数百分比
this.domElements.scoreTextRef.r1 ="你超过了<span>百分比%</span><br/>的玩家!";
// 按照下方的描述提供填入
this.domElements.scoreTextRef.r2 = "";
注意这里的百分比,B站会调一个api,具体函数:
this.domElements.shareEl.onclick = ()=>{
this.lastActive = performance.now(),
(0,
v.SZ)({
type: "click",
c: "banner_game",
d: "end_page",
e: "share"
}, {
msg: JSON.stringify({
id: 0,
game: "叶间穿行",
score: s.XH.score,
login: !!window.__BiliUser__?.cache?.data?.isLogin
})
}),
(0,
lB)(s.XH.score, this.domElements.scoreTextRef)
}
按照对应修改的分数打开,https://api.bilibili.com/x/web-frontend/score/score?score=分数,查看pct字段,数值是0-100。
对应描述,分5档,随机一个:
[
["天赋异禀·疾风征服者·被22选中的人!", "成就达成,进击的22!"],
["平平无奇小天才ㄟ( ▔, ▔ )ㄏ ", "不愧是你,22拯救者!"],
["再接再厉,芜湖起飞!", "22必不能轻易认输!", "是时候展现真正的技术了!"],
["就这,绝对不是我 (°ー°〃)", "是意外啦,22绝不会轻易狗带!"],
["身残志坚,答应22不要放弃治疗!", "这河狸吗?<br/>o(一︿一+)o ", "是什么糊住了22的眼睛?是风! ", "落地成盒,虾仁猪心 (ノへ ̄、)"]
]
第六步:断点下一步,此时正常触发生成图片。
—— 感谢抽出时间阅读