压缩文件科普

时间:2024-03-03 11:19:16

RAR文件的组成

RAR是有四个文件块组成的,分别是分别是标记块、归档头部块、文件块、结束块,这些块之间没有固定地先后顺序,但要求第一个块必须是标志块并且其后紧跟一个归档头部块

RAR的标记块和结束块都是固定的7字节序列,分别为0×52 61 72 21 1A 07 00和0xC4 3D 7B 00 40 07 00

每一块后面都有两个crc校验,在crc之后的字节用于判断块类型

HEAD_TYPE=0x72 标记块
HEAD_TYPE=0x73 压缩文件头
HEAD_TYPE=0x74 文件头
HEAD_TYPE=0x75 注释头
HEAD_TYPE=0x76 旧风格的用户身份信息
HEAD_TYPE=0x77 子块
HEAD_TYPE=0x78 恢复纪录
HEAD_TYPE=0x79 用户身份信息
HEAD_TYPE=0x7a subblock

比如上图rar要获取的文件除了flag.txt外还有secret.png,本来在A8 3C校验位后被改成了7A,被锁定后解压文件无法看到secret.png,所以这里需要自己改块标志将其改为文件块

ZIP文件的组成

压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志

50 4B 03 04是ZIP头文件标记

14 03是解压文件需要的PK版本

00 00是全局方位标记(文件是否有加密可通过这两位来判断,单数为加密,偶数为无,例如:00 02 04表示加密,01 03 09表示无)

之后查看压缩包里有多少文件可以查找50 4B有多少个就行了

不过压缩源文件数据区跟压缩源文件目录区是不一样的,文件标识依然是前四位,之后四位分别对应压缩需要的PK版本跟解压需要的PK版本之后的00 00对应数据区的全局方位标记(判断加解密与上面一样)

在CTF题中会存在伪加密的zip文件,原理就是更改了其中的全局方位标记

ps:Kali中用binwalk -e可以直接解压,此工具分离文件的原理就是识别文件头后进行文件分离