STEGA-直接附加

STEGA-直接附加

简单介绍一下

众所周知,文件后缀往往反应着文件类型,but!实际上不一定准确,文件后缀可以进行修改,但文件类型不一定因为文件后缀被修改而变化。而程序们有自己的方式去判断文件类型,并按照正确的方式去读取文件,这就是文件头的作用了~
大部分文件类型的文件结构是:文件头+文件内容(+文件尾) (文件尾并非所有文件类型都有)
含有文件尾的文件读取时,读到文件尾就结束了,而文件尾后的内容会被忽略,不会对文件的查看造成影响,故而能在文件后写入隐藏的信息/文件,这就是直接附加了sa~

举个例子

大部分文件都有其固定的文件结构,常见的图片格式如PNG、JPG等都是由一系列特定的数据块组成的。
下面以PNG文件为例介绍一下~
PNG文件由4部分标准数据块和一些辅助数据块组成,以下是四个标准数据块:

  • IHDR文件头数据块 (并非文件头!!!)
  • PLTE调色板数据块
  • IDAT图像数据块
  • IEND图像结束数据块

而每一个数据块都由四部分组成:

  • length长度
  • chunk type code数据块类型码
  • chunk data数据块数据
  • CRC循环冗余校验码

而其中IEND数据块的长度总是00 00 00 00,数据标识总是49 45 4E 44CRC固定为AE 42 60 82
所以一般PNG文件以固定00 00 00 00 49 45 4E 44 AE 42 60 82作为结束。此时在82之后(即IEND数据块之后)添加其他内容/文件,在查看图片时则会被图片查看器忽略。

一些常见的文件类型~

下面来看看一些常见的文件类型和他们的相关内容吧~

文件类型 扩展名 文件头 文件尾 ASCII / 说明
JPEG .jpg .jpeg FF D8 FF FF D9 文件头为ÿØ,文件尾是ÿÙ
PNG .png 89 50 4E 47 0D 0A 1A 0A 00 00 00 00 49 45 4E 44 AE 42 60 82 文件头为‰PNG..,文件尾是 IEND chunk
GIF87a .gif 47 49 46 38 37 61 3B 文件头为 GIF87a,尾字节 3B 是 GIF Trailer
GIF89a .gif 47 49 46 38 39 61 3B 文件头为 GIF89a,尾字节同样是 3B
PDF .pdf 25 50 44 46 2D 25 25 45 4F 46 文件头为 %PDF-,文件尾为 %%EOF
ZIP .zip .jar .apk .docx .xlsx .pptx 50 4B 03 04 50 4B 05 06 文件头为PK...
空 ZIP .zip 50 4B 05 06 50 4B 05 06 PK 05 06空 ZIP 可能直接以 EOCD 开头
TAR .tar 75 73 74 61 72,偏移 0x101 / 257 两个连续的 512 字节全零块 TAR 的 ustar 不在文件开头,而是在偏移 257
XZ .xz FD 37 7A 58 5A 00 结尾通常为 59 5A 文件头为.7zXZ.59 5A 即 ASCII YZ,是 XZ Stream Footer 末尾魔数
RAR4 .rar 52 61 72 21 1A 07 00 文件头为Rar!...
RAR5 .rar 52 61 72 21 1A 07 01 00 文件头为Rar!...