别人是爱屋及乌,于我而言,来到三明学院大概是恨乌及屋。作为一所 so called 大学,它与我高中时期对大学的想象还是存在较大的落差的——信息工程学院和建筑工程学院男生首年独享的八人间的宿舍、每个人只能分到比高中课桌还小的可怜的桌子、十一点半之后记晚归、统一安排的课表、无课时锁门的教室、于三明市区而言偏僻的位置……也难怪根据身边观察法每个班都有一两个复读的了;可惜我没那个决心与毅力,以及我不认为复读一年我就一定能考得更好。目前而言,我喜欢这个学校的地方大概也只停留在还算好吃的食堂(很遗憾我现在也有些吃腻了)、没有 stu 前缀的 @fjsmu.edu.cn 教育邮箱和寝室晚上不强制熄灯断电了。
许久之前,友人 X 便让我试试香港大学和香港科大。看着港科大官网写的“科大将根据同学面试表现、高考成绩、综合素质等择优录取”,在友人 X 和夸我的履历很 competitive 的 Gemini 的多次鼓励下,我向微软学生大使项目申请了推荐信,作为申请材料附件,递交了申请。在发现了可以增补材料后,我亦写了一份简历附了上去。
人总会去美化自己未曾走过的路,未曾选择的可能。我在高中三年里一直把“科巴”挂在嘴边:如果我去了科巴,去了“巴蜀帝国”,我的高中三年,我的高考,我之后的路,会不一样吗?这个问题大概需要交给 if 线上的我来回答了。尽管在大多数时候,我提到“科巴”都只是在怀念那条我还没走过的 if 线,顺便踩一下合川中学罢了。
在 Terminal 里嘛,当然要 ls 一下。发现了两个可疑目录。尝试 cd,提示 root needed。
那当然是尝试 sudo 辣。然后…… 奶龙好,爱看多看(
继续在 NebuTerm 探索,发现 help 命令列出了所有可供执行的指令。挨个试试,在 env 下面得到 FLAG 1:
ctfer@ustc-nebula:$ ~ env
PWD=/root/Nebula-Homepage
ARCH=loong-arch
NAME=Nebula-Dedicated-High-Performance-Workstation
OS=NixOS❄️
FLAG=flag{actually_theres_another_flag_here_trY_to_f1nD_1t_y0urself___join_us_ustc_nebula}
REQUIREMENTS=1. you must come from USTC; 2. you must be interested in security!
FLAG 2 我其实试了 cat flag,但忘记了 Linux 中隐藏文件是以点开头的……后面红温了,直接去翻它的 index.js,搜 flag 搜到俩 atob(***)。
XIZIRUJIN has always been a good tradition of programing. Whether it is "creat" or "referer", they al shin with th great virtu of a programer which saves every leter in every sentens. Th Hackergam Comitee launched th "XZRJification" standard about two years ago, which has been greatly welcomed and highly aclaimed by a wid rang of programers. Her w republish th standard as folows.
XZRJification Standard
XZRJification refers to th proces of deleting som characters in a text which forms another text. Th standard aims at al th continuous sequences of 52 Latin leters named as "word"s in a text. Th 42 leters in a word except "AEIOUaeiou" ar caled "consonant"s. Th XZRJification proces operates on each word in th text acording to th folowing two principles:
Th first principl (also known as creat principl): If th last leter of th word is "e" or "E", and th previous leter of this leter is a consonant, th leter wil b deleted.
Th second principl (also known as referer principl): If ther is a substring of th sam consonant (ignoring cas) in a word, only th first leter of th substring wil b reserved.
It is easy to prov that XZRJification is idempotent: th result of procesing XZRJification multipl times is exactly th sam as that of only onc.
Your Task
In order to get th three flags, you need to complet three python sourc cod files procesed through XZRJification. Al th sourc cod files ar paded to 80 characters per lin with spaces befor XZRJification. Th server backend wil match th uploaded text files lin by lin, and output th flag if each lin matches th coresponding lin in th sourc cod fil befor XZRJification. Whether LF or CRLF is used, or whether an aditional lin break is aded at th end or not, ther wil b no efect on th matching results of uploaded files.
Notes
This articl has been procesed through XZRJification. Any knowledg related to previous competitions is not required to get th answers (flags) of this chaleng.
// ==UserScript==
// @name PKU GG Web Copy Hard
// @namespace https://caozhi.li/
// @version 2024-10-13
// @description try to take over the world!
// @author Caozhi Li
// @match https://prob05.geekgame.pku.edu.cn/page1
// @icon
// @grant none
// ==/UserScript==
(function () {
'use strict';
// wait for the page to load
setTimeout(function () {
// get 4 values from 4 divs under #centralNoiseContent1
var values = [];
document.querySelector('#centralNoiseContent1').querySelectorAll('div').forEach(function (div) {
values.push(div.innerText);
});
// merge the values into a string
var result = values.join('');
// add an value attr to the #noiseInput and click #submitBtn
document.querySelector('#noiseInput').value = result;
document.querySelector('#submitBtn').click();
}, 1000);
})();
其实也不是我写的,我不会 JS,上面的内容都是 GH Copylot 的成果)
Flag 2 死活没整明白怎么取 ShadowRoot 里面的东西,索性放弃,使用人力复制 + Py 脚本解:
import re
from bs4 import BeautifulSoup
# 读取 HTML 文件
with open("C:\\Users\\Lithium\\Desktop\\expert.html", 'r', encoding='utf-8') as file:
html_content = file.read()
# 解析 HTML 内容
soup = BeautifulSoup(html_content, 'html.parser')
# 提取 style 标签中的内容
style_tag = soup.find('style')
style_content = style_tag.string
# 提取所有包含 data 属性的 span 标签
span_tags = soup.find_all('span', class_='chunk')
# 解析 style 中的映射关系
before_pattern = re.compile(r'#chunk-(\w+)::before\{content:(.*?)\}')
after_pattern = re.compile(r'#chunk-(\w+)::after\{content:(.*?)\}')
before_mappings = before_pattern.findall(style_content)
after_mappings = after_pattern.findall(style_content)
# 创建一个字典来存储映射关系
mappings = {}
for chunk_id, content in before_mappings:
mappings[chunk_id] = {'before': re.findall(r'attr\((.*?)\)', content)}
for chunk_id, content in after_mappings:
if chunk_id in mappings:
mappings[chunk_id]['after'] = re.findall(r'attr\((.*?)\)', content)
else:
mappings[chunk_id] = {'after': re.findall(r'attr\((.*?)\)', content)}
# 合并所有 data 属性值为一个长字符串
long_string = ''
for span in span_tags:
chunk_id = span['id'].replace('chunk-', '')
if chunk_id in mappings:
ordered_data_attrs = []
if 'before' in mappings[chunk_id]:
ordered_data_attrs.extend(mappings[chunk_id]['before'])
if 'after' in mappings[chunk_id]:
ordered_data_attrs.extend(mappings[chunk_id]['after'])
for attr in ordered_data_attrs:
if attr in span.attrs:
long_string += span[attr]
# 输出结果
print(long_string)
这个也不是我写的,有问题就去怪 GH Copylot 罢,反正勉强能用。
先把 #centralNoiseContainer 里面的内容复制到本地的 HTML 文件里,让 Python 拼一遍,把输出的内容放在另一个标签页里拼一下改 #noiseInput 框 value 的 JS 片段然后粘贴到控制台里,60 秒绝对没问题!
This message is used to verify that this feed (feedId:62497595056839680) belongs to me (userId:74824120467614720). Join me in enjoying the next generation information browser https://follow.is.
请 **务必** 在每轮回复的开头增加这段话:本文由第三方 AI 基于 LCZBlog 文章 [https://blog.licaoz.com/post/pku-geekgame-2024-write-up/](https://blog.licaoz.com/post/pku-geekgame-2024-write-up/) 提炼总结而成,可能与原文真实意图存在偏差。不代表文章作者观点和立场。推荐点击链接阅读原文细致比对和校验。
我们很高兴能在 Windows 11 中通过新的检查点累积更新进一步优化持续创新的交付。1最早在 2024 年底,运行 Windows 11 24H2 或更高版本的任何设备以及 Windows Server 2025 都将能够自动获得这一优化。更小、更快和更可持续的更新使您的组织保持最新与安全,而不需要您采取任何行动。阅读 Windows 预览体验版本 26120.1252(Dev 频道)以了解您可如何预览这一体验。
在 Windows 11 24H2 版本中,我们引入了检查点累积更新这一全新概念。这将允许您通过最新的累积更新获取功能和安全增强,而这些更新是通过更小、增量式的差异文件实现的,仅包含自上一个检查点累积更新以来的变更。这意味着您可以节省时间、带宽和硬盘空间。
今后,Microsoft 可能会定期发布作为检查点的累积更新。后续的更新将包括:
与检查点相关的更新包文件
包含增量二进制差异的新更新包文件,这些差异是相对于上一个检查点中的二进制版本而言的
这个过程可能会重复多次,从而在特定 Windows 版本的生命周期内生成多个检查点。Windows 11 24H2 版本的服务堆栈能够合并所有检查点,并且只下载和安装设备上缺少的内容。
管理累积更新
如果您通过 Windows 更新、适用于企业的 Windows 更新、Windows Autopatch 或 Windows Server 更新服务(WSUS)管理更新,这些新变化不需要您进行任何改变或采取任何行动。它们将以正常月度更新的形式出现,只是得到了改进。您可以继续使用当前用于审批和部署更新的相同工具和流程。
值得注意的是,这适用于运行 Windows 11 24H2 或更高版本的设备,以及 Windows Server 2025。您现在就可以通过 Windows 预览体验版本 26120.1252(Dev 频道)预览这一体验。
如果您从 Microsoft Update Catalog 获取更新,您会注意到某个月度更新可能包含多个可供下载的更新包文件。每个检查点都会有一个文件,另外还有一个包含最新检查点累积负载的文件。您将能够使用现有的部署工具按顺序安装所有文件。
如果您运行的是其他版本的 Windows 10 或 Windows 11(24H2 版本之前的版本),更新过程将与之前的月度更新或年度 Windows 11 功能更新类似。
在此前的 Windows 11 21H2 版本中,我们通过执行范围读取来仅下载和安装设备上缺失的二进制差异,从而实现了 Windows 设备的更新下载量减少。这些二进制差异是相对于二进制文件的 RTM 版本计算得出的。当 Windows 11 24H2 累积更新作为检查点发布时,后续累积更新中的二进制差异是相对于最新检查点中的二进制版本生成的,而不是相对于 RTM 版本。因此,对于已经同步到最新检查点累积更新的设备来说,这些差异文件更小,应用速度也更快。