隐写术,顾名思义就是讲需要传达的信心隐藏在各种载体上(数据流,压缩包,图片,音频等)也是一种手段。现代的数字水印技术就是从这方面发展而来的,数字水印技术在现在社会中越来越种重视版权这一方向的加持下发展的越来越好。

一、常见文件头文件尾

1、图片
JPEG
文件头:FF D8 FF     
文件尾:FF D9
TGA
未压缩的前4字节 00 00 02 00
RLE压缩的前5字节 00 00 10 00 00
PNG
文件头:89 50 4E 47 0D 0A 1A 0A    
文件尾:AE 42 60 82
GIF
文件头:47 49 46 38 39(37) 61    
文件尾:00 3B
BMP
文件头:42 4D
文件头标识(2 bytes) 42(B) 4D(M)
TIFF (tif)
文件头:49 49 2A 00
ico
文件头:00 00 01 00
Adobe Photoshop (psd)
文件头:38 42 50 53
2、office文件
MS Word/Excel (xls.or.doc)
文件头:D0 CF 11 E0

MS Access (mdb)
文件头:53 74 61 6E 64 61 72 64 20 4A

WordPerfect (wpd)
文件头:FF 57 50 43

Adobe Acrobat (pdf)
文件头:25 50 44 46 2D 31 2E

application/vnd.visio(vsd)
文件头:D0 CF 11 E0 A1 B1 1A E1

Email [thorough only] (eml)
文件头:44 65 6C 69 76 65 72 79 2D 64 61 74 65 3A

Outlook Express (dbx)
文件头:CF AD 12 FE C5 FD 74 6F

Outlook (pst)
文件头:21 42 44 4E

Rich Text Format (rtf)
文件头:7B 5C 72 74 66

txt 文件(txt)
文件头:Unicode:FE FF / Unicode big endian:FF FE / UTF-8:EF BB BF /ANSI编码是没有文件头的

3、压缩包文件
ZIP Archive (zip)
文件头:50 4B 03 04
文件尾:50 4B
RAR Archive (rar)
文件头:52 61 72 21
4、音频文件
Wave (wav)
文件头:57 41 56 45
audio(Audio)
文件头: 4D 54 68 64
audio/x-aac(aac)
文件头:FF F1(9)
5、视频文件
AVI (avi)
文件头:41 56 49 20
Real Audio (ram)
文件头:2E 72 61 FD
Real Media (rm)
文件头:2E 52 4D 46
MPEG (mpg)
文件头:00 00 01 BA(3)
Quicktime (mov)
文件头:6D 6F 6F 76
Windows Media (asf)
文件头:30 26 B2 75 8E 66 CF 11
MIDI (mid)
文件头:4D 54 68 64
6、代码文件
XML (xml)
文件头:3C 3F 78 6D 6C

HTML (html)
文件头:68 74 6D 6C 3E

Quicken (qdf)
文件头:AC 9E BD 8F

Windows Password (pwl)
文件头:E3 82 85 96

7、其他类型
windows证书文件(der)
文件头:30 82 03 C9
CAD (dwg)
文件头:41 43 31 30
Windows Shortcut (lnk)
文件头:4C 00 00 00
Windows reg(reg)
文件头:52 45 47 45 44 49 54 34

压缩包类隐写

这个压缩包是我们日常使用当中经常接触的,常见的格式: .rar .zip .7z(貌似常见就这仨233333)

压缩包是可以加密的我们都知道,关于怎么解密有几种方法:

1.爆力破解,俗称爆破,使用对应的暴力破解软件:ziperello, ARCHPR

2.伪加密:通过修改压缩包的16进制文件中的数据,使压缩包显示有密码

一格zip文件有三个部分组成:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志

这是三个头标记,主要看第二个

压缩源文件数据区:50 4B 03 04:这是头文件标记

压缩源文件目录区:

50 4B 01 02:目录中文件文件头标记

3F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)

图片隐写

1.LSB

LSB也就是最低有效位 (Least Significant Bit)。原理就是图片中的像数一般是由三种颜色组成,即三原色,由这三种原色可以组成其他各种颜色,例如在PNG图片的储存中,每个颜色会有8bit,LSB隐写就是修改了像数中的最低的1bit,在人眼看来是看不出来区别的,也把信息隐藏起来了。譬如我们想把’A’隐藏进来的话,如下图,就可以把A转成16进制的0x61再转成二进制的01100001,再修改为红色通道的最低位为这些二进制串。

img

img

利用Stegsolve这个软件,调整颜色通道

2.winhex或者010查看

有的是图片破损修改头部,或者在里面隐藏flag,或者异常IDAT

3.属性

img

  1. 双图

还有一种情况是比较特殊的,有的时候会给出两张图片,或者是需要你去寻找原来的图片来进行对比寻找隐藏的信息。这个一般是因为一张图片给出来的隐藏信息太过于隐蔽,无法找不到具体的位置,具体的信息。这个时候就要用到一些对比的技巧来查找了。比如ISG2014的misc200就是用到的这种给出了两张图的。有的情况下,第二张图是需要你自己去找到的。

5.隐藏文件

用kali自带的binwalk查找是否有隐藏文件,用dd或者foremost分离出文件

png图片宽高查询脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import os
import binascii
import struct

crcbp = open("图片", "rb").read() #打开图片
crc32frombp = int(crcbp[29:33].hex(),16) #读取图片中的CRC校验值
print(crc32frombp)

for i in range(4000): #宽度1-4000进行枚举
for j in range(4000): #高度1-4000进行枚举
data = crcbp[12:16] + \
struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
#print(crc32)
if(crc32 == crc32frombp): #计算当图片大小为i:j时的CRC校验值,与图片中的CRC比较,当相同,则图片大小已经确定
print(i, j)
print('hex:', hex(i), hex(j))

后续还有很多需要学习的