• 常见图片格式分析-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

  • 相关阅读:
    Visual Studio调试器项目设置
    Debug.Assert Everyone!
    WinDbg中的.natvis文件和类型模板
    已安装的.NET CLR版本之间的w3wp.exe崩溃WinDbg后期调试
    用于DLL注入的WinDbg扩展---!injectdll
    Wireshark中PIDs与网络包的关联
    又又一款抓dmp工具---ProcDump
    基于.NET框架版本在Windbg中加载sos的脚本
    未记录的WinDBG扩展命令---itoldyouso
    合并符号服务器
  • 原文地址:https://www.cnblogs.com/robin-oneway/p/13932982.html
Copyright © 2020-2023  润新知