一,前记

这本来应该是一篇很早以前就应该总结的一个知识点。二维码的知识,远比我想象的要复杂一些,但是深入了解之后又比我想象的更加简单。

二,二维码知识要点

1 ,二维码的构成

先上个图,了解一下二维码的构成和功能块的分步

讲解上图:

定位图案:

这三个定位图案有白边叫作位置检测图案的分隔符。之所以三个而不是四个意思就是三个就可以标识一个矩形了。

原因是二维码有40种尺寸,尺寸过大了后需要有根标准线,不然扫描的时候可能会扫歪了。

对齐方式只有版本2以上(包括版本2)的二维码需要这个东东,同样是为了定位用的。

功能性数据:

格式信息存在于所有的尺寸中,用于存放一些格式化数据的。

版本信息在> =版本7以上,需要重复两块3 x 6的区域放置一些版本信息。

数据码和纠错码

除了上述的部分,其余全部都是数据码(Data Code)和纠错码(Error Correction Code)

2 ,二维码的版本信息

我们先说一下二维码一共有40个尺寸。官方叫版本Version。Version1是21 x 21的矩阵,Version 2是25 x 25的矩阵,Version 3是29的尺寸,每增加一个版本,就会增加4的尺寸,公式是:(V-1)* 4 + 21(V是版本号)最高版本40,(40-1)* 4 + 21 = 177,所以最高是177 x 177的正方形。

3,纠错码

纠错码表

4 ,最终编码

最终编码扭曲数据码和纠错码交替分开(过于复杂暂时不多讲)

三,二维码在CTF比赛中的使用

例一:2019年浙江省赛

题如上所示

在这里我们需要放置一个定位码,因为定位码必须要有三个才能进行定位(三个立即确定一个矩形,如果不满三个的话只有手动修补了),于是先手动的去放一个定位码

再看看格式化数据部分,因为新加进去的定位码周围没有任何的格式化区域,这个我们就可以通过其他的格式化区域来推算。

发现在格式化区域周围,并不和原图一致,那我们就可以将其填涂成一致。

(不一样的部分直接用鼠标点击就能出现黑块,只要涂成和原图一样的就好)

我们可以发现纠错码都已经换了,新上的定位码周围也有了格式化的信息。再进行分析,发现就会出现flag