G20G の 解密

发布时间:2020-03-26浏览次数:307

G20G“线上寻宝”已经圆满收官,经过7天的线上奋战,大家是否感觉意犹未尽,那些没通过的关卡是不是很想知道答案。今天我们就带领大家一起来揭秘闯关的秘诀,看看主创团队是如何设置游戏环节的。


主创说 

 Stage1 | 交个朋友

G20G Stage1的难度适中,选题也贴近大家的生活。


本关卡的选题思路分两部分,第一部分以“鸽子”与“时间”为关键词,旨在提醒大家在疫情期间要掌控好自己的时间,少放一些“鸽子”,实现学习科研效率的最大化;第二部分紧扣上海科技大学元素,涉及到了学校三大学院的标准色以及校园文化的内容。


主创说 

Stage2 | 热身游戏

G20G Stage2的难度适中,题目灵感主要来自于一些常见的解密游戏活动,侧重考验选手的信息学素养与对线索的敏感度。


选题结合了当前背景情势,有对疫情发展的重要事件回顾及防疫小知识考察;同时也融入了GeekPie社团元素,将解谜贯穿在整个流程中。


主创说 

Stage3 | 正式开始

Stage3 原先定位于 10% 的人能通过,之后为了降低难度,在每个任务下面加了一些小提示。


题目灵感主要来自于最近的疫情防控,融合简单的数据分析,同时加入上科大教务系统的元素,以提醒同学记得下载课表里的附件。

揭秘关卡,请见下文


Stage 1



01

task 0



Solution 1


本关卡的要素包括“人头上的鸽子”、“时钟”,以及一句提示“咕的时候也要看看时间”。玩家需要将方形鸽子图与圆形时钟图重叠起来,从左往右依次读出数字981011132,以此代入提供的url中抵达stage1的入口页面。


Solution 2 


首先随意访问一个stage1的网址如

http://games.geekpie.club/stage1/#/,随后使用开发者工具开始查看网页构造。通过开发者工具可以看到网站使用的资源中有如下文件:


在文件Router.js之中,可以找到以下两条

就可以直接进入 task  1 开始游戏。


01

task 1



Solution 1 


选手只需根据上海科技大学VI视觉手册中给出的学院标准色进行选择即可通过本关卡。


Solution 2 


通过task0的Router.js文件中的提示,不难看出004098f39800009944可拆分成3个不同的颜色编号,如下: 

分别对应学校三大学院的视觉设计颜色,G20G在每个色块上都标写了编号,直接核对就通关了。


Solution 3 


本关卡判断由前端进行,可以通过翻阅源码直接跳过或者读出答案。


01

task 2

Solution 1


「立志 成才 报国 裕民」是我校的 「育人理念」

因此不需要输入任何内容,保持文本框为空,直接按下【Submit】即可过关。


Solution 2 


本关卡判断由前端进行,可以通过翻阅源码直接跳过或者读出答案。


01

Bonus +100


这是一个bonus关卡,只有第一个通过的选手才能获得相应的加分,并开启stage1的关闭倒计时和stage2的线索。选手需要根据入口线索中时钟上的时间,将系统时间设定为相应的时间才能通过这个关卡。

注:通过观察POST的json内容也很容易发现本关卡与系统时间有关。


Stage 2



02

task 1





进行一轮答题后发现并不能通关,于是在文本中寻找可能的线索:第三题的题干中有【跳过】二字使用得颇为生硬,点击后发现有弹出菜单。在弹出菜单中点击【下一题】即可进入下一题。


补充:

使用审查元素,看到资源文件中有【 realSkip() 】方法,附有密钥 {w0w_you_can_re3lly_skip},同时看到有鼠标单击的判定,有助于想到单击文本中【跳过/skip】等文字的方法。

如果玩过【奇怪的大冒险】一类的解谜游戏,可以通过类比较为容易地想到方法。


02

task 2

本题较为简单,将碎片图下载后重新拼起,即可在校徽背景中获得通关密钥。


02

task 3

Solution 1 


题目信息为【不小心添加了滤镜】,于是将图片放进Adobe Photoshop中进行还原操作。在菜单中调整颜色和对比度,将红色的浓度调少再使用自动调整功能,发现了色块背后有英文字母,再调整色阶,增大锐化遂得到正常通过flag。


Solution 2 


由于在图片中未能发现有效信息,于是用暴力方法,将所有的像素点读取出RGB值,将其转换为把每个像素点由rgb转成灰度图像,即0-255,再使用ASCll编码解读每一个像素点得到字母,即为以geekpie开头的正确flag密码。


Solution 3 


猜测过关线索不是在【图片】中,而是在【图像文件】中,使用【记事本】打开,得到

从大量重复字符中读出flag {what_a_cruel_person} ,即为可以跳过第四题的特殊密钥。

02

task 4


Solution 1 


得到图片文件以后,类比task3,打开Adobe Photoshop将两个文件叠加在一个图层上使用差值,发现两个图片的不同之处是肉眼不可见的。此时我们将两个图层合并,再在新的图层上将曝光度拉满,即可得到全损压缩的flag字样。


Solution 2 


右键对比文件属性,发现有一个文件明显比另一个大几kb,遂使用winhex进行解码,使用搜索功能搜索关键字geekpie,可以查找出隐藏在乱码中的通关密钥。


02

task 5

要求为 【GeekPie群中某管理员的QQ号+昵称】,经过尝试后发现无论是群昵称还是QQ名,每一位管理员的信息都不能解开压缩包,于是猜测可能是文字游戏,即:GeekPie群中有人的群昵称或QQ名是【某管理员】,在群成员名单中搜索找到,查看其资料卡,发现其QQ名为一串emoji,这提示应该使用群昵称。将QQ号【334261XXXX】和群昵称【某管理员】输入,发现仍然错误。重新阅读题干,想到同样是文字游戏:“+”字符也需要保留。于是得到压缩包正确密码【334261XXXX+某管理员】,解压后即可获得过关密钥。




Stage 3



03

task 1

  • 看到【 ://】,想到 【http://】 的标准网址开头。不难想到凯撒变换,还原后得到网址http://eams.victoryang00.xyz

  • 下面的横码看上去像摩斯电码,但尝试译解后发现不符合,于是想到还可能是压扁的条形码。进行拉伸还原并用手机扫描,会直接弹出快递信息【条形码保存的是快递单号】






  • 注意到能将【地址】【日期】等元素形成有序唯一答案,同时是【每个人生活中都要用到的一串“数字”】,只能是身份证号

  • 地址要素:查看快递信息得到地址为【武汉市黄陂区】,得到开头6位为【420116】

  • 日期要素:【中文最大的百科全书】=> 【百度百科】和【Google】两个主体


  • 在百度百科中找到词条【Google】的编辑历史,看到第一次删除词条是2006-05-23,于是得到日期为【20060523】

  • 现在考虑身份证号的最后四位,给出的【2、7、10、6】有5个字符,很自然地想到10即为末尾的X,随后想到身份证号倒数第二位是性别验证,回到文本中确定全文使用【他】,因而确定剩余3个数字中只能是奇数7放在倒数第二位

  • 这时我们已经得到了:

    42011620060523__7X(剩余2、6), 稍加尝试即可得到正确答案:42011620060523627X,填入文本框中即可通过第一题。

03

task 2


  • 由task1的相关信息,得到了网址http://eams.victoryang00.xyz/42011620060523627X,登陆后看到了伪造的上科大身份验证界面,输入用户名和邮箱,一个仿造的教务系统的课表页面一闪而过,随即重定向到信院同学最喜欢的网站(GitHub)。注意到了中途一闪而过的课表,再次登录,凭手速点击取消或者通过技术手段阻止重定向。发现课表页面里没有有效线索,于是下载右下角的【附件】寻找线索。

  • 下载附件后,得到一份pptx文件。观察到文件文本中并没有线索,于是解压pptx文件以后检查生成的解包文件。搜索文档注释可以写脚本,小白一点也可以直接拿文本编辑器打开然后搜索 <!--字符串。在解包文本中可以搜到 victoryang00.xyz:5oo6/hub/login,这里注意到5oo6是在指端口号为5006。打开网站,看到登录界面需要用户名和密码。回到 pptx 中,检查文档【编辑信息】,【最后编辑的人】一项可以获得【jupyter1-6:g20】,冒号前面是名字,后面是密码,成功登录jupyter hub。





03

task 3





Solution 1 



(接task2)登录jupyter以后,打开ipynb文件,发现有十个化学结构图。题目要求是输入所有可能的总共化合物碳原子与氢原子比值的最小值。仔细阅读代码后运行已训练好的模型即可直接读出答案。


Solution 2 


这里以RDkit库为例,用GetAtoms()可以遍历每个化合物中的原子,发现默认是省略氢原子的,需要先用AddHs()补上。最终代码如下:



Solution 3 


参考接下来 task  4  solution 2

又知道一般的有机物中,氢原子的数量总是要大于碳原子的,而比例永远是一个分数,所以可以计算n/m, 遍历所有的n<m的十三位有效数字,post验证答案,就可以用脚本爆破出答案。


03

task 4


Solution 1 


第四题题干很明确,给了两个用Plus Code表示的坐标,需要在它们附近找到一个球状建筑物。尝试上海,两个坐标分别位于上科大隔壁的筑桥和复旦大学张江校区。解析这个地址的最简单方法是输入到谷歌地图。解析可得坐标。带着这个坐标去看街景(如:百度街景坐标拾取工具 http://quanjing.baidu.com/apipickup/)就能打开街景图了。

然后需要在街景图上仔细找球状物体,答案在 121.600755,31.181222,89.2789289931995。然后去地图上找那个地方对应的东西可以看到上海微小卫星工程中心,即可搜得到电话 (021)50735001。



Solution 2


检测提交窗口的流量包,可以发现,核验数据是向 challenge_4发送POST请求,POST请求报头为:

内容为:

如果答案正确返回

如果答案错误返回

所以由于是测试电话号码,大致范围是张江,查阅电信公司黄页可知该地块范围内的电话多为507开头,而学校电话以2065开头,可以通过上述方法用脚本爆破答案,最后就获得:


以上是寻宝的详细揭秘,你get了吗?


GeekPie 2020 Games