2020年第二届“网鼎杯”网络安全大赛青龙组题目“虚幻2”的一种解法

本文介绍了2020年第二届“网鼎杯”网络安全大赛青龙组题目“虚幻2”的解密过程。通过分析发现,图片的RGB通道分别代表汉信码的不同部分。经过分离通道、去除白边、旋转、轴对称等操作,最终对图像进行随机填充尝试暴力解密。虽然在比赛中未能成功,但轴对称后的处理方式能提高解码成功率。
摘要由CSDN通过智能技术生成

题干

题目图片
附件下载 备用下载

解答

下载下来之后是一个名叫 file 的文件,用文本编辑器打开能看到 PNG 文件头和文件尾,用 pngcheck 读一遍没发现异常。

搜了下2018年“网鼎杯”题目“虚幻”的题解,发现是把图片拼成了汉信码。用 Python 的 PIL 库读出 file 文件各像素的 RGB 值可以发现它们总是取 0 或 255,那么就把图片的 RGB 通道分开,并且去掉白边(这里贴的图片为了易于查看放大了10倍):

G通道

G通道

R通道

R通道

B通道

B通道

根据 GBT 21049-2007,汉信码应该长这样:

在这里插入图片描述
观察可知应该将 RGB 通道分开得到的图片按 G, R, B 的顺序逐行拼接(拼接用的脚本是队友给的),拼完之后逆时针旋转 90 度,再把左下角的 7*7 的寻像标志旋转180度,似乎效果不错(这里贴的图片为了易于查看放大了10倍):

结果

这张码扫不出来。然后因为题干提示要暴力修复,就写个脚本对图上 7*9 的空白区域(不是 7*10,因为寻像标志边上的格子本来就是空白的)进行随机填充,每个像素都有50%的概率被涂黑,如此生成了 1000 张图片,用中国编码手机客户端手动扫描(汉信码在线识别网站比赛时出错了…也许是提交的人太多了吧)发现一张也扫不出来,然后整个比赛过程中也没扫出来。

比赛结束后看网上别人的正确答案,得知需要把图像以右上到左下的对角线为轴作轴对称。轴对称后又随机填充生成了几张图片,大约有 50% 的图片可以扫描出 flag,结果如图:

结果
处理图片用的脚本(包括轴对称)如下:

from PIL import Image
from random import randint

for k in range(5):
	# 用到的三张图片就是上面说的 RGB 通道分开的图片(未放大10倍)
    R = Image.open('solved_r.bmp')
    G = Image.open('solved_g.bmp')
    B = Ima
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值