压缩包分析在CTF中也是常见的题型,斗哥今天就和大伙来聊聊压缩包的解题思路。斗哥把常见的压缩包分析题目以下图方式进行分类:
今天斗哥主要介绍压缩包基础分析及伪加密分析的解题思路。
基础知识
有些出题者通过压缩包本身的一些基础信息来出一些简单的题目或是作为复杂杂项题的辅助,接下来斗哥就先介绍介绍RAR和ZIP的文件格式。
1.RAR
RAR是有四个文件块组成的,分别是分别是标记块、归档头部块、文件块、结束块,这些块之间没有固定地先后顺序,但要求第一个块必须是标志块并且其后紧跟一个归档头部块。每个块都包含以下内容:
归档头部块和文件块的内容较多,斗哥仅列出每个块头部内容:
RAR的标记块和结束块都是固定的7字节序列,分别为0x52 61 72 21 1A 07 00和0xC4 3D 7B 00 40 07 00。文件块这边要注意一下HEAD_FLAGS这个头部,其中HEAD_FLAGS的低三位代表加密标志,此位若被置为1,则文件使用了基于密钥的加密。
2. ZIP
通常情况下,我们用到的ZIP文件格式如下:
压缩源文件数据区[文件头+文件数据+数据描述符]{此处可重复多次}+核心目录+目录结束标识
当压缩包中有多个文件时,就会有多个[文件头+文件数据+数据描述符]。
压缩源文件数据区记录着压缩的所有文件的内容信息,每个压缩文件都由文件头、文件数据、数据描述符三部分组成,在这个数据区中每一个压缩的源文件/目录都是一条记录。ZIP的文件头标识固定为0x50 4B 03 04,文件数据记录了相应压缩文件的数据,数据描述符仅在文件头中通用标记字段的第3bit设为1时才会出现。
核心目录区记录了压缩文件的目录信息,在这个数据区中每一条纪录对应在压缩源文件数据区中的一条数据。核心目录区的标记为0x 50 4B 01 02。其中若通用位标记(General purpose bit flag)置为1,则表示该文件加密。如有多个文件就会有多个通用位标记。
目录结束标识存在于整个归档包的结尾,用于标记压缩的目录数据的结束。核心目录结束标记0x50 4B 05 06 。
上面就是对基础知识的一点总结,接下来,我们举个栗子瞧瞧CTF会怎么出题:
1.题目为一个RAR压缩包。
2.解压后发现为一个TXT,然而flag并没有在TXT中。
3.将RAR拖进010editor,发现还有一个文件secret.png没有解压成功。
4.检查RAR文件头和文件尾都没有发现问题。
5.通过上面的知识点我们可以发现png的图片压缩的文件头有问题,文件块的HEAD_TYPE应该是0x74而不是0x7A。
6.可成功解压图片。
压缩包经常被隐写于图片或其他文件中,可以通过文件分离方式进行解题,常见的binwalk文件分离工具或者使用010editor其实都基于识别文件头后进行文件分离。
再举个栗子:
1.拿到一个压缩包后先进行解压,发现一个word文档,打开文档发现只有一张图片,按照常规进行排查,查看有没有隐藏文字之类的,发现没有什么东西。
2.将word拖进010editor进行查看,发现文件头为504B0304,是ZIP的文件头。
3.将word的后缀改为zip,可成功解析。
4.逐个文件夹进行查看,发现flag。
伪加密
伪加密就是在对应的加密标志位做修改,进而再打开文件时识被别为加密压缩包。上面在讲到文件格式的时候,提到RAR文件块的HEAD_FLAGS和ZIP的核心目录区的通用位标记,这两个就是伪加密的切入点。当拿到文件时,如果压缩文件是加密的,或文件头正常但缺无法正常解压,可先考虑是否为伪加密。通过将标志位修改为0便可解密压缩包。
举个栗子:
1.由流量分析得到一个ZIP压缩包,进行解压缺发现解压报错。
2.将压缩包拖进010editor,发现文件头正常,猜测是伪加密。
3.搜索504B0102.将所有文件头的第9位和第10位改为0。
4.可成功解压出4个TXT。
好啦,斗哥的压缩包分析的基础篇就到这里啦,下次继续介绍暴力破解、明文攻击及CRC32的相关解题思路。