s34hunka

点击此处获得更好的阅读体验


WriteUp来源

官方WP

题目描述

题目考点

解题思路

打开文件之后,发现Excel中有一个图片:

但仔细看会发现,这个图片并不是我们常见的插入到Excel的那种文件,该图片由Excel单元格构成,每个像素都由一个单元格的背景颜色来表示。

放大图片局部仔细看的话可以隐约看到flag字样:

到这里的一个思路是通过脚本根据像素还原出图片,再使用stegsolve工具查看LSB隐写等信息

不过如果这样尝试的话会发现这样是行不通的,LSB里没有flag

我们可以看到文档作者是堀内辰男,标题为噴火。

经搜索可知,这里的堀内辰男是日本一位用Excel作画的老爷爷,噴火为他的一部作品。

那么堀内辰男就是以不同的单元格颜色作画的吗?经搜索不是这样的:

并且在堀内辰男的个人网站可以看到提供的图片都是jpg格式的,而没有xlsx格式的。

这里的这个文件名s34hunka比较有意思,我们可以搜一下:

可以看到只有图片搜索结果,而第一个图片恰好就是本题所给的图片。

打开图片所在网址,可以看到该图片的名字恰好就是“噴火”,文件名为s34hunka.JPG。

通过脚本读取该图片和Excel单元格信息,对该图片和Excel中的像素做比较,提取出不同的像素点生成图片,即可得到flag:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from PIL import Image
from openpyxl import load_workbook

img = Image.open('s34hunka.JPG')
pixels = img.load()
width, height = img.size

wb = load_workbook('s34hunka.xlsx')
ws = wb.active

for j in range(height):
for i in range(width):
c = ws.cell(j+1,i+1)
p = pixels[i,j]
color = ''.join('%02X'%t for t in p)
if color == c.fill.fgColor.rgb[2:]:
pixels[i,j] = (255, 255, 255)
else:
pixels[i,j] = (0, 0, 0)

img.save("myresult.png")

Flag

1
flag{Let'5_P41nt_wI7h_eXcEl}