# 文件结构
# misc24
考察了bmp文件头和文件体
bmp文件头是以位图格式:424d 然后其他的参数都是从后往前读的 具体看下图
注意像素是文件体的字节数/3 (三原色)像素也等于图像宽×图像高 这道题是图像的长×高不对,提示是**flag****在图片上面。**宽是对的,根据像素推导高,然后在位图里改,最后导出就好
# misc25
考察png文件格式
Png有crc校验
图片的crc校验值由从第12个字节到第28个字节的十七位字节进行crc计算得到
所以拿到png图的题时应当先校验crc
49 48 44 52 00 00 03 84 00 00 00 96 08 02 00 00 00
这里使用脚本去根据crc校验值去爆破图像的宽高(脚本都在test.py中)
# misc26
Png文件同25题去跑脚本
# misc27
考点时jpg文件格式 这个参考
Jpg文件宽高是在4中 所以需要修改宽高时可以直接查找FFC0 6-7位是高 8-9位是宽
当什么提示flag在下面上面就修改高 宽看题目意思修改
Jpg的宽高是先高后宽
在第四块区域中0008 0008 是高和宽 注意要倒着看
# misc28
474946383961 文件头后是宽高
注意点 还有 Image Seperator里的下一帧宽高也需要改
这里插一句 gif动图是一帧一帧图片结合起来的 所以每一帧动图都会有Graphics Control Extension 和 Image Descriptor 9021 F9 04 01 32 00 02 00 2C 00 00 00 00 84 03 96 00 87
所以呢 改图片需要将整合图片的宽高和每一帧的宽高都要一起改
我直接搜索相同宽高一起改就完事了(跟bmp图片文件一样 宽高是倒的 倒着读就行)
这里引入stegsolve 图片查看器
# misc29
也是gif文件格式 根据题目修改高 记得每一帧的高都要修改
保存以后发现是一张动图,这里就用到了stegsolve工具 analyse模块中frame browser (动图帧格式预览)一帧一帧查看 就获得了
# misc30
还是bmp图片格式 所以按照题目要求修改 宽度950 (3B6)就行 注意得倒着写
# misc31
Bmp图片格式 按照要求高度是对的 修改宽度 根据字节数手搓宽度 注意字节数得除以3才得到像素,因为三原色 但是求解的宽度不是整数需要向下取整
# misc32
考察了png 的crc检验 把文件放到脚本里去跑得出宽和高
# misc33
和上题一样 跑脚本
# misc34
根据提示用脚本遍历宽度就行
# miscc35
不能理解为什么高度也会被改掉
那么既然改了为什么高度是600
那如果遍历高度和宽度呢
发现数据量过于庞大 然后上网搜了下 如何批量检测损坏文件
引入imghdr库 但是跑出来的甚至是修改好的 也是被检测出来是损坏的 本来题目给的就是损坏文件
这道题
这边跑脚本的时候注意 宽高所占的字节数 一个十六进制字母占到0.5个字节 一般这个位置是2-4个字节 如果2个字节的话要用短整型(h) 如果4个字节的话要用整型(i)struct.pack('>h',i)如果像bmp是倒着写的可以[::-1]
# misc36
和上一道同理,如果出现有图像但是不是所需要的图像可以考虑改大图片的高,或许就有用呢,一般高度改了确实能隐藏,跑的脚本在文件下。
# misc37
打开文件是发现是动图,提示也是flag在图片里所以gif一张一张分离,用stegsolve analyse frame browser ctfshow{2056782cd57b13261dcbbe3d6eecda17}
# misc38
提示是还是flag在图片里,打开后发现是个png文件,看了wp以后才知道这个提示是要先png转到gif格式 工具png转gif工具 然后和上一题同样操作就行了
ctfshow{48b722b570c603ef58cc0b83bbf7680d}
使用apngdis.exe(APNG Disassembler)工具分离文件也可
# misc39
提示是flag如流水,图片帧间隔时间隐写,identify -format "%T " misc39.gif > 1.txt
这个实在看不懂了网上找吧
flag一般是32位的加上格式是41位,
可以看到3637循环,可以想到01二进制循环,第一位是37 所以37为1,36为0
转化为287,287 /41=7 所以7位为一组,转化字符串类型 然后flag就是转化后的字符串