1. 从流量包大海捞针Wireshark基础操作指南第一次接触CTF的Misc类题目时看到Wireshark里密密麻麻的数据包绝对会让人头皮发麻。去年我在一场比赛中就遇到过类似情况——一个300MB的流量包文件打开后显示有上万个TCP会话。当时我的做法可能对新手很有参考价值先过滤HTTP协议。在Wireshark顶部的过滤栏输入http瞬间数据包数量从五位数降到了两位数。这里有个实用技巧按住Ctrl键点击数据包列表的Protocol列Wireshark会自动生成对应协议的过滤语句。我习惯先用http.request.methodGET筛选出所有GET请求因为这类请求往往包含图片、JS等静态资源。当发现某个可疑的URL比如题目中出现的图片加密网站可以右键选择Follow - HTTP Stream查看完整会话内容。更高效的方法是直接导出HTTP对象。点击菜单栏的File - Export Objects - HTTP会弹出所有可导出文件的列表。我通常会按大小排序重点关注那些体积异常的文件——比如本该是几十KB的PNG图片却显示有几MB大小这种文件八成有问题。2. 破解损坏的PNG文件Hex编辑实战手册去年省赛的一道真题让我深刻认识到PNG文件结构的重要性。题目给了一个被截断的图片文件用普通看图软件打开只会显示文件损坏。但在Hex Editor推荐010 Editor或HxD里任何蛛丝马迹都无所遁形。**PNG的文件签名Magic Number**永远是89 50 4E 47 0D 0A 1A 0A对应的ASCII字符是.PNG....。我有个快速记忆法把十六进制数看作ASCII码89对应‰50是P4E是N47是G——就像在说PNG这个格式名。文件结尾必定是49 45 4E 44 AE 42 60 82IEND块。实际操作时有个坑要注意某些题目会故意在文件头尾添加垃圾数据。有次我按常规操作修复了文件头但图片还是打不开。后来发现出题人在文件末尾的IEND块后又追加了数据导致图片查看器无法正确识别文件结束位置。这时需要用Hex Editor的搜索功能CtrlF选择Hex Values模式搜索49 45 4E 44定位到真正的结束位置。3. 隐藏在像素中的秘密PNG文件结构解析真正让我栽过跟头的是PNG的IHDR块结构。这个位于文件头后第一个数据块包含图片的关键元信息。标准结构是长度00 00 00 0D (13字节) 类型49 48 44 52 (IHDR) 内容宽度(4字节) 高度(4字节) 位深(1字节) 颜色类型(1字节) 压缩方法(1字节) 过滤器方法(1字节) 隔行扫描方法(1字节)有次比赛遇到张钥匙图片正常显示就是把普通钥匙。但在Hex Editor里查看IHDR块时发现高度值被刻意改小原值00 00 04 00被改为00 00 02 00。当我把高度值恢复后图片底部突然多出了一行密钥文字这是因为修改高度值相当于告诉图片查看器只显示上半部分实际文件数据仍然完整存在。这种手法在CTF中很常见我后来总结出一个检查清单检查IHDR中的宽高是否合理特别是高度值查看颜色类型是否匹配位深比如索引色必须是8位确认压缩方法为0这是唯一允许的值检查CRC校验码是否正确4. 从Hex到Flag完整解题流水线去年决赛的一道题完美复现了这类题目的典型解题路径。题目提供一个包含Web流量的pcap文件关键步骤如下用Wireshark导出HTTP对象发现三个文件normal.png (正常风景照)data1.bin (1.2MB)data2.bin (2.4MB)用Hex Editor检查data1.binxxd data1.bin | head -n 5发现内部存在PNG签名但被额外数据包裹。使用dd命令提取有效部分dd ifdata1.bin ofkey.png bs1 skip1234其中1234需要通过搜索PNG签名确定修复后的key.png显示异常检查IHDR块发现高度值被修改。用Python脚本修复with open(key.png,rb) as f: f.seek(16) # IHDR高度值偏移量 f.write(b\x00\x00\x04\x00) # 恢复原始高度修复后的图片显示密钥CTF2023KEY用该密钥解密data2.binfrom Crypto.Cipher import AES with open(data2.bin,rb) as f: cipher AES.new(bCTF2023KEY, AES.MODE_ECB) print(cipher.decrypt(f.read()))最终解得的Flag经过Base64编码需要再做一次解码。这种层层递进的解题过程正是CTF竞赛最吸引人的地方——每个环节都考验着选手对技术细节的把握和问题拆解能力。