点击此处获得更好的阅读体验
WriteUp来源
题目描述
题目考点
解题思路
打开文件之后,发现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
21from 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}