您现在的位置是:娱乐 >>正文
ctf二维码修复
娱乐849人已围观
简介去年打某CTF线上赛,遇到一道二维码题,扫出来是乱码。当时第一反应是拿手机硬扫,结果识别失败。扔进QR Research,解码出来一串二进制,看着像被翻转了某些模块。这类题在CTF里不算少见,但每次碰 ...
去年打某CTF线上赛,码修遇到一道二维码题,码修扫出来是码修乱码。当时第一反应是码修拿手机硬扫,结果识别失败。码修扔进QR Research,码修解码出来一串二进制,码修看着像被翻转了某些模块。码修这类题在CTF里不算少见,码修但每次碰到都得花时间磨。码修
二维码本质上就是码修个矩阵,每个黑白块对应一个bit。码修标准QR码有40个版本,码修版本越高矩阵越大,码修纠错能力也越强。码修出题人最喜欢干的事就是在纠错码上做手脚——要么把纠错等级改掉,要么直接翻转几个数据模块,让你扫不出来但又能通过某种方式还原。
我习惯先用zbar扫一遍。命令行下zbarimg code.png,能出结果就说明二维码本身没被破坏,只是内容被加密或者编码了。扫不出来才进入修复流程。
定位图案是突破口
QR码三个角上有回字形定位图案,这三个图案几乎不会被改动,因为改了解码器直接找不到码的位置。修复的第一步就是确认这三个定位图案是否完整。用Python的OpenCV或者PIL把图片读进来,裁出三个角的小块,肉眼比对标准模板。
有一次遇到的情况是定位图案被人为缩小了一圈,导致解码器定位偏移。这种就得手动重建定位图案——按标准比例画回去。标准定位图案是7×7模块,外圈黑色,中间白色,核心3×3黑色。
import cv2 img = cv2.imread('qr.png', 0) # 二值化 _, bw = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) # 检测定位图案 detector = cv2.QRCodeDetector() data, points, _ = detector.detectAndDecode(bw) print(points) 如果points返回空,说明定位图案被破坏了,得手动找。
纠错码不是万能的
QR码的纠错能力分L/M/Q/H四级,分别能恢复约7%、15%、25%、30%的损坏数据。很多人以为开了H级就随便改,实际上纠错码本身也是数据,你改多了照样解不出来。CTF题里常见的套路是把纠错等级从H改成L,然后把数据区涂掉一大块,逼你用Reed-Solomon算法手动恢复。
Reed-Solomon解码可以用Python的reedsolo库。先把二维码矩阵按标准提取成码字序列,然后丢进去纠错。这步比较繁琐,因为要处理掩码、格式信息、版本信息。偷懒的办法是用qrcode库的底层接口,或者直接上pyzbar配合手动修图。
掩码和格式信息
格式信息藏在定位图案旁边,15个bit,包含纠错等级和掩码模式。掩码模式有8种,每种对应一个异或公式。出题人有时候不改数据,只把掩码模式改掉,这样解码器用错误的掩码去还原,得到的就是乱码。
修复方法是把格式信息读出来,手动算出正确的掩码,重新异或一遍数据区。格式信息本身也有BCH纠错,15bit里只有5bit是有效数据,剩下10bit是纠错码。用查表法最快,标准文档里都有。
我一般写个小脚本,把格式信息提取出来,暴力枚举32种可能,看哪种能让数据区的纠错码通过。过了就说明掩码对了。
实际案例
上个月有道题,二维码图片被加了一圈白边,然后整体旋转了3度。zbar直接跪。我先用OpenCV做透视变换,把三个定位图案的中心点找出来,映射回标准正方形。旋转角度小的时候,其实用cv2.minAreaRect就能矫正。矫正完再二值化,zbar就认了。
还有一次更离谱,出题人把二维码的每个模块从1×1像素放大到10×10像素,然后在每个模块内部画了个小十字。这种属于视觉干扰,二值化的时候用均值滤波先糊一下,再阈值处理,十字就没了。
修复二维码这事,核心就一句话:先保证定位图案和格式信息正确,再处理数据区和纠错码。顺序反了会浪费很多时间。工具链方面,zbar、OpenCV、reedsolo、qrcode这四个库够用了。剩下的就是耐心,一个模块一个模块地看。
Tags:
上一篇:好用的git工具
下一篇:渗透性测试目的事什么
相关文章
抓包修改充值金额教程
娱乐抓包修改充值金额,这事听着像黑客干的事,但实际操作起来门槛低得吓人。我见过一个初中生,用手机上的抓包软件,十分钟就把某款手游的6元首充改成了0.01元——当然,他最后没收到钻石,但服务器确实回了“支付 ...
【娱乐】
阅读更多跨网段ip扫描工具
娱乐去年冬天,我在一个客户现场排查网络故障。他们的办公区在10.0.1.0/24,机房服务器在192.168.10.0/24,中间隔了三层路由。一台新上架的监控服务器死活连不上数据库,ping都ping不 ...
【娱乐】
阅读更多网络违规行为自查整改
娱乐上个月我帮一个做自媒体的朋友查后台数据,发现他三篇阅读量不错的文章被平台打上了“内容待审核”的灰色标签。他挺纳闷,说没写啥敏感东西啊。我让他把原文调出来,逐段看——问题出在两张配图上。一张是地图,边界 ...
【娱乐】
阅读更多