cyberchef的compression操作大类中有大量的压缩和解压缩操作,每种操作的功能和区别是什么,本章将进行讲解,作为我的专栏《Cyberchef 从入门到精通教程》中的一篇,详见这里。
关于文件格式和压缩算法的理论部分在之前的文章《压缩文件格式和压缩算法的那些事》,这里,已经进行了说明,可先行参考之。
对于Cyberchef中compression大类中的操作大致可以分成两类,一类是针对文件的压缩和解压缩,一类是针对数据流的压缩和解压缩。当然这么说可能会有些不严谨之处,因为文件其实也是被cyberchef当作数据流进行对待的。做这种区分的目的在于说明这些操作针对的是有意义的文件和数据流,而并非是无意义的数据流。
文件格式
从名称上可以看出其中Gzip/Gunzip,Zip/Unzip,bzip2,Tar/Untar,zlib都是可以针对对应格式的文件进行压缩和解压缩。
压缩文件
使用文本文件测试cyberchef压缩功能,文件的内容+包含中英文,如下:
this is a blog of xiaofan
这是村中少年的CSDN博客
https://xiaofan.blog.csdn.net/
gzip压缩如图1:
图1
zip压缩如图2:
图2
bzip2压缩如图3:
图3
tar打包如图4:
图4
由之前的理论部分可知tar只负责打包,不具备压缩功能,因此tar中的数据还是以明文的形式显示,只是多了一些文件的结构数据而已,从后图6的untar可以对比压缩和打包的区别。
上述可以看到,采用这种这些方式的压缩之后的数据,都会有显著的文件特征,例如
- 例如gz格式文件的signature 是 1F 8B
- 例如tar格式文件的signature 是 75 73 74 61 72
- 例如zip格式文件的signature是 50 4B 03 04
- 例如bzip2格式文件的signature 是 42 5A 68
更多文件格式详见这里。
解压缩文件
因此在解压缩的时候,如果在提前并不知道文件的压缩算法的情况下,通过判断文件的头部特征,则可以选择对应的操作进行处理。由于tar只是负责文件打包,gzip负责文件压缩,因此解压之后的显示略有区别,如下图5,图6:
图5
图6
虽然输入文单个文件,但是tar打包的时候是以文件夹的格式进行打包,因此在untar之后,可以看到显示的是文件夹中的文件而不是直接显示数据。
解压缩部分文件数据
这里需要注意的cyberchef只能对于完整的文件进行处理,如果缺少文件尾部数据,则可能出现无法解压缩的情况,可能的原因是cyberchef对于文件完整性进行了判定,使用上述图1,2,3,4中的部分数据(去除部分尾部数据)进行验证,如下图7, 图8,图9,图10:
图7
图8
图9
图10
untar虽然也只是使用了部分数据,但是没有破坏文件结构,还是能够还原部分数据。虽然cyberchef不能使用一些压缩算法的针对部分数据进行还原,但是7z等压缩软件可以,因此可以使用7z等压缩软件进行尝试。当然本质要研究每种文件的文件结构,看看缺少的数据是否是关键部分数据。
压缩算法
针对数据流的压缩算法因为数据结构敏感性低,按块压缩,理论上问题偏少。由之前的文章《压缩文件格式和压缩算法的那些事》,这里,可知对于raw deflate,LZMA ,bzip2事实上是一种混合压缩算法,即封装了几种算法并形成了一种新的数据格式。对于数据结构来说,不同的混合压缩算法则表现不同。
失败解压部分数据
下图11,12为 和raw inflate的示例,可以看到cyberchef对于部分数据的解压缩是失败的,只有部分数据则破坏了某个块的数据结构,因此出现解压缩失败的场景。同样不能部分解压成功的还有Lzstring算法。
图11
图12
成功解压部分数据
下图13,14为LZ4压缩和解压缩的示例,可以看到cyberchef对于部分数据的解压缩是成功的。
图13
图 14
其中LZMA 也可以解压缩部分数据,可自行尝试之。
针对上述的尝试,可以使用更多的数据进行的验证。当然本质要研究每种压缩算法的数据结构,看看缺少的数据是否是关键部分数据。
本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里。