网易首页 > 网易号 > 正文 申请入驻

用图片讲一个故事——第五届强网杯Threebody题目官方题解

0
分享至

题目描述:“三体人要入侵地球了,听说他们要使出最厉害的武器”

打开图片,发现有三个重复的图形,下面有”DIFOIL”字样,再下面好像还有一串字,但看不清楚。

图片看起来很奇怪,三个图形也呼应了“ThreeBody”的题目名称。

对于图片题目常规操作,使用StegSolve查看各图层,能发现两张隐藏的图片,其他图层再没有什么可疑的东西了:

图片上能认出半个星球、一个宇航员、一只手,以及《三体》中经典的一句话“你们都是虫子”。

对三体比较熟悉的同学可能可以猜出这张图以及原始图片是三体人使用二向箔对地球进行降维打击的场景。

这里也是小小地调侃了一下选手。如果不能找到通往下一步的方法,便只能停留在这里,被三体人嘲讽为“虫子”。

让我们再回到原始图片,放大看其中的细节:

可见图片中红黄蓝绿交错,有老式电视像素点的感觉。

通过010Editor查看像素点数值:

可见相邻像素点的RGB值都差异巨大,正常情况下相邻像素点的RGB值应该差不多才对。

再仔细观察可以发现,如果以4为周期的话相邻像素的数值就差不多了,考虑正常情况下该图片的像素点应该是每4个一组。相当于原始图片是四维的,这里被“降维打击”成了三维。我们这里需要做的,便是对图片进行升维处理。

BMP格式的头部有个字节是控制每个像素点所占的比特数,现在为24,也就是3个字节,我们将这个字段改为4个字节对应的32:

biBitCount

保存后重新打开图片,便可以看到正常的图形了:

再次通过StegSolve进行查看,可以发现隐藏图片:

很多人看到“Welcome to QWB”可能就放松了警惕,以为这是一张随便放的没啥用的图片,便去找其他线索了。在CTF题目中忽视作者所给的线索是大忌,其实这里是非常关键的,所以在比赛过程中我有提示“所有图片的内容都是有意义的”。

其实细心的话可以看到左上角有一些小白点,代表着那里隐藏着一些信息。使用StegSolve的Data Extract功能查看该空间:

可以看到有“Who am I?”的字样。

再以列为方式查看:

可以看到有“David”字样。

根据这张照片和“David”的提示,通过一番搜索可得知这一位是知名的数学家大卫·希尔伯特:

不过除此之外我们得不到更多的信息了。Flag在哪呢?

让我们再用010Editor查看修改后的图片:

可以看到每个像素除了有RGB三个字段外还有一个字段,代表图片还有另一个通道。

rgbReserved

这个字段有些跟是一样的,但也有一些有细微差异。

rgbBlue

信息会不会就隐藏在字段呢?

rgbReserved

字段是有数值的,所以该通道肯定有对应的图形,不过刚才通过StegSolve并没有看到该通道。

rgbReserved

这里一个方法是修改BMP的文件头,使得StegSolve把该通道识别为Alpha通道。

不过这个可能需要了解一些BMP头相关的知识。这里采用一个更为暴力的方法,通过一个Python脚本解析BMP文件结构,把的数值复制给:

rgbReserved

rgbBlue

with open('threebody.bmp', 'rb') as f: d = f.read()w = 580h = 435b = 4l = bytearray(d)off = l[10]for i in range(h): for j in range(w): l[off+j*b+i*b*w] = l[off+j*b+i*b*w+3]with open('threebody_new.bmp', 'wb') as f: f.write(l)

再通过StegSolve进行查看,可以发现另一个隐藏的图形:

可见中间是一个黑白相间的正方形,其中左上角部分比其他部分颜色要深一些。

大家肯定能想到这里的黑白便是01序列,所以这是一个二维的二进制数组。考虑将这些二进制数组逐行保存成二进制文件,无果,并且如果是逐行保存的话不应该出现左上角的区域与其他区域密度明显不同的情况。

那这个二维数组里的信息是如何储存的呢?

这又要回到刚才提到的数学家希尔伯特了。希尔伯特提出过一种希尔伯特曲线,是一个高维到低维的映射。我们现在得到的二维二进制数组,可以通过这种方式进行降维处理转化成一串一维的二进制流。

并且,希尔伯特曲线的一个特性便是如果从低维还原成高维,则低维中相邻的点在高维中也是相邻的。这就解释了为什么会出现某一块区域密度与其他区域密度不同的情况。

不过从希尔伯特想到希尔伯特曲线可能并不十分容易,希尔伯特作为一位伟大的数学家一生的成就太多了,希尔伯特曲线可能只是其中不起眼的一个成就。

为了防止大家卡在这里,我在比赛中放出了另一个提示“不要埋头做,根据已有信息合理使用搜索引擎”。

这其实是一个大家都明白的道理,做CTF题目,尤其是做Misc题目的时候,善用搜索引擎是非常关键的一步。

但如果单纯搜索“希尔伯特”的话可能需要翻阅大量的网页,这里就需要大家有一些更加跳跃性的思维了。还记得这个题目的主体是什么吗?没错,是“三体”。那三体与希尔伯特这两个看似风马牛不相及的名词,会不会有某种联系呢?事实上,如果尝试以“三体 希尔伯特”作为关键词进行搜索, 很容易搜索引发这道题的出题思路的文章:

https://mp.weixin.qq.com/s/IOSGOJnGyiGoD8J1ITQJlg

这篇文章用文字和图片介绍了三个月前B站的一期关于降维打击的视频,视频当时还小火了一把。没错,降维打击!这不正是题目里的图片所讲述的故事。如果你看了文章会发现两张隐藏的图片都能在文章中的视频截图里找到。当发现这一点之后便可以确定,这个视频肯定跟这个题目有着密切的关系。而这个视频,讲的恰恰就是希尔伯特曲线。

下面要做的就是如何利用希尔伯特曲线把这里的二维数据转化成一维数据了。

不同维度的希尔伯特曲线是这样的:

因为这里我们得到的是128128的矩阵,128=2*7,所以我们应该使用7维的希尔伯特矩阵。

然后通过希尔伯特曲线的排列方式抽取各像素点的值,视频里已经给我们展示了,类似这样:

我们可以使用脚本把二维的01矩阵降维成一维的二进制流,便可以得到隐藏的文件。我在写脚本处理图片的时候用到了 https://github.com/galtay/hilbertcurve 这个库,实现的代码为:

import numpy as npfrom PIL import Imagefrom hilbertcurve.hilbertcurve import HilbertCurvewith Image.open('threebody_new.bmp') as img: arr = np.asarray(img)arr = np.vectorize(lambda x: x&1)(arr[:,:,2])for x1 in range(np.size(arr,0)): if sum(arr[x1])>0: breakfor x2 in reversed(range(np.size(arr,0))): if sum(arr[x2])>0: breakfor y1 in range(np.size(arr,1)): if sum(arr[:,y1])>0: breakfor y2 in reversed(range(np.size(arr,1))): if sum(arr[:,y2])>0: breakarr = arr[x1:x2+1, y1:y2+1]hilbert_curve = HilbertCurve(7, 2)s = ''for i in range(np.size(arr)): [x,y] = hilbert_curve.point_from_distance(i) s += str(arr[127-y][x])with open('output', 'wb') as f: f.write(int(s,2).to_bytes(2048, 'big'))

这里的便是最后得到的文件,打开可以发现是一个C语言程序。编译并执行这个C语言程序,发的输出结果便为该C语言程序本身。

output

其实这种可以打印自身的程序学名叫Quine,2015年第一届强网杯的NESTING DOLL题目便是关于Qunie的,这里也是小小地纪念一下当年打CTF的时光。

不过如果对原始代码和程序输出的代码进行仔细比对的话可以发现,两者并不是完全相同的,在output的第11行后面多出了大片的空白字符,由空格和Tab构成。

通过把空格替换成0、Tab替换成1,可得到字符串

01100110011011000110000101100111011110110100010000110001011011010100010101101110001101010110100100110000011011100100000101101100010111110101000001110010001100000011011000110001011001010110110101111101

这段二进制串还原便可得到Flag:flag{D1mEn5i0nAl_Pr061em}

后记:

ThreeBody是第五届强网杯的一道 Misc 的题目。可能由于是第二天才放出的,留给大家的时间不太多,直到比赛结束也只有0x300R一支队伍做了出来。

虽然做出的人很少,但看起来大家的参与感还是很足的。看到赛后在官方群里大家日常催更三体的writeup,很高兴大家能喜欢这道题:

说到 Misc 题目,很多人的第一印象是“脑洞”。确实很多 Misc 题目都需要一些脑洞才可以解,但是单纯靠脑洞来提高题目难度会使得题目变得很没意思。在出这道题的时候,我尽量把做题所需要的引导作为线索加入到题目当中,把需要的脑洞降到最小。不过这就需要大家足够地细心,不放过题目的任何一点提示。

另一方面,Misc 是 CTF 中最为多变的题目类型,我在出这道题的时候,也希望不仅仅是考察技术本身,更希望通过题目来讲述一个故事。题目的不同部分相互穿插关联,让大家做起来更有乐趣。降维打击是近几年互联网的热门词汇,而引发这道题目出题思路的那个三个月前几百万播放量的视频,在某种程度上也算是“时事热点”。我把视频里所讲述的故事,以Misc题目的形式展示了出来,让大家在做题过程中亲自感受降维打击的过程。而正如前面所说,本题目提供的原始图片,也可以看做四维的图片被降成了三维,这可能是另一种降维打击的可视化方式。

最后放出给我出该题目启发的B站视频,让我们来一起领略降维打击的震撼:

https://www.bilibili.com/video/BV1Sf4y147J9

欢迎登录安全客 -有思想的安全新媒体www.anquanke.com/加入QQ交流群1015601496 获取更多最新资讯

原文链接:https://www.anquanke.com/post/id/244533

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
72万个充电桩,年入40亿,常州夫妇边赚钱边收割,如今要上市了

72万个充电桩,年入40亿,常州夫妇边赚钱边收割,如今要上市了

毒sir财经
2026-02-22 10:38:14
从排队抢位到无人问津,火遍全国的社区食堂,为何凉得这么快?

从排队抢位到无人问津,火遍全国的社区食堂,为何凉得这么快?

知识TNT
2026-01-19 15:16:13
反转!妈祖巡游所换为女童,从着装能看出,被换女孩疑炒作删视频

反转!妈祖巡游所换为女童,从着装能看出,被换女孩疑炒作删视频

古希腊掌管松饼的神
2026-02-22 22:21:04
如果不差钱,退休后首选这3座城市久居,物价低,还舒服

如果不差钱,退休后首选这3座城市久居,物价低,还舒服

蜉蝣说
2026-02-14 16:06:23
河南籍任鲁豫晒春晚主持人台本,配文“最后一本留个纪念”引网友猜测是否是其最后一届春晚,至今已主持11届,被称为“春晚定海神针”

河南籍任鲁豫晒春晚主持人台本,配文“最后一本留个纪念”引网友猜测是否是其最后一届春晚,至今已主持11届,被称为“春晚定海神针”

极目新闻
2026-02-21 10:07:05
"重大发现":《神界》成人场景重播量全片最高!

"重大发现":《神界》成人场景重播量全片最高!

游民星空
2026-02-21 22:24:15
三大射手争夺本赛季金靴奖,然而对比昔日梅罗盛世,的确落后太多

三大射手争夺本赛季金靴奖,然而对比昔日梅罗盛世,的确落后太多

里芃芃体育
2026-02-23 12:00:08
拒绝百万年薪,入职25万事业编,效力辽篮18年的韩德君赚到多少钱

拒绝百万年薪,入职25万事业编,效力辽篮18年的韩德君赚到多少钱

揽星河的笔记
2026-01-25 20:19:21
谷爱凌回应万斯的批评:你不管别人,就只管我,那是因为我能赢

谷爱凌回应万斯的批评:你不管别人,就只管我,那是因为我能赢

我心纵横天地间
2026-02-21 18:50:22
张灵甫身亡,蒋介石当众将汤恩伯打得满头血,死后蒋仍冷言相待

张灵甫身亡,蒋介石当众将汤恩伯打得满头血,死后蒋仍冷言相待

浩渺青史
2026-01-04 00:58:05
湖北夫妻档小吃摊年入超100万,已买房买车:每天炸500多根年糕、1100多根淀粉肠

湖北夫妻档小吃摊年入超100万,已买房买车:每天炸500多根年糕、1100多根淀粉肠

台州交通广播
2026-01-08 07:18:03
4月1日起 医保卡别乱刷了!这几件事别乱做 很多人都吃亏

4月1日起 医保卡别乱刷了!这几件事别乱做 很多人都吃亏

智慧生活笔记
2026-02-23 15:56:54
43岁房祖名近照曝光!跟成龙到米兰过年感情很好,手上戴结婚戒指

43岁房祖名近照曝光!跟成龙到米兰过年感情很好,手上戴结婚戒指

小娱乐悠悠
2026-02-22 12:44:22
我国唯一无法征服的大江,水能超三峡,却没有一座水电站

我国唯一无法征服的大江,水能超三峡,却没有一座水电站

阿諢体育
2026-02-14 12:24:13
给普通人的忠告:金价重回5000,千万别犯这两个致命错误!

给普通人的忠告:金价重回5000,千万别犯这两个致命错误!

刘浶开挖机
2026-02-23 17:01:31
三球三节37+8+7+10三分生涯新高 黄蜂大胜奇才近14战11胜

三球三节37+8+7+10三分生涯新高 黄蜂大胜奇才近14战11胜

醉卧浮生
2026-02-23 09:26:43
美国评1979年中越战争:打了28天,中国军队出现了很多问题

美国评1979年中越战争:打了28天,中国军队出现了很多问题

小豫讲故事
2026-01-31 06:00:10
新春第一枪:原三甲院长落马!享受“保姆式服务”,把医院当自家后院……

新春第一枪:原三甲院长落马!享受“保姆式服务”,把医院当自家后院……

医脉通
2026-02-22 17:08:18
任家萱带儿子回娘家拍全家福!刻意遮挡肚子像怀二胎,烧伤还明显

任家萱带儿子回娘家拍全家福!刻意遮挡肚子像怀二胎,烧伤还明显

叶叙说
2026-02-23 10:15:46
马凡舒曝回家第二天就发烧了,透露春晚主持人后台的四个状态

马凡舒曝回家第二天就发烧了,透露春晚主持人后台的四个状态

举头月已燕归来
2026-02-23 00:19:20
2026-02-23 19:04:49
安全客 incentive-icons
安全客
有思想的安全新媒体
1360文章数 4753关注度
往期回顾 全部

科技要闻

智谱、MiniMax合计蒸发近千亿市值,为何?

头条要闻

郑丽文:一旦台海爆发冲突 台湾将成最大输家

头条要闻

郑丽文:一旦台海爆发冲突 台湾将成最大输家

体育要闻

哈登版骑士首败:雷霆的冠军课

娱乐要闻

谷爱凌奶奶去世,谷爱凌泪奔

财经要闻

美国海关将停止征收被裁定违法的关税

汽车要闻

续航1810km!smart精灵#6 EHD超级电混2026年上市

态度原创

手机
艺术
家居
游戏
军事航空

手机要闻

荣耀MWC 2026全球发布会定档3月1日

艺术要闻

十大名家画春,送给春天的你!

家居要闻

本真栖居 爱暖伴流年

八年前上市的《巨型水族馆》还在推出更新与DLC

军事要闻

美军重兵集结蓄力作战之际 新一轮美伊谈判时间“敲定”

无障碍浏览 进入关怀版