linux如何解压zip文件_解压文件怎么解压_解压文件linux命令zip

本文为看雪峰会优秀文章

看雪峰会作者ID:wx_牛肉鱼

本人打ctf总结的一点思路,如有错漏之处linux如何解压zip文件,敬请见谅。

zip文件格式

一个zip文件由三部份组成:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志。

1、压缩源文件数据区

在这个数据区中每一个压缩的源文件/目录都是一条记录,记录的格式如下:

[文件头+文件数据+数据描述符]

文件头结构、、、、、组成                     长度文件头标记                   4 bytes  (0x04034b50)解压文件所需 pkware 版本      2 bytes全局方式位标记                2 bytes压缩方式                     2 bytes最后修改文件时间              2 bytes最后修改文件日期              2 bytesCRC-32校验                   4 bytes压缩后尺寸                   4 bytes未压缩尺寸                   4 bytes文件名长度                   2 bytes扩展记录长度                  2 bytes文件名                      (不定长度)扩展字段                    (不定长度)文件数据、、、、、数据描述符、、、、、CRC-32校验                  4 bytes压缩后尺寸                   4 bytes未压缩尺寸                   4 bytes

这个数据描述符只在全局方法位标记的第3位设为1时才存在,紧接在压缩数据的最后一个字节后。这个数据描述符只用在不能对输出的ZIP文件进行检索时使用。诸如:在一个不能检索的驱动器(如:磁带机上)上的ZIP文件中。若果是c盘上的ZIP文件通常没有这个数据描述符。

504B0304:这是头文件标记(0x04034b50)

解压文件linux命令zip_linux如何解压zip文件_解压文件怎么解压

1400:解压文件所需pkware版本

0000:全局方法位标记(有无加密)头文件标记后2bytes

0800:压缩方法

2、压缩源文件目录区

在这个数据区中每一条纪录对应在压缩源文件数据区中的一条数据。

组成                            长度目录中文件文件头标记             4 bytes  (0x02014b50)压缩使用的 pkware 版本          2 bytes解压文件所需 pkware 版本         2 bytes全局方式位标记                   2 bytes压缩方式                        2 bytes最后修改文件时间                 2 bytes最后修改文件日期                 2 bytesCRC-32校验                 4 bytes压缩后尺寸                      4 bytes未压缩尺寸                      4 bytes文件名长度                      2 bytes扩展字段长度                    2 bytes文件注释长度                    2 bytes磁盘开始号                      2 bytes内部文件属性                    2 bytes外部文件属性                    4 bytes局部头部偏移量                  4 bytes文件名                       (不定长度)扩展字段                     (不定长度)文件注释                     (不定长度)

504B0102:目录中文件文件头标记(0x02014b50)

3F00:压缩使用的pkware版本

1400:解压文件所需pkware版本

0000:全局方法位标记(有无加密linux如何解压zip文件,伪加密的关键)目录文件标记后4bytes

0800:压缩方法

3、压缩源文件目录结束标志

组成                          长度目录结束标记                    4 bytes  (0x02014b50)当前磁盘编号                    2 bytes目录区开始磁盘编号               2 bytes本磁盘上纪录总数                 2 bytes目录区中纪录总数                 2 bytes目录区尺寸大小                   4 bytes目录区对第一张磁盘的偏移量        4 bytesZIP 文件注释长度                 2 bytesZIP 文件注释                   (不定长度)

504B0506:目录结束标记

0000:当前c盘编号

0000:目录区开始c盘编号

暴力破解

暴力破解就是爆破压缩包的密码。

windows下可以使用ARCHPR这款工具。

解压文件怎么解压_解压文件linux命令zip_linux如何解压zip文件

linux下可以使用frackzip。

解压文件怎么解压_linux如何解压zip文件_解压文件linux命令zip

fcrackzip -b -l 6-6 -c 1 -p 000000 passwd.zip-b 暴力破解-c 1 限制密码是数字-l 6-6 限制密码长度为6-p 000000 初始化破解起点

伪加密

这儿是504B008红帽linux,将1400XX0008改成双数就产生了伪加密。将这儿改成0009再来看一下再改回来就破解了伪加密。

例题强网杯2020miscstudylevel5

伪加密,处理后解压出leve5

明文功击

大致原理,一个须要揭秘的ZIP并且不晓得密码64位linux,但辛运的是有ZIP包里一个已知文件,将已知文件进行ZIP加密后和待揭秘的ZIP里已知文件进行hex对比,二者的区别就是ZIP加密的三个key。

须要查看压缩算法是否一致,CRC校准值是否相同。

CRC爆破

CRC32碰撞用于特别小的文件(6字节以上基本就别试了),就是通过CRC来反推文件内容。

但是CRC32是很容易碰撞的,所以就6字节而言,同一个CRC32可能对应着十几个字符串(纯可视字符)。

例题强网杯2020miscstudylevel6

level6的压缩包,发觉内部有三个宽度为454的txt文件,想到crc爆破。

解压文件怎么解压_解压文件linux命令zip_linux如何解压zip文件

import stringimport binascii dic = string.ascii_letters+"_"+'0123456789'crc2=0xEED7E184crc1=0x9AEACC13crc3=0x289585AF def aa(crc):    for i in dic:        for j in dic:            for k in dic:                for p in dic:                    for q in dic:                        st = i+j+k+p+q                        if crc == (binascii.crc32(str(st)) & 0xffffffff):                            print st                            return def bb(crc):    for i in dic:        for j in dic:            for k in dic:                for p in dic:                    st = i+j+k+p                    if crc == (binascii.crc32(str(st)) & 0xffffffff):                        print st                        return aa(crc1)bb(crc2)aa(crc3)

例题PTSitebytectf2020

在注册页面见到三张图

解压文件linux命令zip_linux如何解压zip文件_解压文件怎么解压

解压文件linux命令zip_解压文件怎么解压_linux如何解压zip文件

最后的一张图有用按照这个,自己输入职工编号,申请编号是日期加后四位随机,去爆破CRC。

import binasciiimport stringimport zipfileimport base64import syscrc = int(0xcb0d2242)i = 0aaa="0123456789"for a in aaa:    for b in aaa:        for c in aaa:            for d in aaa:                strings = "亲爱的员工888888,您自助申请的PT邀请服务已受理完成,邀请链接在附件压缩包中,欢迎下次使用。nn"+"申请编号:20201025"+a + b + c+ d +"n"+"ByteCTF Secret PT Server"                strings = strings.encode('utf-8')                print(binascii.crc32(strings))                if crc == ((binascii.crc32(strings))&0xFFFFFFFF):                    print(strings)                    sys.exit(1)                else:                    print(i)                    i = i+1

之后去明文功击,其中有一点是,把数据讲到.txt中,会听到数据比压缩包里的密文多三个字节,那是由于linux下的换行符位0A,windows下为0D0A,将0D删掉即可。

linux如何解压zip文件_解压文件怎么解压_解压文件linux命令zip

得到:30080/signup.php?type=invite&invitenumber=8128e1f98353335c9b935fec58f0be46

linux如何解压zip文件_解压文件linux命令zip_解压文件怎么解压

看雪ID:wx_牛肉鱼

*本文由看雪峰会wx_牛肉鱼原创,转载请标明来自看雪社区

看雪2022KCTF夏季赛官网:

#往期推荐

1.

2.

3.

4.

5.

6.

linux如何解压zip文件_解压文件怎么解压_解压文件linux命令zip

本文原创地址://gulass.cn/lrhjyzwjscyz.html编辑:刘遄,审核员:暂无