ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ctf-wiki 现实世界编码指南:条形码与二维码(EAN-13 / Code-39 / Code-128 / QR Code)原理与 CTF 实战识别

2026/9/27 9:03:06 拓冰建站 浏览量
ctf-wiki 现实世界编码指南:条形码与二维码(EAN-13 / Code-39 / Code-128 / QR Code)原理与 CTF 实战识别 文档网络安全教程【免费下载链接】ctf-wikiCome and join us, we need you!项目地址https://gitcode.com/gh_mirrors/ct/ctf-wiki点击查看免费下载现实世界中无处不在的条形码与二维码是 CTF Misc杂项赛题中编码类题目最常见的素材之一题目会直接给出包含条形码或二维码的图片要求选手识别出其中隐藏的信息再结合其他编码如 Base64、十六进制层层解码得到 flag。本指南基于 ctf-wiki 仓库 docs/zh/docs/misc/encode/modern.md 展开完整讲解条形码的国际标准体系EAN-13、Code-39、Code-128、二维码的分类与 QR Code 的结构原理并给出可复现的识别、解码与编程验证方法读完即可应对绝大多数扫码类 CTF 题目。编码体系全景现实世界编码在 CTF 中的位置在 ctf-wiki 的 Misc杂项知识体系中编码转换Encode是三大主线之一其余为信息搜集 Recon、数字取证与隐写分析 Forensic Stego详见 misc 简介。编码章节按应用领域分为三篇通信领域常用编码电话拨号编码、Morse 摩尔斯电码、敲击码Tap code、曼彻斯特编码、格雷码计算机相关的编码字母表编码、ASCII、Base 系列Base64/Base32、霍夫曼编码、XXencode、URL 编码、Unicode 与 HTML 实体编码现实世界中常用的编码本篇主题条形码与二维码。在 CTF 实战中条形码/二维码题目通常作为整条解题链的第一环图片中的码承载的往往不是最终 flag而是一段仍需进一步解码的密文。因此理解码的类别 → 如何识别 → 如何解码这一完整流程是把 Misc 题目做下去的前提。条形码用黑白条纹表达信息的图形标识符基本定义与工作原理条形码Barcode由宽度不等的多个黑条和空白按照一定的编码规则排列用以表达一组信息的图形标识符。其工作原理建立在简单的光学对比上黑色条Bar与白色空Space对光的反射率不同扫描设备读取这种明暗交替的图案将其转换为电信号再按预定的编码规则还原为数字或字符。一个完整的条形码通常包含以下组成部分静区Quiet Zone条形码两侧的空白区域用于让扫描器识别码的起止边界起始符 / 终止符Start/Stop标示数据编码的起点与终点数据符Data Characters承载实际信息的条空组合校验符Check Character用于校验数据读取的正确性供人识读字符Human Readable码下方可直接阅读的数字/字母。条形码属于一维码其信息容量受限于宽度方向上的条空组合数无法像二维码那样在二维平面内大幅提升密度因此多见于商品流通、物流管理等需要快速扫描数字标识的场景。国际标准EAN / Code-39 / Code-128条形码存在多个国际标准不同标准在字符集、码长与编码密度上各不相同。原文档给出的三个核心标准如下标准全称/说明码制特点EAN-13国际物品编码协会制定的商品条码标准13 位数字全球零售商品通用前 2~3 位为国家/地区前缀末位为校验码Code-3939 字符可变长码制可编码 0-9 数字、大写 A-Z 字母及- . space $ / %等符号共 39 个字符实际每个字符由 9 个模块组成Code-128128 字符高密度码制支持 ASCII 全 128 字符密度高、体积小广泛用于物流、企业内部管理其中EAN-13是 CTF 中最常见的条形码标准。它的 13 位数字中最后一位是校验位校验算法Modulo 10为从第 2 位开始对奇数位从右往左数第 2、4、6……位求和并乘以 3对偶数位求和两者相加后用 10 减去该和除以 10 的余数得到校验位。# EAN-13 校验位计算示例 digits [6, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 前 12 位 odd_sum sum(digits[1::2]) * 3 # 奇数位索引1,3,5... even_sum sum(digits[::2]) # 偶数位索引0,2,4... check (10 - (odd_sum even_sum) % 10) % 10 print(check) # 校验位实际解 Misc 题时无需手写校验算法直接用识别工具读取数字即可。CTF 中的条形码识别实战识别条形码的典型工具链ZBar / ZXing开源条码识别库支持 EAN-13、Code-39、Code-128 等几乎所有常见码制命令行用法zbarimg barcode.png在线条码识别原文档推荐使用条形码在线识别工具适合单张图片快速识别Python 库pyzbar封装 ZBarPIL适合批量识别或写入自动化脚本from PIL import Image from pyzbar import pyzbar img Image.open(barcode.png) for code in pyzbar.decode(img): print(code.type, code.data.decode())识别技巧若直接扫描失败优先检查静区是否足够、图片是否旋转倾斜、分辨率是否过低先用图像处理增强对比度再识别。部分题目会把条形码放在纯色背景上或与其他编码混排此时需先切割出条码区域。二维码二维平面内的数据符号信息基本定义与分类二维码2D Barcode用某种特定几何图形按一定规律在平面分布的黑白相间图形记录数据符号信息。与一维条形码相比它在纵横两个方向上都携带信息因此信息密度高、容量大、纠错能力强且支持汉字、URL、二进制数据等多种内容类型。按结构形式二维码分为两大类堆叠式 / 行排式二维码Stacked / Linear把一维码在高度方向上层叠多行组成代表码制有Code 16K、Code 49、PDF417。其中 PDF417 应用最广常见于身份证、驾驶证、登机牌等场景CTF 中偶尔出现。矩阵式二维码Matrix在矩形区域内用黑白模块Module的排列记录信息代表码制即QR CodeQuick Response Code也就是日常所说的二维码。QR Code 的结构原理CTF 中出现的二维码绝大多数是 QR Code。一个标准 QR 码由功能图形与数据区域构成原文档配图 qr1.jpg 展示了 QR 码数据模块的划分方式qr2.jpg 则标注了各个功能区域的布局。结合图例QR 码的关键结构如下结构作用Finder Pattern位置探测图形位于三个角落的黑色同心方形帮助扫描器快速定位码的方位与旋转方向Format Info格式信息记录纠错等级与掩码Mask信息紧邻 Finder PatternVersion Info版本信息记录 QR 码版本V1~V40版本越高模块数越多、容量越大Timing Pattern定位时序线黑白交替的线条用于确定模块坐标Alignment Pattern对齐图形用于校正图像畸变版本 ≥ 2 的 QR 码才有Data and Error Correction Codewords数据与纠错码字承载实际编码内容如文本、URL与 Reed-Solomon 纠错数据Quiet Zone静区码四周至少 4 个模块宽的空白区域保证识别边界QR 码支持四种纠错等级L/M/Q/H纠错能力分别约 7%/15%/25%/30%即使码面部分污损、遮挡仍可正确解码。在 CTF 中这一特性常被用于部分遮挡二维码题目只要遮挡面积不超过纠错能力理论上仍可通过工具强制解码。QR 码的编码模式包括数字模式、字母数字模式、字节模式可编码 UTF-8 中文与汉字模式Kanji。识别工具ZBar、ZXing会自动探测模式并还原内容。CTF 中的二维码识别与隐写实战标准识别流程用zbarimg或pyzbar直接解码zbarimg qr.png # 输出: QR-Code:flag{...}若图片经过旋转、反色或对比度异常先预处理旋转校正、取反、二值化再解码from PIL import Image, ImageOps img Image.open(qr.png).convert(L) img ImageOps.invert(img) # 反色 img img.point(lambda x: 255 if x 128 else 0) # 二值化进阶考点——二维码隐写QR 码角上的三点定位符反色/缺失某些题目会把三个位置探测图形反色或挖去直接扫描失败若图片标注为QR 码先检查定位角掩码Mask异或QR 标准中有 8 种掩码方案正常情况下工具自动处理若题目刻意展示加了掩码的原始矩阵需按 ISO/IEC 18004 规则还原二维码与隐写结合QR 码解码结果往往是中间密文继续按 计算机相关的编码 中的 Base64、十六进制等方向处理。在线识别工具原文档推荐使用条形码在线识别该工具同时支持一维码与二维码ZXing 的在线解码页也是常用备选。解码失败时优先检查图片是否为伪码用绘图软件随意画的、不符合 QR 规范的图。与其他编码章节的联动现实世界编码题目很少孤立出现解题链条通常横跨多个编码章节条形码 → Base 编码EAN-13 读出的 13 位数字可能直接被当作十进制数再转十六进制/ASCII二维码 → 摩尔斯/敲击码QR 内容可能是点划串Morse或数字矩阵Tap code对应 通信领域常用编码二维码 → 隐写识别出内容后若信息仍不完整回到 取证隐写前置技术 检查图片数据是否有附加文件可用binwalk、strings检查。推荐的解题顺序是先识别码制 → 解码出明文 → 判断是否仍为编码根据字符集特征如全字母表、含结尾等→ 逐层解码直至出现 flag 格式。总结条形码与二维码是现实世界编码这一 CTF 考察面的核心掌握要点如下条形码三标准EAN-1313 位数字商品码、Code-3939 字符、Code-128128 字符识别工具 ZBar/ZXing 或在线识别均可二维码两分类堆叠式Code 16K、Code 49、PDF417与矩阵式QR CodeCTF 以 QR Code 为主QR 结构要熟记位置探测图形、格式信息、版本信息、时序线、对齐图形、数据与纠错码字、静区这直接关系到为何扫描失败的排查方向识别失败先预处理旋转、反色、二值化、补静区再考虑是否被人为篡改定位角缺失、掩码异或解码结果不一定是 flag结合 通信编码 与 计算机编码 继续逐层解码。将本指南与 ctf-wiki Misc 编码章节的其他两篇结合阅读即可构建完整的编码识别—解码—还原 flag实战能力。赞分享文档网络安全教程【免费下载链接】ctf-wikiCome and join us, we need you!项目地址https://gitcode.com/gh_mirrors/ct/ctf-wiki点击查看免费下载相关推荐OpenCvSharp条形码识别EAN-13与QR码扫描实现OpenCvSharp条形码识别EAN 13与QR码扫描实现 引言从像素到数据的跨越 在现代商业与物流系统中条形码Barcode与二维码QR Cod计算机视觉图像处理CTF-Wiki 逆向混淆专题Self-Modified Code 自修改代码原理与 GWCTF 2019 re3 实战CTF Wiki 逆向混淆专题Self Modified Code 自修改代码原理与 GWCTF 2019 re3 实战 本文基于 CTF Wiki 逆向工程文档网络安全教程终极PHP二维码识别指南快速掌握QR Code检测与解码技术终极PHP二维码识别指南快速掌握QR Code检测与解码技术 想要在PHP项目中轻松实现二维码识别功能吗php qrcode detector decodeOCR图像处理上一篇Vega 表达式解释器vega-interpreter在 CSP 严格策略下安全运行可视化下一篇LiteLLM 原生 Google GenAI 接口实战generate_content 四函数、参数映射与流式 SSE 全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考