github 项目链接
可参考jpeg的格式详解
JPEG原理简介
文件格式
JPEG文件大体上可以分成两个部分:标记码和压缩数据
标记码:
由两个字节构成,第一个字节是固定值0xFF
,后一个字节则根据不同意义有不同数值
在每个标记码之前可以添加数目不限的无意义的0xFF填充,连续的多个0xFF可以被理解为一个0xFF,并表示一个标记码的开始
常见的标记码:
- SOI 0xD8 图像开始
- APP0 0xE0 应用程序保留标记0
- APPn 0xE1 - 0xEF 应用程序保留标记n(n=1~15)
- DQT 0xDB 量化表(Define Quantization Table)
- SOF0 0xC0 帧开始(Start Of Frame)
- DHT 0xC4 定义Huffman表(Define Huffman Table)
- DRI 0XDD 定义差分编码累计复位的间隔(Define Restart Interval)
- SOS 0xDA 扫描开始(Start Of Scan)
- EOI 0xD9 图像结束
压缩数据:
前两个字节保存整个段的长度,包括这两个字节
注:
这个长度的表示方法按照高位在前,低位在后,与PNG文件的长度表示方法不同
例如长度是0x12AB,存储顺序为0x12,0xAB
Jpegsnoop
软件jpegsnoop的使用
看是否有注释,是否有info
最后一行,分析图片得到,在EOF数据块后有多余的内容,并且标注出了范围
根据这个范围,hex打开图片,得到一个base64(右侧)
转换base64,得到flag
flag{hahahaha_is_so_funny}