[网鼎杯2020] 虚幻2

这道题当时比赛的时候确实没太想出来,现在来复盘一下

  • 题目描述
  • 解题过程

题目下载下来是一个叫file的文件,用010打开看看

PNG格式开头,很明显是张图片,换成.png再打开

很奇怪的一个图像,并且大小是36*12px

当时第一时间想的是用stegsolve去看图层有没有什么东西,但是都没找到

后来有师傅翻到了2018年网鼎杯的虚幻1,结合一下题目的介绍,发现当年是汉信码,那么估计这次也是要搞成汉信码了

接下来就是怎么搞出来的问题了,第一个问题就是图片的大小

汉信码必然得是正方形,但是图片的宽比高大了三倍 3这个数字,那就联想到rgb三个图层了

当时比赛时的想法是把R G B三个图层的分别取出来然后拼,但是并不能拼出个大概,于是就卡住了233333

赛后复盘的时候终于想出来了,真正的理解应该是: 一张图片的每个像素点的R G B值为0-255的某个值 我们取出每个点的R G B值,这样原来的36×12个点就会变为3倍的值 接着因为汉信码为黑白两色,我们再把原来为255的值变为1,0的值变为0,最后再转换回图片,就能得到一张36×36的图片了 附上脚本

from PIL import Image

im = Image.open('file.png')
s = ""
pix = im.load()
width = im.size[0]
height = im.size[1]
for x in range(width):
  for y in range(height):
      r, g, b = pix[x, y]
      if (r == 255):
          s += "1"
      else:
          s += "0"
      if (g == 255):
          s += "1"
      else:
          s += "0"
      if (b == 255):
          s += "1"
      else:
          s += "0"

MAX = 36
pic = Image.new("RGB",(MAX,MAX))
i=0
for y in range(0,MAX):
  for x in range(0,MAX):
      if(s[i] == '1'):
          pic.putpixel([x,y],(255,255,255))
      else:pic.putpixel([x,y],(0,0,0))
      i = i+1
pic.show()
pic.save("flag.png")

利用这个脚本,我们可以得到一张图片

但其实仔细观察的话,这张图片和标准的汉信码比较一下

结合给出的Hint图片要转和暴力修补,那么我们应该需要先转动图片,再修复空白区域

经过旋转和改变角落的定位点后

我们还剩下右边一块空白,结合汉信码的纠错性,我们只要用画图涂上几笔就能识别啦

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇