9.1压缩包详解及伪加密 – lmn-【密码学】小世界-安全文库-NGC660 安全实验室

9.1压缩包详解及伪加密 – lmn

9.1压缩包详解及伪加密

1652748971928-c25edcee-4fed-4f90-9de9-b3f76edb6127

Address:https://files.realpython.com/media/Importing-Python-Code-From-a-ZIP-Archive_Watermarked.6b86d7f24875.jpg

0x01 压缩包详解及分类归纳

压缩包被官方认为是一个计算机软件,可以减小文件中的比特和字节总数,达到节省磁盘空间等作用

ZIP基本原理

查找文件内的重复字节,并建立一个相同字节的“词典”文件,并用一个代码表示,比如在文件里有几处有一个相同的词“中华人民共和国”,用一个代码表示并写入“词典”文件,这样就可以达到缩小文件的目的

压缩包作用

  1. 节省磁盘空间
  2. 可以把多个文件压缩成一个压缩包
  3. 可以把一个大文件分解压缩成多个小压缩包
  4. 此外部分软件如WinRAR可以实现对文件的压缩保密保护,就是在形成压缩包的时候添加解压密码,这样生成的压缩包别人没有密码是无法打开的,可以起到一定的文件保密作用

压缩算法

有很多不同的压缩文件格式,例如ZIP、RAR、7Z等

实际上这只是不同的压缩规范,就算是同样的格式,例如都是ZIP,其中的压缩算法可能也是不一样的,例如ZIP可以使用Shrinking、Reducing、Deflate等算法

某个压缩文件压缩率高不高,不但要看其文件格式,更要看其具体使用的算法(例如ZIP和7Z都可以使用Deflate算法)

压缩软件

  • WinRAR
  • 好压(Haozip)
  • WinZip
  • 7-Zip
  • WinMount
  • Peazip
  • UHARC
  • FreeARC
  • 360压缩

0x02 ZIP

ZIP是一种支持无损数据压缩的存档文件格式

ZIP 文件可能包含一个或多个可能已压缩的文件或目录,ZIP 文件格式允许使用多种压缩算法,尽管DEFLATE是最常见的,这种格式最初创建于 1989 年,并首次在PKWARE, Inc.的PKZIP实用程序中实现

ZIP 文件通常使用文件扩展名 .zip 或 .ZIP 以及 MIME媒体类型
ZIP 被许多程序用作基本文件格式,通常使用不同的名称,通过用户界面导航文件系统时,代表 ZIP 文件的图形图标通常显示为文档或其他突出显示拉链的对象

ZIP设计

.ZIP文件用于存储文件,ZIP 允许使用许多不同的方法压缩包含的文件,以及简单地存储文件而不压缩它,每个文件单独存储,允许使用不同方法压缩同一存档中的不同文件

由于 ZIP 存档中的文件是单独压缩的,因此可以提取它们或添加新文件,而无需对整个存档应用压缩或解压缩
这与压缩tar文件的格式形成对比,这种随机访问处理不容易实现

目录放置在 ZIP 文件的末尾,这标识了 ZIP 中的文件,并标识了该文件在 ZIP 中的位置,这允许 ZIP 阅读器加载文件列表,而无需阅读整个 ZIP 存档

ZIP 存档还可以包含与 ZIP 存档无关的额外数据,这允许通过将程序代码添加到 ZIP 存档并将文件标记为可执行文件,将 ZIP 存档制作成自解压存档(解压缩其包含数据的应用程序),最后存储目录还可以通过将压缩文件附加到无害文件(例如 GIF 图像文件)来隐藏压缩文件

.ZIP格式使用32位 CRC 算法并包括存档目录结构的两个副本,以提供更好的数据丢失保护

ZIP结构

ZIP 文件通过位于存档结构末尾的中央目录记录的结尾来正确识别,以便轻松附加新文件

如果中央目录记录的结尾指示非空存档,则存档中每个文件或目录的名称应在中央目录条目中指定,以及有关该条目的其他元数据和 ZIP 文件的偏移量,指向到实际的录入数据

这允许相对快速地执行存档的文件列表,因为不必读取整个存档即可查看文件列表

1652748982741-61c7b6e2-46d6-4823-97f5-80fdb4b9cb64

Address:https://upload.wikimedia.org/wikipedia/commons/thumb/6/63/ZIP-64_Internal_Layout.svg/1600px-ZIP-64_Internal_Layout.svg.png

ZIP 文件中的条目还在本地文件头中包含此信息,以实现冗余。只有在文件末尾的中央目录中指定的文件才有效,扫描 ZIP 文件以查找本地文件头是无效的(除非存档损坏),因为中央目录可能会声明某些文件已被删除而其他文件已被更新

例如,我们可以从包含文件 A、B 和 C 的 ZIP 文件开始。然后删除文件 B 并更新文件 C
这可以通过在原始 ZIP 文件的末尾附加一个新文件 C 并添加一个仅列出文件 A 和新文件 C 的新中央目录来实现
当 ZIP 最初设计时,通过软盘传输文件很常见,但是写入磁盘非常耗时,如果你有一个很大的 zip 文件,可能跨越多个磁盘,并且只需要更新几个文件,而不是读取和重写所有文件,那么读取旧的中央目录,追加新文件会快得多然后附加一个更新的中央目录

中央目录中文件条目的顺序不必与档案中文件条目的顺序一致

存储在 ZIP 存档中的每个条目都由本地文件头引入,其中包含有关文件的信息,例如注释、文件大小和文件名,然后是可选的“额外”数据字段,然后是能压缩的、能加密的文件数据。“额外”数据字段是 ZIP 格式可扩展性的关键

“额外”字段用于支持 ZIP64 格式、与 WinZip 兼容的 AES 加密、文件属性和更高分辨率的 NTFS 或 Unix 文件时间戳。通过“额外”字段可以进行其他扩展。规范要求 ZIP 工具忽略它们无法识别的额外字段

ZIP 格式使用特定的 4 字节“签名”来表示文件中的各种结构。每个文件条目都由特定的签名标记,中央目录记录的结尾用其特定的签名来表示,中央目录中的每个条目都以 4 字节的中央文件头签名开头

ZIP 规范中没有 BOF 或 EOF 标记,通常 ZIP 文件中的第一件事是 ZIP 条目,可以通过其本地文件头签名轻松识别

1652748993142-d67c5d07-e6ff-44a1-9bf3-60d11b5cf361

ZIP组成

1652748998882-a3ec33d7-f8e3-4034-84e6-6fedbfd49a0d

下面图片给出的0x04034b50是我们在二进制软件中看到的倒序,也就是我们看到的504b0304

504b0304为标识头,这部分也经常以504b0304开头,这一部分也称为文件实体,所有长度字段都以字节为单位计算长度

1652749005589-f8e29d86-df1b-434f-9aa5-a295277348d0

Address:https://en.wikipedia.org/wiki/ZIP_(file_format)

前面提到的中央目录文件头,也称为目录源数据,记录的是文件目录信息,经常以504b0102开头

1652749013062-79549741-9868-418f-bd19-f40a2d1fabc1

Address:https://en.wikipedia.org/wiki/ZIP_(file_format)

中央目录记录结束 (EOCD)
在所有中央目录条目之后是中央目录(EOCD)记录的结尾,这标志着 ZIP 文件的结尾,也称为目录源数据结束标识,通常以505b0506

1652749020460-9c045fde-5432-4111-bbe8-59d3c13500d6

Address:https://en.wikipedia.org/wiki/ZIP_(file_format)

0x03 伪加密

修改全局方式位标记

压缩源文件目录区:

  • 50 4B 01 02:目录区文件头标记
  • 1F 00:压缩使用的 pkware 版本 或3F 00
  • 14 00:解压文件所需 pkware 版本
  • 00 00:全局方式位标记(伪加密,改为 09 00 就提示有密码了)

原理就是修改了zip的全局方式位标记后,打开显示需要密码,实际没有密码

之前有提过zip存在三个部分,第二个部分的全局方式位标记是伪加密的关键

1652749077198-d24c5314-4aec-4e3e-a386-2ebe86c61b18

再次打开之后就会显示密码

无加密
数据区 的全局加密应当为 00 00
目录区 的全局方式位标记应当为 00 00

假加密
数据区 的全局加密应当为 00 00
目录区 的全局方式位标记应当为 09 00

真加密
数据区 的全局加密应当为 09 00
目录区 的全局方式位标记应当为 09 00

binwalk

binwalk工具的命令

binwalk -e 文件名

可以无视伪加密,直接从压缩包中提取文件

直接破解压缩包密码

可以使用Ziperello

1652749082872-7f077b10-f310-4f3c-9c1e-b6a6477369fb

References:
https://baike.baidu.com/
https://en.wikipedia.org/
请登录后发表评论

    请登录后查看回复内容