二维码补全

总结

直接上总结: 二维码右半部分是数据区(存储数据),左半部分是校验区(验证扫到的二维码有没有缺漏啥的),左上、左下、右下左上的那几个大小方块叫做定位块(顾名思义就是用来定位二维码的)

根据上面这段话阔以得出以下结论:
1、有了右半部分就相当于有了全部数据
2、在右半部分和左半部分都有一定缺失的情况下,若缺失在一定比例,则仍可以获得信息 (这是根据1个叫里德-所罗门的纠错算法实现的,涉及数学并8需要理解)
3、在缺失定位块导致无法扫描二维码的情况下,只要把定位块补全就可以了(最简单的,电脑里的画图程序就阔以做到这点)

这里推荐一个链接,qrazybox,可以在线进行手撕,点击tools->强制解码的选项,就阔以提取二维码里的信息啦

前置知识,关于二维码

二维码补全也算misc的1个题型,最近摆烂打ctf做了一个有手就行的题,8过还是花了将近半个白天,而反观一块打的梁佬,只靠网上找相关资料和阅读官方源文档就还原出了二维码,只能说自己的学习能力有待提高

在做的时候,bbs里的1个wp帮忙少绕了很多弯,但也有些8好的地方,就是….这位大佬是纯手撕的,也就是把二维码的像素写在纸上然后手动根据掩码进行异或,这……只能说tql,真的头铁,于是俺一开始也陷入误区,拿出纸笔准备手撕来着

然后才知道在用对了工具后,这题可以有多简单

首先了解一下二维码的组成

可以看到,二维码的右半部分是数据块(data),而左半部分是校验块(error_correction),因此有了右半部分就等于有了全部信息,所以这道misc并不算撕二维码中的难题,只要把右半部分翻译就行了,但还是做了很久,因为当时头铁,抄在了纸上直接异或手撕,根本没想过网上有没有工具可以利用,只能说智商堪忧。

另外,标红的地方记录着二维码的样式信息,本题只能看到右上角的部分,但这就够了

一道简单例题的wp

下载文件,发现是个只有半截的二维码

然后回到这道题,根据半截二维码可读出右上方部分的样式信息,即format的后8位,为: 11010000,根据这个阔以确定掩码类型,由下图可知,为:H3

其中H代表纠错级别,为30%(即可还原30%损坏的数据块), 而3则代表掩码图案,如下图。至于掩码图案有啥用,上面的链接有写

于是在确定了掩码类型后,就阔以撕了!
先在上面说过的在线撕二维码的网站里把二维码都填进去

然后,根据确定的掩码图案类型,选中Tools->Data Masking(掩码异或)->对应的掩码类型(此处为3),进行异或

然后再选择Tools->Extract QR Information(强制解码),然后就出flag了……没错,就这么简单


二维码补全
https://bl4zygao.github.io/2022/01/13/二维码补全/
Author
bl4zy
Posted on
January 13, 2022
Licensed under