杂项总结
杂项
例题
萌新题1
大写字母就是flag,写个简单脚本
1 |
|
ZIP伪加密解析
1、zip组成
一个 ZIP 文件由三个部分组成:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志。
一个zip文件由这样三个部分组成_zip 文件结构_一只独孤的程序猿的博客-CSDN博客
2、实例
压缩源文件数据区:
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密) 头文件标记后2bytes
压缩源文件目录区:
50 4B 01 02:目录中文件文件头标记(0x02014b50)
3F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,伪加密的关键) 目录文件标记后4bytes
压缩源文件目录结束标志:
50 4B 05 06:目录结束标记
3、全局方式位标记
全局方式位标记的四个数字中只有第二个数字对其有影响,其它的不管为何值,都不影响它的加密属性!
第二个数字为奇数时 –>加密
第二个数字为偶数时 –>未加密
4、辨别zip是真加密还是伪加密
1)无加密
压缩源文件数据区的全局加密应当为00 00 (504B0304两个bytes之后)
且压缩源文件目录区的全局方式位标记应当为00 00(504B0304四个bytes之后)
2)伪加密
压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为09 00
3)真加密
压缩源文件数据区的全局加密应当为09 00
且压缩源文件目录区的全局方式位标记应当为09 00 !
例题
把压缩包拖到winhex里打利用WinHex搜索,快速定位到目录区头文件标记处开,50 4B 03 04,这是压缩源文件数据区头文件标记,50 4B 01 02,这是压缩源文件目录区头文件标记,以50为第一处,找到第9、10处数值位置,第9处数值如果是奇数就代表有密码,偶数代表无密码
第九位是偶数属于伪加密
把09 00 改成00 00保存后就能打开了
010、winhex修改图片格式
从第二行开始,前四位是宽,后四位是高。
例题1 修改高度
把后面的的01改成02就可以增加高度,改成00就减小高度
不知道为什么前面的宽度改不了,改了会变成乱码(将01改成02)
例题2 修改宽度
将03改成02,下调一个度,就可以看到flag啦
JPHS的使用
准备阶段:
有windows和Linux版本的,windows版有可视化界面
windows可视化界面的下载地址:
Download for Free JPHS for Windows 0.5 (scanwith.com)
GitHub下载地址:
h3xx/jphs: jphide & seek steganography tools (github.com)
使用对象:
从名字不难看出使用对象是JPEG文件(就是常见的.jpg文件)
简介:JPEG是联合图象专家组(Joint Picture Expert Group)的英文缩写,是国际标准化组织(ISO)和CCITT联合制定的静态图象的压缩编码标准,比相同图象质量的其它文件格式(静态图象)相比压缩比最高的(高压缩比)
JPHS介绍:
对有损压缩JPEG文件进行信息的加密隐藏、探测提取的工具
JPHS包含2个功能(靠2个程序实现):
JPHIDE:能够将信息文件加密隐藏到JPEG图像
JPSEEK:从用JPHIDE程序加密隐藏得到的JPEG图像中探测并提取到信息文件
隐藏文件:
第一步:准备文件
(test.jpg文件)+(test.txt文本)
第二步:(windows版本) 打开软件,点击“Open jpeg”
使用图形化操作界面的Jphs(Windows版本)——->点击“Open jpeg”打开JPEG格式图片
(我这里打开的test.jpg)
打开之后有按钮就不是灰色的了
并且还会显示JPEG文件的相关信息
(注:如果打开的不是JPEG文件会自动退出)
第三步:点击“Hide”,并输入密码
点击“Hide”后输入2次相同的密码,并点击ok
然后选择要隐藏进去的文件
选择之后会在第二个Hidden中显示相关信息
第三步:将他们合并,并另存为
点击“Save jpeg as”将图片另存为jpeg格式然后输入自己想输入的名字.jpg
the file you hid in this jpeg has caused statistically significant change and may be detectable
您在此JPEG中隐藏的文件导致统计上显着的变化,可能是可检测的
提取隐藏文件:
(注:对图片的隐写方式和密码都一无所知的时候,使用Stegdetect进行探测和破解)
我们这里知道,就可以直接提取吧
显示出信息就是打开成功了
点击seek,再输入密码进行提取
已经提取到了(和隐藏进去的进行对比,是一样的)
例题
获得一个jpg文件,打开然后保存为txt文件,再存为png文件
然后请看二维码解密部分
PNG文件格式详解
概述
PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG’s Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。(说白了这就是一种方便的、适于网络传播的轻便图片文件格式)
特性
- 使用调色板技术可支持256种颜色的彩色图像。(必须的)
- 流式读/写性(streamability):图像文件格式允许连续读出和写入图像数据。(因此适于网络传播)
- 逐次逼近显示(progressive display):这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率。(类似马赛克逐渐消除的过程)
- 透明性(transparency):这个性能可使图像中某些部分不显示出来,用来创建一些有特色的图像。
- 辅助信息(ancillary information):这个特性可用来在图像文件中存储一些文本注释信息。(就是可以说一些废话)
- 独立于计算机软硬件环境。
- 使用无损压缩。(无损!)
- 可在一个文件中存储多幅图像。
文件结构
PNG图像格式文件由文件署名和数据块(chunk)组成。
文件署名域
8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是:
十进制数 | 十六进制数 |
137 | 89 |
80 | 50 |
78 | 4e |
71 | 47 |
13 | 0d |
10 | 0a |
26 | 1a |
10 | 0a |
这个文件署名就是在《利用文件头标志判断文件类型》中提到的文件头标志了,很简单。
数据块
这里有两种类型的数据块,一种是称为关键数据块(critical chunk),就是必须要有的块;另一种叫做辅助数据块(ancillary chunks)。
每个数据块都由下表所示的的4个域组成。
名称 | 字节数 | 说明 |
Length(长度) | 4字节 | 指定数据块中数据域的长度,其长度不超过(231−1)(231−1)字节 |
Chunk Type Code(数据块类型码) | 4字节 | 数据块类型码由ASCII字母(A-Z和a-z)组成 |
Chunk Data(数据块实际内容 | 可变长度 | 存储按照Chunk Type Code指定的数据 |
CRC(循环冗余检测 | 4字节 | 存储用来检测是否有错误的循环冗余码 |
其中CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的,可以看做一种校验码。
关键数据块
关键数据块中的4个标准数据块是:
(1) 文件头数据块IHDR(header chunk):
它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。
文件头数据块由13字节,组成结构如下:
域的名称 | 字节数 | 说明 |
Width | 4 bytes | 图像宽度,以像素为单位 |
Height | 4 bytes | 图像高度,以像素为单位 |
Bit depth | 1 byte | 图像深度:索引彩色图像:1,2,4或8 ;灰度图像:1,2,4,8或16 ;真彩色图像:8或16 |
ColorType | 1 byte | 颜色类型:0:灰度图像, 1,2,4,8或16;2:真彩色图像,8或16;3:索引彩色图像,1,2,4或84:带α通道数据的灰度图像,8或16;6:带α通道数据的真彩色图像,8或16 |
Compression method | 1 byte | 压缩方法(LZ77派生算法) |
Filter method | 1 byte | 滤波器方法 |
Interlace method | 1 byte | 隔行扫描方法:0:非隔行扫描;1: Adam7(由Adam M. Costello开发的7遍隔行扫描方法) |
(2) 调色板数据块PLTE(palette chunk):
它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。真彩色的PNG数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。结构如下:
|颜色|字节|意义|
|Red|1 byte||0 = 黑色, 255 = 红|
|Green|1 byte||0 = 黑色, 255 = 绿色|
|Blue|1 byte||0 = 黑色, 255 = 蓝色|
PLTE数据块是定义图像的调色板信息,PLTE可以包含1~256个调色板信息,每一个调色板信息由3个字节组成,因此调色板数据块所包含的最大字节数为768,调色板的长度应该是3的倍数,否则,这将是一个非法的调色板。
对于索引图像,调色板信息是必须的,调色板的颜色索引从0开始编号,然后是1、2……,调色板的颜色数不能超过色深中规定的颜色数(如图像色深为4的时候,调色板中的颜色数不可以超过2^4=16),否则,这将导致PNG图像不合法。
(3) 图像数据块IDAT(image data chunk):
它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。
IDAT存放着图像真正的数据信息,因此,如果能够了解IDAT的结构,我们就可以很方便的生成PNG图像。
(4) 图像结束数据IEND(image trailer chunk):
它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
如果我们仔细观察PNG文件,我们会发现,文件的结尾12个字符看起来总应该是这样的:
00 00 00 00 49 45 4E 44 AE 42 60 82
不难明白,由于数据块结构的定义,IEND数据块的长度总是0(00 00 00 00,除非人为加入信息),数据标识总是IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82。
最后,除了表示数据块开始的IHDR必须放在最前面, 表示PNG文件结束的IEND数据块放在最后面之外,其他数据块的存放顺序没有限制。
辅助数据块
(比较杂,不需要全部了解透)
PNG文件格式规范制定的10个辅助数据块是:
- 背景颜色数据块bKGD(background color)。
- 基色和白色度数据块cHRM(primary chromaticities and white point)。所谓白色度是指当R=G=B=最大值时在显示器上产生的白色度。
- 图像γ数据块gAMA(image gamma)。
- 图像直方图数据块hIST(image histogram)。
- 物理像素尺寸数据块pHYs(physical pixel dimensions)。
- 样本有效位数据块sBIT(significant bits)。
- 文本信息数据块tEXt(textual data)。
- 图像最后修改时间数据块tIME (image last-modification time)。
- 图像透明数据块tRNS (transparency)。
- 压缩文本数据块zTXt (compressed textual data)。
数据块摘要
关键数据块、辅助数据块和专用公共数据块(special-purpose public chunks)综合下表中:
数据块符号 | 数据块名称 | 多数据块 | 可选否 | 位置限制 |
IHDR | 文件头数据块 | 否 | 否 | 第一块 |
cHRM | 基色和白色点数据块 | 否 | 是 | 在PLTE和IDAT之前 |
gAMA | 图像γ数据块 | 否 | 是 | 在PLTE和IDAT之前 |
sBIT | 样本有效位数据块 | 否 | 是 | 在PLTE和IDAT之前 |
PLTE | 调色板数据块 | 否 | 是 | 在IDAT之前 |
bKGD | 背景颜色数据块 | 否 | 是 | 在PLTE之后IDAT之前 |
hIST | 图像直方图数据块 | 否 | 是 | 在PLTE之后IDAT之前 |
tRNS | 图像透明数据块 | 否 | 是 | 在PLTE之后IDAT之前 |
oFFs | (专用公共数据块) | 否 | 是 | 在IDAT之前 |
pHYs | 物理像素尺寸数据块 | 否 | 是 | 在IDAT之前 |
sCAL | (专用公共数据块) | 否 | 是 | 在IDAT之前 |
IDAT | 图像数据块 | 是 | 否 | 与其他IDAT连续 |
tIME | 图像最后修改时间数据块 | 否 | 是 | 无限制 |
tEXt | 文本信息数据块 | 是 | 是 | 无限制 |
zTXt | 压缩文本数据块 | 是 | 是 | 无限制 |
fRAc | (专用公共数据块) | 是 | 是 | 无限制 |
gIFg | (专用公共数据块) | 是 | 是 | 无限制 |
gIFt | (专用公共数据块) | 是 | 是 | 无限制 |
gIFx | (专用公共数据块) | 是 | 是 | 无限制 |
IEND | 图像结束数据 | 否 | 否 | 最后一个数据块 |
tEXt和zTXt数据块中的标准关键字:
关键字 | 说明 |
Title | 图像名称或者标题 |
Author | 图像作者名 |
Description | 图像说明 |
Copyright | 版权声明 |
CreationTime | 原图创作时间 |
Software | 创作图像使用的软件 |
Disclaimer | 弃权 |
Warning | 图像内容警告 |
Source | 创作图像使用的设备 |
Comment | 各种注释 |
一个例子
为了便于研究,我在本地找了个24x24像素的图片:
用十六进制打开后是这样的:
1 |
|
接下来我们试着分析一下:
首先是八个字节的文件头标志,标识着png文件:
<br>1<br> |
<br>8950 4e47 0d0a 1a0a<br> |
接下来的地方就是IHDR数据块了:
0000 000d说明IHDR头块长为13
4948 4452IHDR标识(ascii码为IHDR)
下面是IHDR数据块的实际内容
0000 0018图像的宽,24像素
0000 0018图像的高,24像素
08 表示色深,这里是2^8=256,即这是一个256色的图像
06 颜色类型,查表可知这是带α通道数据的真彩色图像
00 PNG Spec规定此处总为0(非0值为将来使用更好的压缩方法预留),表示使压缩方法(LZ77派生算法)
00 同上
00 非隔行扫描
e0 773d f8 CRC校验
以上分析了第一个IHDR块的内容,其他块的分析方法类似,比如接下来的就是tEXt块了,很简单,不做分析了。(当然这里还有重要的IDAT块,这是图像的实际内容)
最后得有个IEND数据块,这部分正如上所说,通常都应该是
00 00 00 00 49 45 4E 44 AE 42 60 82
由于我用的是vim打开,vim在文件最后都会恶心的自己加上0a换行,当然这并没有什么坏的影响。不过这也提醒了我们一个问题,既然在IEND块后面添加任何的字符都对文件的打开造成不了影响,那我们就可以在这里藏一些数据了(当然这种藏法很low)。。。
OK,这就是png文件的基本构造了。
例题:可能会修改文件名
可能是头文件出问题
看上面的8个字节头文件标志
89 50 4E 47 0D 0A 1A 0A
改完就可以打开图片了
BPG文件格式详解
概念
BPG(Better Portable Graphics)是一种新的图像格式。 其目的是在质量或文件大小成问题时替换JPEG图像格式。 它的主要优点是:
1、压缩比高。 对于类似的质量,文件比JPEG小得多。
2、大多数Web浏览器都支持小型Javascript解码器(gzip压缩大小:56 KB)。
3、基于HEVC开放视频压缩标准的子集。
4、支持与JPEG(灰度,YCbCr 4:2:0,4:2:2,4:4:4)相同的色度格式,以减少转换过程中的损耗。 支持Alpha通道。 还支持RGB,YCgCo和CMYK颜色空间。
5、本机支持每通道8至14位,以获得更高的动态范围。
6、支持无损压缩。
7、可以包括各种元数据(例如EXIF,ICC配置文件,XMP)。
8、动画支持。
原文链接:https://blog.csdn.net/CT_WJ/article/details/97812299
查看
只考虑电脑上,Honeyview 是目前我评价最高的看图软件,地址:www.bandisoft.com/honeyview。截面乍一看有点古朴:
安装之后设置一下,让菜单自动隐藏就没问题了,实际用的时候只会显示个窗口边框。现在还没遇到它不支持的图片格式,除了矢量图,比如svg 和cad 的格式。
转换
图片批量转换成bpg 可以用honeyview 的资源管理器右键菜单,也可以用一个叫romeolight bpgconv 的工具,专门用来把jpg 和png 批量转换成bpg。
把图片文件夹拖进去,工具会筛选出所有jpg,jpeg 和png 文件,然后点一下左上角的三角按钮就开始批量转换。文件数量比较多,图片内容比较复杂的话转换时间会很长,吃CPU,可以全核跑满。一批图片处理完之后点左上角的圆圈箭头清空列表,然后可以再往里拖一批,不先清空的话它会把处理完的图片再处理一遍。
转换之前,最好先点开右上角的三条杠,打开菜单,调整一下输出文件的位置:
默认是自动在桌面新建个文件夹,所有输出文件放在里面,切换成“Same Location as File”,输出文件就会放在源文件同目录下,如果一次转换多个文件夹,这样图片分类不会乱。其他设置都不用动。转换完再手动把所有jpg,png 源文件删除掉就行了,比如直接rm *.jpg。
这个软件的官网似乎已经挂了,windows 上想安装,可以用scoop 安装个绿色版:
1 |
|
或者下载我复制出来的绿色包:download.csdn.net/download/Etberzin/86448960,0 积分。再或者,随便搜个下载站,风险自担。
预览
但是转换成bpg 之后,windows 资源管理器里不能显示图片预览,想找个图片就比较麻烦,honeyview 可以打开bpg,但是没有给资源管理器集成bpg 的预览功能。所以又要找个工具,Simple BPG Image Viewer :github.com/asimba/pybpgviewer/releases/tag/v1.28,这也是个bpg 图片查看器,不如honeyview 好用,但是提供了bpg 预览的插件。
点击红圈里的链接下载个安装包,一路ok 安装完,可能需要把软件启动一次,然后用资源管理器打开有bpg 图片的文件夹,图片预览应该就能自动加载出来了。
总结
日常使用可能还是webp 更方便,支持的范围更广。要是所有图片都拿bpg 存,到时候想给别人发个图还得先转换成jpg 或者webp。只是我感觉webp 压出明显差异的可能性更大,bpg 最适合用的场合是那些估计只有自己看的一大堆图片库存,比如瑟图~ 不过几千张瑟图转换一波能省的空间也不过就几个GB 而已,大概是把一共5GB 的的图片文件夹压缩到500MB 这个程度,有没有用~ 自己看呗。
原文链接:https://blog.csdn.net/Etberzin/article/details/126502703
例题
看到bpg格式的图片拖入honeyview就可以看到flag了
ctfshow{aade771916df7cde3009c0e631f9910d}