取证隐写

取证隐写

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来修改宽高

image-20241219155452687

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

image-20241219165502092

最后转 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

image-20241219165849683

波形隐写

就是观察波形的规律将其进一步转化成01字符串

image-20241219170604935

频谱

音频中的频谱隐写是将字符串隐藏在频谱中,此类音频通常会有一个较明显的特征,听起来是一段杂音或者比较刺耳。

image-20241219170728059

LSB 音频隐写

silenteye工具

image-20241219171912522

posted @ 2024-12-19 17:20  Yolololololo  阅读(81)  评论(0)    收藏  举报