在kali下

github项目

https://github.com/abeluck/stegdetect

原理简介

文件格式

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

stegdetect

看用什么工具修改加密过

显示有多出的34字节,hex打开后,定位,找到该多余的字节(给出在C0前有34字节无意义填充,可以数出来 C0指的是FFC0)

根据jpeg的格式,在每个标记码之前可以添加数目不限的无意义的0xFF填充, 所以我在FFD8开始~FFC0结束前,隐藏了一段payload。

得到一串十六进制数,当时题目给了提示2 or 3 推出 1. 其实是想给提示,这串数字,实际是十进制数,要把它先转换为十六进制数。最后转换成ascii码

评论