资讯详情

PNG文件结构与CTF隐写分析实战

📅 2026/10/29 18:32:03 | 华诺云谱 👁 阅读
PNG文件结构与CTF隐写分析实战
1. PNG文件结构与CTF中的常见考点在CTF比赛中MISC类题目经常涉及PNG图片分析。要真正掌握这类题目必须深入理解PNG文件的二进制结构。一个标准的PNG文件由8字节的文件头签名和多个数据块Chunk组成每个数据块都有特定的结构和功能。1.1 PNG文件头解析每个PNG文件都以固定的8字节头开始用十六进制表示为89 50 4E 47 0D 0A 1A 0A这8个字节各有用处首字节89用于检测传输系统是否支持8位数据非ASCII字符接下来的50 4E 47是ASCII字符PNG0D 0A是DOS风格的换行符1A是DOS下的文件结束符最后一个0A是Unix风格的换行符在CTF题目中出题人有时会故意修改这些字节来设置陷阱。我曾遇到过一道题文件头被改成了89 50 4E 47 0D 0A 1A 00导致常规图片查看器无法打开但用hex编辑器修正后就能正常显示。1.2 关键数据块分析PNG文件主要由三种关键数据块构成IHDR块图像头部信息固定长度13字节包含图像宽度(4字节)、高度(4字节)、位深度(1字节)、颜色类型(1字节)、压缩方法(1字节)、滤波方法(1字节)、隔行扫描方法(1字节)典型CTF考点修改宽度/高度隐藏部分图像非常规的颜色类型组合故意设置矛盾的参数如位深度与颜色类型不匹配IDAT块图像数据存储实际图像数据可能包含多个IDAT块数据采用zlib压缩常见考点在IDAT块中隐藏额外数据使用不正确的压缩方式多个IDAT块的异常排列IEND块图像结束标志固定内容00 00 00 00 49 45 4E 44 AE 42 60 82标记PNG文件结束出题人可能在IEND后追加隐藏数据常规图片查看器会忽略这些数据但hex编辑器可以查看。2. 十六进制分析实战从基础到进阶2.1 基础分析工具链工欲善其事必先利其器。以下是PNG分析必备工具hex编辑器WindowsHxD、010 EditorLinuxxxd、hexdump跨平台Bless、ImHexPNG专用工具pngcheck验证PNG结构完整性pngcrush修复损坏的PNG文件zsteg检测LSB隐写脚本工具Python的PIL/Pillow库binwalk检测文件中的隐藏数据2.2 典型CTF题目解析流程以一道实际CTF题目为例演示完整的分析过程初步检查$ file challenge.png challenge.png: PNG image data, 800 x 600, 8-bit/color RGB, non-interlaced $ pngcheck -v challenge.png发现pngcheck报告IHDR块CRC校验错误这是明显的提示。十六进制分析 用hex编辑器打开定位到IHDR块00000020: 00 00 00 0D 49 48 44 52 00 00 03 20 00 00 02 58 00000030: 08 02 00 00 00 12 34 56 78这里宽度是0x320(800)高度是0x258(600)但CRC校验值明显异常应为0x12345678。修复与验证 计算正确的CRC并修改后图片显示异常说明高度可能被修改。尝试调整高度值发现当改为0x158(344)时图片底部出现flag。2.3 高级技巧IDAT块分析IDAT块存储实际图像数据是隐写的热门位置。分析步骤提取所有IDAT块数据from PIL import Image import zlib im Image.open(challenge.png) idat_data im.info.get(compression, None) # 获取压缩数据 if idat_data: raw_data zlib.decompress(idat_data) # 分析raw_data...检查数据异常查找非图像数据如文本、特殊字节序列检查数据长度是否与图像尺寸匹配尝试不同的解压缩方式LSB隐写检测$ zsteg -a challenge.png这会检测每个颜色通道的最低有效位是否隐藏信息。3. PNG隐写术全解析3.1 常见隐写技术LSB隐写修改像素值的最低有效位来隐藏信息对图像视觉效果影响最小检测工具zsteg、stegsolve文件尾追加在IEND块后直接添加额外数据常规图片查看器会忽略这些数据检测方法比较文件尺寸与IHDR声明尺寸块注入插入自定义PNG块如tEXt、zTXt可能包含隐藏信息使用pngcheck查看所有块调色板修改对于索引颜色图像修改调色板条目可能导致某些颜色异常3.2 实际案例分析一道典型题目分析过程使用binwalk检测$ binwalk challenge.png DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 PNG image, 800 x 600, 8-bit/color RGB, non-interlaced 41 0x29 Zlib compressed data, compressed 123456 0x1E240 Zip archive data, encrypted...发现尾部附加了ZIP文件。提取隐藏数据$ dd ifchallenge.png bs1 skip123456 ofhidden.zip破解ZIP密码 题目提示密码隐藏在图片中使用stegsolve分析发现LSB平面有二维码扫描后得到密码。4. 实战演练完整解题过程4.1 题目描述给定一个PNG文件要求找出隐藏的flag。文件可以正常打开但看起来就是一张普通风景图。4.2 解题步骤基础检查$ pngcheck -v challenge.png ... challenge.png additional data after IEND chunk发现IEND后有额外数据。十六进制分析 在IEND标记(0xAE426082)后找到以下数据$ hexdump -C challenge.png | tail -n 10 0001f0a0 00 00 00 00 49 45 4E 44 AE 42 60 82 50 4B 03 04 0001f0b0 14 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 ...明显是ZIP文件头(PK)。提取ZIP文件$ dd ifchallenge.png bs1 skip$((0x1F0A012)) ofhidden.zip分析ZIP文件$ unzip -l hidden.zip Archive: hidden.zip Length Date Time Name --------- ---------- ----- ---- 256 2023-05-01 10:00 secret.txt需要密码才能解压。寻找密码 使用stegsolve检查图片在Red plane 0发现异常图案调整色阶后看到文字password: CTF2023!获取flag$ unzip -P CTF2023! hidden.zip $ cat secret.txt FLAG{PNG_H3x_4nalys1s_1s_Fun}4.3 经验总结系统化的分析流程很重要先常规检查再深入分析从简单到复杂逐步排查工具组合使用不要依赖单一工具命令行工具图形工具结合注意细节CRC校验错误往往是提示文件尺寸异常值得关注不寻常的颜色分布可能是线索保持怀疑能正常打开的图片不一定正常出题人常常在看似正常处设陷5. 进阶技巧与资源5.1 不常见PNG块分析除了标准块PNG还支持这些可能包含线索的块tEXt/zTXt/iTXt文本信息tIME最后修改时间pHYs像素物理尺寸sRGB标准RGB色彩空间gAMA图像gamma值查看所有块$ pngcheck -v challenge.png5.2 自动化分析脚本Python示例脚本检测异常块import struct import zlib import binascii def analyze_png(filename): with open(filename, rb) as f: data f.read() if data[:8] ! b\x89PNG\r\n\x1a\n: print(Not a valid PNG file) return pos 8 while pos len(data): chunk_len struct.unpack(I, data[pos:pos4])[0] chunk_type data[pos4:pos8] chunk_data data[pos8:pos8chunk_len] chunk_crc data[pos8chunk_len:pos12chunk_len] print(fChunk: {chunk_type.decode()}, Length: {chunk_len}) if chunk_type btEXt: keyword_end chunk_data.find(b\x00) keyword chunk_data[:keyword_end].decode() text chunk_data[keyword_end1:].decode() print(f Text: {keyword} {text}) pos 12 chunk_len analyze_png(challenge.png)5.3 推荐学习资源官方文档PNG规范https://www.w3.org/TR/PNG/zlib规范https://www.zlib.net/CTF相关CTF Wikihttps://ctf-wiki.org/Awesome CTFhttps://github.com/apsdehal/awesome-ctf工具集合StegToolshttps://github.com/DominicBreuker/stego-toolkitCTF工具包https://github.com/zardus/ctf-tools在实际CTF比赛中PNG分析题目往往结合多种技术。建议从基础开始逐步掌握文件结构、隐写技术和分析工具的使用。记住耐心和系统化的思维比知道所有技巧更重要。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑