常见图片格式分析-bmp,png

一、bmp图片

①   单色位图:每个像素最多可以表示2种颜色,只需要使用长度为1的二进制位来表示,因此每个像素占1/8byte

②   16色位图:每个像素最多可以表示16种颜色,只需要长度为4(2^4=16)的二进制表示,每个像素占1/2byte

③   256色位图:每个像素最多表示256种颜色,需要长度为8(2^8=256)的二进制表示,每个像素占1byte

④   24位位图:即RGB三原色位图,每个像素占24位,3个byte

         ps:一字节(1byte)=8位(8bit)

         图形的大小 = 图片的总像素*每个像素的大小, 图片的总像素 = 图片长*高

bmp图片格式:

①   位图文件头bmfh(占14个字节):

         数据结构如下:

         typedef struct tagBITMAPFILEHEADER {

         WORD bfType; //类型名,字符串“BM”,占2个字节,

         DWORD bfSize; //文件大小,占4个字节

         WORD bfReserved1; //保留字,占2个字节

         WORD bfReserved2; //保留字,占2个字节

         DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和,占4个字节

         } BITMAPFILEHEADER;

 

②   位图信息头bmih(占40个字节)

         typedef struct tagBITMAPINFOHEADER{

         DWORD biSize; //指定此结构体的长度,0x28

         LONG biWidth; //位图宽

         LONG biHeight; //位图高.为正,表示从下往上存储,左下角是起点。为负,表示从上往下储存,左上角是起点

         WORD biPlanes; //平面数,为1

         WORD biBitCount //采用颜色位数,可以是1,2,4,8,16,24,32

         DWORD biCompression; //压缩方式,可以是0,1,2,其中0表示不压缩

         DWORD biSizeImage; //实际位图数据占用的字节数

         LONG biXPelsPerMeter; //X方向分辨率

         LONG biYPelsPerMeter; //Y方向分辨率

         DWORD biClrUsed; //使用的颜色数,如果为0,则表示默认值(2^颜色位数)

         DWORD biClrImportant; //重要颜色数,如果为0,则表示所有颜色都是重要的

         } BITMAPINFOHEADER;

 

③   彩色表aColors

         单色位图彩色表占8字节

         16色位图彩色表占64字节

         256色位图彩色表占1024字节

二、png图片

         png图片格式:由8个字节的PNG文件署名和数据块组成

         png文件署名域:89 50 4e 47 0d 0a 1a 0a (固定)

         IHDR数据块:

                   00 00 00 0d(说明IHDR头块长度为13)

                   49 48 44 52(IHDR的hex值)

                   00 00 00 64(图像的宽,这里为100像素)

                   00 00 00 4f(图像的高,这里为79像素)

                  08 表示色深 02 表示颜色类型 00 预留 00 预留 00 非隔行扫描

                   92 eb f7 f6(CRC校验)

※  这里需要注意的是图像的宽、高数据,ctf题目经常将修改宽高后的图片作为题目来隐藏信息

最后得有个IEND数据块,通常值为 00 00 00 00 49 45 4E 44 AE 42 60 82

在IEND块后面添加任何的字符都对文件的打开造成不了影响,那我们就可以在这里藏一些数据了

参考资料:1.利用文件头标识判断文件类型:https://blog.mythsman.com/post/5d301940976abc05b345469f/

2.PNG文件格式详解:https://blog.mythsman.com/post/5d2d62b4a2005d74040ef7eb/

3.PNG文件结构分析与加密解密原理:https://www.cnblogs.com/amws/archive/2013/09/24/3336536.html

4.https://blog.csdn.net/u012611878/article/details/52215985

原文地址:https://www.cnblogs.com/robin-oneway/p/13932982.html