PNG

PNG图片特点

首先,先了解下png图片在010editor的呈现

PNG文件格式是一个8字节的标识以及其他后续数据块(IHDR)

这里我们看下前八个字节

1
2
3
4
5
6
89 50 4E 47 0D 0A 1A 0A
89相当于是png的一个身份认证
50 4E 47就是png的ASCII码
0D 0A:用于DOS-Unix数据的换行符转换
1A:在DOS命令行下,用于阻止文件显示的文件结束符
0A:Unix风格的换行符,用于Unix-DOS换行符的转换

方法

修改文件格式

所以判断PNG文件格式时,直接将其拖进010editor看前八个字节就好了,是的话改个后缀

倒转文件byte

有的时候打开010editor,发现整个文件的内容全部逆置了,那需要一个小脚本修复一下就好了

1
2
3
4
a = open('flag.jpg','rb')  #以二进制形式读取方式(rb)打开图片
b = open('png.png','wb') #以二进制形式写入内容给png。png
b = b.write(a.read()[::-1]) #a.read是读取所有字节,[::-1]这个是以切片形式将内容完全反转并写入b

添加文件头数据

有的时候文件打不开,放到010editor分析发现头部8字节消失了,写入一下就好了

宽高修改

windows系统对IHDR的检测不严格,修改了宽高不用修改crclinux

宽:IHDR后四个字节

高:宽后四个字节

windows平台正常修改就好了

linux还没搞过~~

从图片中提取文件

binwalk

1
2
binwalk 1.png	#查看图片里面有没有藏文件
binwalk -e 1.png #提取文件所有东西,可以无视伪加密

foremost

1
foremost 1.png	#会生成一个txt文本显示内容,但是伪加密好想要自己修改

JPG

JPG图片特点

首先就是标识了

1
FF D8 FF

然后就是高宽了:在FF C0后面的7个字节

1
2
3
4
5
00 11 08 01 2C 01 91
00 11是数据长度
08是精度
01 2C是高度
01 91是宽度

EXIF信息

在windows操作系统中,查看图片属性的详细信息会显示一堆关键信息,有时候甚至还会藏着经纬度

在ubuntu中我们可以使用查看关键信息

1
exiftool cat.jpg

有的时候配合base64编码有特效

1
echo ",,," | base64 -d 

BMP图片隐写

这个文件格式比较少见,可以无损压缩

文件的标识是前两个字节42 4D

头数据后四位对应图片的内存大小,但要注意计算机是小端序,要从后往左读取

这里贴一张 2×2像素、24位位图(Windows DIB头BITMAPINFOHEADER)像素格式为RGB24的示例

偏移(六边形) 规模(字节) 十六进制值 价值 描述
BMP头部
00 2 42 4D “BM” ID场(42h,4Dh)
02 4 46 00 00 00 70字节(54+16) BMP文件大小(54字节头+16字节数据)
06 2 00 00 未使用球员 应用特定
08 2 00 00 未使用球员 应用特定
0A 4 36 00 00 00 54字节(14+40) 偏移量,像素数组(位图数据)所在位置
DIB 头部
0E 4 28 00 00 00 40字节 DIB头部的字节数(从此点开始)
12 4 02 00 00 00 2像素(从左到右排列) 位图宽度(像素单位)
16 4 02 00 00 00 2 像素(从下到高) 位图的高度(像素单位)。从下到上像素顺序为正。
1A 2 01 00 1架飞机 使用的彩色平面数量
1C 2 18 00 24位 每像素的位数
1E 4 00 00 00 00 0 BI_RGB,不使用像素阵列压缩
22 4 10 00 00 00 16字节 原始位图数据的大小(包括填充)
26 4 13 0B 00 00 水平分辨率为2835像素/米 图像的打印分辨率为 72 DPI ×39.3701英寸每米,可获得2834.6472
2A 4 13 0B 00 00 2835像素/米垂直
2E 4 00 00 00 00 0 颜色 调色板中的颜色数量
32 4 00 00 00 00 0 重要颜色 0表示所有颜色都很重要
像素数组起始(位图数据)
36 3 00 00 FF 0 0 255 红色,像素 (x=0, y=1)
39 3 FF FF FF 255 255 255 白色,像素 (x=1, y=1)
3C 2 00 00 0 0 4字节对齐的填充(可以是除零以外的数值)
3E 3 FF 00 00 255 0 0 蓝色,像素 (x=0, y=0)
41 3 00 FF 00 0 255 0 绿色,像素 (x=1, y=0)
44 2 00 00 0 0 4字节对齐的填充(可以是除零以外的数值)

以下是一个4×2像素、32位位图的示例,alpha通道(Windows DIB头BITMAPV4HEADER)不透明度值,像素格式为ARGB32。

偏移(六边形) 规模(字节) 十六进制值 价值 描述
BMP头部
00 2 42 4D “BM” ID场(42h,4Dh)
02 4 9A 00 00 00 154字节(122+32) BMP文件大小
06 2 00 00 未使用球员 应用特定
08 2 00 00 未使用球员 应用特定
0A 4 7A 00 00 00 00 122字节(14+108) 偏移量,像素数组(位图数据)所在位置
DIB 头部
0E 4 6C 00 00 00 00 108字节 DIB头部的字节数(从此点开始)
12 4 04 00 00 00 4像素(从左到右排列) 位图宽度(像素单位)
16 4 02 00 00 00 2 像素(从下到高) 位图的高度(像素单位)
1A 2 01 00 1架飞机 使用的彩色平面数量
1C 2 20 00 32位 每像素的位数
1E 4 03 00 00 00 3 BI_BITFIELDS,没有使用像素阵列压缩
22 4 20 00 00 00 32字节 原始位图数据的大小(包括填充)
26 4 13 0B 00 00 水平分辨率为2835像素/米 图像的打印分辨率为 72 DPI ×39.3701英寸每米,为2834.6472英寸
2A 4 13 0B 00 00 2835像素/米垂直
2E 4 00 00 00 00 0 颜色 调色板中的颜色数量
32 4 00 00 00 00 0 重要颜色 0表示所有颜色都很重要
36 4 00 00 FF 00 00FF0000 大端序 红色信道位掩码(有效,因为指定了BI_BITFIELDS)
3A 4 00 FF 00 00 大端序中的0000FF00 绿色通道位掩码(有效,因为指定了 Green BI_BITFIELDS)
3E 4 FF 00 00 00 大端序中的000000FF 蓝色通道位掩码(有效,因为指定了BI_BITFIELDS)
42 4 00 00 00 FF FF000000大端序 阿尔法通道位掩膜
46 4 20 6E 69 57 小端”Win LCS_WINDOWS_COLOR_SPACE
4A 36 00…00 CIEXYZ三重色彩空间端点 未用于LCS的“”或“”Win ``sRGB
6E 4 00 00 00 00 0 红伽马 未用于LCS的“”或“”Win ``sRGB
72 4 00 00 00 00 0 绿色伽马 未用于LCS的“”或“”Win ``sRGB
76 4 00 00 00 00 0 蓝色伽马 未用于LCS的“”或“”Win ``sRGB
像素数组的起始(位图数据)
7A 4 FF 00 00 7F 255 0 0 127 蓝色(Alpha:127),像素(x=0,y=1)
7E 4 00 FF 00 7F 0 255 0 127 绿色(Alpha:127),像素(x=1,y=1)
82 4 00 00 FF 7F 0 0 255 127 红色(Alpha:127),像素(x=2,y=1)
86 4 FF FF FF 7F 255 255 255 127 白色(Alpha:127),像素(x=3,y=1)
8A 4 FF 00 00 FF 255 0 0 255 蓝色(Alpha:255),像素(x=0,y=0)
8E 4 00 FF 00 FF 0 255 0 255 绿色(Alpha:255),像素(x=1,y=0)
92 4 00 00 FF FF 0 0 255 255 红色(Alpha:255),像素(x=2,y=0)
96 4 FF FF 255 255 255 255 白色(α:255),像素(x=3,y=0)

GIF

这个是动图

GIF图片特点

1
47 49 46 38 39 61

方法

帧分离+拼接

图片很细,那么可以尝试分离每一帧然后拼接试试看

1
2
convert glance.gif flag.png	#分离,有几帧就有几张图片
montage flag*.png -tile x1 -geometry +0+0 flag.png #合成所有以flag开头的文件,-title x1是指1行(平铺方式),-geometry +0+0间距为0,然后就是图片名字

GIF图像格式和特征

扔进010editor看下头数据,看情况修改,然后打开后发现现实的看不出来是动图,那么擦测一下他可能是有规律的

识别规律

1
identify -format "%T" flag.gif

会得到一串数字,这里将我网上看到的一个案例是将10改为1,20改为0,但我没做过,不知道反过来行不行

进制转换网址 https://www.rapidtables.com/convert/number/ascii-hex-bin-dec-converter.html

GIF图像每一帧查看

stegsolveanalyseframe browser

盲水印

就是会将水印以一种肉眼看不见的方式写,但是会有独特的标识

1
2
bwm decode hui.png hui_with_wm.png flag.png
就是要有原图和加上水印的图片,然后获得水印文件

LSB隐写

第一种就是通过stregsolve修改rgb来搞

第二种就是010editor查找特殊字符分析

查看文件里的字符

1
string 文件名

通用方法

010editor

查找flag文本/视图-模板结果可能可以发现一个unknownPadding

分辨文件

1772985464625

参考

https://ba1ma0.blog.csdn.net/article/details/128346180?fromshare=blogdetail&sharetype=blogdetail&sharerId=128346180&sharerefer=PC&sharesource=2403_88369859&sharefrom=from_link