Maldev-Academy/QRSteganography

GitHub: Maldev-Academy/QRSteganography

将任意二进制数据编码为二维码PNG图像并解码还原的隐写工具,支持大文件分块、元数据保留和Reed-Solomon纠错。

Stars: 15 | Forks: 3

# QRSteganography 将任意数据编码为一个或多个 QR 码 PNG 图像,并将其解码还原,作为一种数据混淆的隐写术形式。
## 使用方法 只需编译并使用 [QRGenerate.exe](https://github.com/Maldev-Academy/QRSteganography/tree/main/QRGenerate) 命令行工具,通过以下命令对给定文件进行编码和解码: ``` .\QRGenerate.exe Usage: QRGenerate.exe encode QRGenerate.exe decode ```
## 它是如何工作的? ### 编码 1. 输入文件被读入内存,并拆分为最大 [CHUNK_PAYLOAD_MAX](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.h#L88) 字节的块(该值源自 [配置的 ECC 级别](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.h#L31) 下 Version 40 QR 码的容量)。 2. 每个块都被 [封装在一个二进制数据包中](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrGenerate.c#L308),其中包含一个 4 字节的 [魔数签名](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.h#L81)、总块数、当前块索引、原始文件大小以及嵌入的文件名。 3. 每个数据包使用字节模式编码为 QR 码,并自动选择版本 (1-40) 及掩码,以将惩罚分数降至最低。 4. QR 码通过 [WIC 渲染为 8bpp 灰度 PNG](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrGenerate.c#L10)),每个模块缩放为 8x8 像素,并带有 4 个模块的静区边框。 5. PNG 文件按顺序写入为 `Qr0000.png`、`Qr0001.png` 等。 ### 解码 1. 扫描输入目录中的 `Qr*.png` 文件。解码第一个文件以从数据包头中提取总块数和原始文件大小。 2. 每个 PNG 作为 [灰度图像](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrGenerate.c#L215C14-L215C30) 加载,使用 [Otsu 自适应阈值](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.c#L1565) 进行二值化,并逐行扫描 [`1:1:3:1:1` 探测图形](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.c#L1791)。 3. 检测到的探测图形被验证为 [顶点](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.c#L1759),通过 [透视投影](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.c#L1437) [分组为网格候选](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.c#L2445),并通过 [迭代透视微调](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.c#L1955) 进行优化。 4. 通过透视变换对网格进行采样,按 [锯齿顺序](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.c#L1127) 读取数据位,解掩码,解交织为 [Reed-Solomon 块](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.c#L1150),并使用 [Berlekamp-Massey](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.c#L825) 算法配合 [Forney 算法](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.c#L914) 进行纠错。 5. 纠正后的有效载荷 [按模式解析](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrInternals.c#L1377)(数字、字母数字、字节、汉字、ECI),并提取块数据包。 6. 所有块按索引 [按顺序重组](https://github.com/Maldev-Academy/QRSteganography/blob/main/QRGenerate/QrGenerate.c#L545) 为原始文件并写入磁盘。输出文件名从嵌入的数据包头中恢复。 ### 块数据包布局 ``` [magic:4][totalChunks:4][chunkIndex:4][origSize:4][nameLen:2][name:nameLen][payload:...] ```
# 演示 image
标签:DNS 反向解析, Maldev, meg, PNG图片, WIC, 中高交互蜜罐, 二维码, 信息安全, 命令控制, 客户端加密, 恶意软件开发, 数据混淆, 数据编码, 数据采集, 数据隐藏, 文件传输, 网络信息收集, 网络安全, 规避检测, 防电子取证, 隐写术, 隐私保护