资讯动态

ctfshow--misc入门-图片篇(信息附加)剩余部分

发布时间:2026/8/26 16:46:06 来源:尧图企业网站定制
详细的原理讲解与知识拓展可在我专栏里找到2026/4/4发布misc11解压图片后未发现flag信息使用Tweakpng工具进行操作删除第二个IDAT数据块保存修改后的图片重新打开图片查看结果解压图片发现没有flag使用Tweakpng工具把第二个 IDAT 数据删除-保存-重新打开图片 小贴士除了 TweakPNG你也可以使用010 Editor或WinHex搜索 PNG 的文件头89 50 4E 47。如果你发现文件里有两个PNG 文件头直接把第一个头之前的所有内容删掉或者把第一个 PNG 文件截断通常也能直接拿到 Flag。misc12和上题一样但是这题有30个IDAT块用010Editor看了一下没有发现出错的IDAT块后面也问AI找了各种办法尝试找到垃圾idat但是没找到。但是网上有大佬说“010editor是可以的不过每次删除之后要重新加载png.bt模板不然他会依照前一次的地址去定位IDAT但是由于删除了一块数据块所以依照的地址就是错的每删除一次就重新加载一次PNG.bt模板就可以了。”在一番摸索和了解原理之后发现。。。。在 010 Editor 里可以用Ctrl F 搜索十六进制78 9C。发现chunk1和9的都有78 9C也都有49 44 41 54那就是有两个文件第一个是垃圾文件将真正的文件挤到后面了。最后就确定了Chunk 9 才是真正的开始那么 Chunk 1 到 Chunk 8 就是用来凑数的垃圾。删掉前八个再保存就好了misc13每隔一位选取一个字符连起来就是ctfshow由此可知flag在这块地方但是按照规律选取正确的数值。是LSB最低有效位隐写的变种解题榜里的wp代码是# 1. 确保数据是字符串加引号 a 631A74B96685738668AA6F4B77B07B216114655336A5655433346578612534DD38EF66AB35103195381F628237BA6545347C3254647E373A64E465F136FA66F5341E3107321D665438F1333239E9616C7D flag # 2. 步长为4意味着每4个字符跳一次取2个跳过2个 for i in range(0, len(a), 4): # 意思是从索引 i 开始取到 i2 结束不包含 i2 hexStr a[i : i2] # 将十六进制字符串转为字符 flag chr(int(hexStr, 16)) print(flag)但是我自己复制HxD的十六进制数赋值到a就是。。俺不中了。。。代码逻辑# 假设 raw_data 是你从 010 Editor 里复制出来的纯 hex 字符串不带空格 # 例如 631A74B96685... raw_data 631A74B96685738668AA6F4B77B07B2161145365A534346578612534D038EF66AB35103295... flag # 步长设为 4因为每 2 个 hex 字符代表 1 个字节。 # 有效数据占 2 字符干扰数据占 2 字符所以一共跳过 4 个字符。 for i in range(0, len(raw_data), 4): hex_byte raw_data[i:i2] # 取前两个字符 flag chr(int(hex_byte, 16)) print(flag)错误代码错在哪了在 Python 中如果你要把一串字符比如十六进制数据赋值给变量必须用引号单引号或双引号把它括起来告诉程序这是一个字符串。现在的写法a 631A74B9...Python 解释器会尝试把631A74B9...当作一个数字整数来解析。但是十六进制里的字母A,B,C等不是合法的十进制数字而且这串东西太长了所以 Python 直接报错“无效的十进制字面量”。如何纠正你需要做两步修改给数据加上引号把那一长串 Hex 数据变成字符串。确认步长逻辑根据之前的分析有效数据和干扰数据是交替的每 4 个 hex 字符取前 2 个你的range(0, len(a), 4)逻辑是正确的只要数据源对了就能解出来。当然傻瓜办法也可以直接手动删除间隔的那个字符不要直接框选第一列。你需要先选中第一个有效字节63。然后按住Ctrl(或Cmd) 点击下一个有效字节74再点66... 手动多选这太慢了。或者使用脚本/模板010 Editor 支持编写简单的脚本来提取每隔一个字节的数据。这张照片是错误示例感谢读者纠正错误答案错误是因为多提取了数据。题目设计的模式是[有效数据] [垃圾数据] [有效数据] [垃圾数据]。我们需要把那些“垃圾数据”剔除掉剩下的拼起来才是真正的 Flag。错误做法直接在菜单View-Line Width选择2第一列就是答案键盘按住alt就可以直接框选住第一列核心错误点没有跳过“间隔字节”第一行63(高亮) - 对应字符c1A(未高亮) - 这是一个干扰项/间隔符74(高亮) - 对应字符tB9(未高亮) - 这是一个干扰项/间隔符原先操作误区“键盘按住 alt 就可以直接框选住第一列”。在 010 Editor 的默认网格视图中如果直接框选第一列或者复制时没有设置好步长很可能把63和1A连着一起复制了或者在脚本处理时没有执行“隔一个取一个”的操作。结果对比得到的错误 Flagctfshow{ae6e3ea48f518b7e42d7de6f412f839a}(注意看花括号里的内容非常长而且包含了很多非标准的 hex 字符组合或者长度不对)正确的数据流应该是只取63,74,66,73... 而丢弃1A,B9,85,86...不过我010到期了我现在再做就改用成了HxD在 HxD 中如何确认用鼠标左键从第一个字节开始按住 Ctrl 键逐个点击有效字节如第1、3、5、7...个字节HxD 会高亮选中它们。右键 →复制为 → 十六进制值即可得到纯有效数据的 Hex 字符串。HxD 是一款轻量级的十六进制编辑器它的核心设计是固定格式显示默认每行 16 个字节。HxD 不支持自定义每行的字节数Line Width也不支持像 010 Editor 那样通过“Edit As编辑为”来改变文件的显示布局。因此无法在 HxD 中将其改成“两列显示”。所以只能手动不行我自己重新做也是错的。。也是ctfshow{ae6e3fa48f528b1742d72e6341298380}待我问老师。。。。SOS但是实际正确答案ctfshow{ae6e3ea48f518b7e42d7de6f412f839a}misc141.照惯例先用winhex打开搜索ctf等关键词发现没有2.打开tweakpng查看数据块是否异常3.拖进kali系统里用foremost分离发现分离出来的东西没用4.这个时候启动binwalk神器输入指令binwalk -e misc14.jpg发现分离出来的东西没有生成 一个新的文件5.我们接下来用dd强制指令 dd ifmisc14.jpg offlag.png skip2103 bs1dd ifmisc14.jpg offlag.jpg skip2103 bs1其中if为原有的图片of输出分离后的图片skip为DECIMAL中的数值bs固定为1 输入之后就可以在桌面上看见一张新生成叫做flag的照片了其中的字符串就是flagmisc15题目提示flag被跳过去了。这不是一张普通图片而是一个伪装成图片的小程序。flag 根本不在图片可见区域里而是藏在文件的二进制数据里而且被程序的 “跳转指令” 跳过了。只有十六进制编辑器能直接看到文件最底层的数据。所以用010Editor打开查找程序里大概是这样写的; 这里本来有 flag jmp 跳过flag ; 直接跳过去不让你看到 跳过flag: ...你直接打开图片→ 程序执行跳过 flag → 你看不到你解压、查看属性→ 都没用只有直接编辑二进制才能把 flag 揪出来。misc16题目提示flag在图片数据里。使用binwalk命令分离扫描结果解读你看到的这三行字是binwalk扫描文件结构后的报告第一行0PNG image...意思这是一个标准的 PNG 图片文件分辨率 900x150。结论这是文件的“头”也就是你正常看到的那张图。第二行41Zlib compressed data...意思在文件的第 41 个字节处发现了Zlib 压缩数据。结论这是 PNG 图片的核心数据块IDAT 块。PNG 图片本身就是用 Zlib 算法压缩像素数据的所以这一行是正常的图片内容暂时不用管它。第三行3540LZMA compressed data...意思在文件的第 3540 个字节处发现了LZMA 压缩数据。结论这才是关键这才是 Flag后面使用分离命令binwalk -e misc16.png-e参数会自动把扫描到的 LZMA 数据提取出来放进一个文件夹。查看提取结果1ls 2cd _misc16.png.extracted # 进入自动生成的文件夹 3ls处理提取出的文件这题直接打开DD4这个文件就行了你会看到一个没有后缀名或者后缀是.7z/.lzma的文件。尝试直接解压7z x 文件名。如果解压报错可能需要手动给它加个后缀名mv 文件名 flag.7z或者用010 Editor打开它看看是不是“伪加密”或者文件头损坏。ctfshow{a7e32f131c011290a62476ae77190b52}misc17依旧是先binwalk但是-e之后什么都分离不出来需要用到zsteg工具zsteg工具用于检测被隐写在pngbmp图片里的数据。在原理和知识拓展文章的misc17部分里有完整的安装和使用指南安装好之后开始使用发现隐藏的数据位置处于extradata:0有3544 bytes的隐写内容将数据提取出来zsteg -E extradata:0 misc17.png 1.txt然后再binwalk -e把1.txt中的数据分离出来binwalk -e 1.txtmisc18题目提示flag在标题、作者、照相机和镜头型号里。看提示就知道估计和前面几题解法不一样在查找资料后知道要在在线网站看详细的exif信息。那么在这里推荐一个EXIF信息查看器很多大佬都有在用这个在线网站由此可得flagctfshow{325d60c208f728ac17e5f02d4cf5a839}misc19题目提示flag在主机上的文档名里。和18一样查看详细的exif信息就可以拿到flag。ctfshow{dfdcf08038cd446a5eb50782f8d3605d}misc20题目提示flag在评论里。同18关查看详细的exif信息读出来ctfshow{c97964b1aecf06e1d79c21ddad593e42}misc21题目提示flag在序号里。依旧18,分别将X分辨率 Y分辨率X定位Y定位进行hex转换拿到flagctfshow{e8a221498d5c073b4084eb51b1a1686d}misc22题目提示flag在图片里。方法1exiftool -b -ThumbnailImage flag.jpg thumbnail.jpg方法2使用010删除前面的ffd8的十六进制块使用工具exiftool 参考文献https://www.rmnof.com/article/exiftool-introduction/提取隐藏数据进阶有时候 Flag 不是直接显示的文本而是藏在元数据里的另一个文件比如缩略图或 XMP 数据。exiftool可以把它们“扣”出来。提取缩略图很多题目把 Flag 写在缩略图里示例exiftool -ThumbnailImage -b misc22.jpg 1.jpg-b表示以二进制格式输出数据。 thumbnail.jpg把提取出的数据保存为新文件。提取 XMP 数据另一种常见的藏匿位置示例1exiftool -xmp -b misc22.jpg data.xmp提取后可以用记事本打开data.xmp查看里面有没有 Flag。misc23题目提示flag在时间里。继续用exiftool其实这题直接用之前的在线工具也可以看首先输入命令查看exiftool misc23.psd发现History When : 1997:09:22 02:17:0208:00, 2055:07:15 12:14:4808:00, 2038:05:05 16:50:4508:00, 1984:08:03 18:41:4608:00UTC是国际时UTC8就是国际时加八小时是东八区时间是北京时间。GMT就是指格林尼治所在地的标准时间800就是东八区的时间即北京时间。Unix时间戳是一个计算机记录时间的方式它代表从1970年1月1日0点0分0秒开始到那个时间点所经过的总秒数。转换进制可以直接用随波逐流或者其他在线工具你把1997:09:22 02:17:02这四个时间点通过在线工具转换成了对应的总秒数十进制数字87486582226992376882156662245460377706即时间戳转换为 874865822 2699237688 2156662245 460377706转hex十六进制拼接得出flagctfshow{3425649ea0e31938808c0de51b70ce6a}misc42题目提示H4ppy Apr1l F001’s D4y 愚人节到了一群笨蛋往南飞一会儿排成S字一会儿排成B字。根据提示得出答案和“F001”这几个字符有关用010 editor打开后使用十六进制搜索F001全部显示高亮部分的形状就是flag这题真是有点离谱了脑洞太大了ctrlf搜索F001点旁边的All,就会出现高亮看其组成的形状就是flag最终得出flagctfshow{fcbd427caf4a52f1147ab44346cd1cdd}总结 核心知识点总结在 CTF Misc 图片题中Flag 通常藏在三个位置文件头/尾部、元数据区、二进制数据流。表格知识点核心工具原理/特征典型场景1. 元数据隐写exiftool图片拍摄时会记录相机参数、GPS、软件版本等信息。出题人会修改这些字段或添加自定义字段。题目提示“文档名”、“作者”、“拍摄时间”、“Exif”。2. 二进制结构隐写010 Editor/WinHex直接查看文件的十六进制代码。出题人会在文件末尾追加数据或在文件中间插入特殊字节序列。题目提示“搜索”、“16进制”、“文件尾”、“Binwalk无果”。3. 数据编码转换在线工具 / Python将提取出的数据时间、数字进行进制转换Dec→Hex→Ascii或编码解码Base64。提取出一串数字、乱码或提示“Timestamp”、“Hex”。️ 做题方法论梳理遇到一张图片不知道从何下手时请按以下标准流程操作第一步静态分析看“表面”拿到图片先不要急着用工具先看题目提示。看文件格式是 JPG、PNG 还是 PSDPSD 图层多JPG 有压缩。看题目描述提示“黑客”、“时间” → 查时间戳。提示“文档名”、“主机” → 查元数据。提示“搜索”、“010” → 查二进制。第二步元数据检查查“户口”工具exiftool这是最快的一步只需要 1 秒钟。命令exiftool filename重点关注字段Comment/User Comment最常见的藏 Flag 处。Author/Artist作者名。Host Computer/Software软件或主机名如你遇到的 misc19。GPS Latitude/Longitude地理位置。Thumbnail Image缩略图可用exiftool -ThumbnailImage -b file thumb.jpg提取。判断如果这里没找到 Flag 或明显的编码字符串进入下一步。第三步二进制结构分析查“肉身”工具010 Editor/WinHex当元数据里没有东西时说明 Flag 藏在文件的“肉”里。操作 1看文件尾拖动滚动条到最后看是否有明显的 Flag 字符串或者类似PK压缩包、flag{的字样。操作 2全局搜索搜索关键词flag、ctf、key。搜索十六进制如题目提示F0 01就在 010 Editor 里搜索 Hex 值。观察异常看是否有大量重复的字节或者文件中间突然出现了不属于图片格式的数据块。操作 3数据提取选中异常数据复制为 C 语言数组或直接保存为文件。第四步数据处理与解码“翻译”当你从上述步骤中提取出一堆“乱码”或“数字”时需要根据提示进行转换。场景 A时间戳特征10 位数字如874865822。操作使用 Unix 时间戳转换工具 → 转为日期或 Hex。场景 B十六进制字符串特征3425649e...这种 0-9 和 a-f 组成的串。操作Hex 解码 → 转为 ASCII 文本。场景 C特殊编码特征Base64结尾有、Brainfuck只有-、Ook!。操作使用 CyberChef 或在线解码工具。结语图片隐写藏得再深也怕“深扒”。从exiftool看属性到010 Editor搜二进制再到转 Hex这一路其实就是把文件翻个底朝天。记住Flag 不凭空消失只是换了马甲。掌握这套“看属性、搜底层、转格式”的组合拳下次遇到图片题直接按流程走。小tips过段时间整理过后将会在本号分享资源1.word版解题步骤2.word版原理与知识拓展3.与本文章配套的ctfshowmisc入门部分原题以及部分解出的答案.zip欢迎大家相互交流各位大佬教教我

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价