取证隐写
取证隐写
bytearray字节数组
将文件以二进制数组的形式读取
data = bytearray(open('test.png','rb').read())
图片分析
图像分析设计到文件复杂的格式,以及涉及到元数据,信息丢失和无损压缩,校验,隐写或者可视化数据编码的分析解密
元数据
描述数据的数据,主要是描述数据属性的信息,通常隐藏一些hint,password
右键属性,strings命令都可以查看到隐藏信息(文件头或者文件尾)
identify 命令
获取一个或多个图像文件的格式和特性
identify -verbose test.png //查看图片的详细信息
-format
指定显示的信息
identify -format “%wx%h” image.jpg //只查看图片的宽高 以像素为单位
像素值转化
给了一串
255,255,255,255,255...........
是RGB,将其转化成图片
from PIL import Image
import re
x = 307 #x坐标 通过对txt里的行数进行整数分解
y = 311 #y坐标 x*y = 行数
rgb1 = [****]
print len(rgb1)/3
m=0
for i in xrange(0,x):
for j in xrange(0,y):
line = rgb1[(3*m):(3*(m+1))]#获取一行
m+=1
rgb = line
im.putpixel((i,j),(int(rgb[0]),int(rgb[1]),int(rgb[2])))#rgb转化为像素
im.show()
im.save("flag.png")
PNG
文件头
文件类型 | 文件头 | 文件尾 | 特征 |
---|---|---|---|
PNG (png) | 89 50 4E 47 | AE 42 60 82 | .PNG... |
文件头+关键数据块+辅助数据块
png文件的每个数据块由4个部分组成:
Length(长度),Chunk Type Code(数据块类型码),Chunk Data(数据块数据),CRC(循环冗余检测)
文件头数据块IHDR的前8个字节,课通过010来修改宽高
JPG
- JPEG 是有损压缩格式,将像素信息用 JPEG 保存成文件再读取出来,其中某些像素值会有少许变化。在保存时有个质量参数可在 0 至 100 之间选择,参数越大图片就越保真,但图片的体积也就越大。一般情况下选择 70 或 80 就足够了
- JPEG 没有透明度信息
0xffd8
和 0xffd9
为 JPG 文件的开始结束的标志
文件头
文件类型 | 文件头 | 文件尾 | 特征 |
---|---|---|---|
JPEG (jpg) | FFD8FF | ÿØÿà |
GIF
文件头
文件类型 | 文件头 | 文件尾 | 特征 |
---|---|---|---|
GIF (gif) | 47494638 | 00 3B | GIF89a |
空间轴
gif 动态图片,是由一帧帧图片构成,是多帧图片的结合,所以每帧图片都有可能隐藏着信息
convert命令
将每一帧分割开
$ convert cake.gif cake.png
$ ls
cake-0.png cake-1.png cake-2.png cake-3.png cake.gif
时间轴
gif 文件的每一帧时间的间隔 也可能隐藏着信息
可以用 identify 命令清晰的打印出每一帧的时间间隔
identify -format "%s %T \n" test.gif
最后转 ASCII 码得到 flag
音频隐写
MP3隐写,LSB隐写,波形隐写,频谱隐写等
MP3隐写
Mp3Stego工具
encode -E hidden_text.txt -P pass svega.wav svega_stego.mp3
decode -X -P pass svega_stego.mp3
波形隐写
就是观察波形的规律将其进一步转化成01字符串
频谱
音频中的频谱隐写是将字符串隐藏在频谱中,此类音频通常会有一个较明显的特征,听起来是一段杂音或者比较刺耳。
LSB 音频隐写
silenteye工具