1,ZIP伪加密
ZIP文件格式
一个 ZIP 文件由三个部分组成:
压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志
压缩源文件数据区:
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密)
08 00:压缩方式
20 9E:最后修改文件时间
66 4F:最后修改文件日期
F2 1B 0F 4A:CRC-32校验(4A0F1BF2)
0E 00 00 00:压缩后尺寸
0C 00 00 00:未压缩尺寸
08 00:文件名长度
00 00:扩展记录长度
66 6C 61 67 2E 74 78 74: 文件名(不定长)
4B CB 49 4C AF 36 34 32 36 31 35 AB 05 00: 文件flag.txt压缩后的数据
压缩源文件目录区:
50 4B 01 02:目录中文件文件头标记(0x02014b50)
1F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)
08 00:压缩方式 20 9E:最后修改文件时间 66 4F:最后修改文件日期
F2 1B 0F 4A:CRC-32校验(4A0F1BF2)
0E 00 00 00:压缩后尺寸
0C 00 00 00:未压缩尺寸
08 00:文件名长度
24 00:扩展字段长度
00 00:文件注释长度
00 00:磁盘开始号
00 00:内部文件属性
20 00 00 00:外部文件属性
00 00 00 00:局部头部偏移量
压缩源文件目录结束标志:
50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
01 00:本磁盘上纪录总数
01 00:目录区中纪录总数
5A 00 00 00:目录区尺寸大小
34 00 00 00:目录区对第一张磁盘的偏移量
00 00:ZIP 文件注释长度
zip 伪加密原理
zip伪加密是在文件头的加密标志位做修改,进而再打开文件时识被别为加密压缩包。
假加密:
压缩源文件数据区和压缩源文件目录区的全局方式位标记分别为00 00和09 00
真加密:
压缩源文件数据区和压缩源文件目录区的全局方式位标记均为09 00
(全局方式位标记的四个数字中只有第二个数字对其有影响,其它的不管为何值,都不影响它的加密属性!
第二个数字为奇数时 –>加密
第二个数字为偶数时 –>未加密)
下面来一道题
下载压缩包,打开后发现被加密了
把这个zip文件拖入winhex中,由图中的信息可以知道是真加密
把09 00修改为00 00保存后即可得到flag
2,暴破
1.暴力:选择密码范围,长度等,由软件组合生成密码进行爆破
2.掩码:知道密码中的一部分,只需按规则构造其余部分
3.字典:通常是多数用户常用的一些密码集合,导入字典文件用其中的密码进行爆破
例一:
以ISCC 2017 Basic-08为例,选定暴力攻击、字符集和长度后进行爆破
点击开始,进行爆破,如下图,在4ms内就找到了密码为BIT
例二:
掩码攻击,以ISCC 2017 Misc-06为例,题目给了一个jpg图片,用0x02中的方法分离出加密的压缩包,根据题目提示:注意署名, 构造????LiHua的掩码(?可在自己定义的字符集中任意选择)进行掩码攻击,如下图:
攻击结果如下,只耗费了很少的时间就找到了密码
例三:
字典,还以之前的ISCC 2017 Basic-07举例,从图片中分离出一个加密的zip压缩包,爆破无果后考虑字典攻击(可从网上下载字典,但大多数题目需要自己构造字典,文末的网盘连接里提供了常见的字典)
字典攻击的结果如下图,在字典选择合适的情况下,用很短的时间就能找到密码
继续以此题为例,解压后的压缩包有一个txt文档和一个握手包,txt内容如下:
因此可知握手包的密码为ISCC****的形式(*代表大写字母或数字),自己写程序构造字典
运行此程序得到字典如下:
之后用aircrack-ng来选中字典跑除握手包的密码如下图,不再详述
3,crc32碰撞
CRC32:CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值。
在产生CRC32时,源数据块的每一位都参与了运算,因此即使数据块中只有一位发生改变也会得到不同的CRC32值,利用这个原理我们可以直接爆破出加密文件的内容
还是以之前HBCTF伪加密那道题为例,另一种解法就是CRC32碰撞,打开压缩包,可以看出压缩文件 flag6位数
的CRC32值为0x9c4d9a5d
因此写出碰撞的脚本如下:
要特别注意
if (binascii.crc32(str(i)) & 0xffffffff) == crc:
在 Python 2.x 的版本中,binascii.crc32 所计算出來的 CRC 值域为[-2^31, 2^31-1] 之间的有符号整数,为了要与一般CRC 结果作比对,需要将其转为无符号整数,所以加上& 0xffffffff来进行转换。如果是 Python 3.x 的版本,其计算结果为 [0, 2^32-1] 间的无符号整数,因此不需额外加上& 0xffffffff 。
脚本的运行结果如下,即为压缩文件的内容:
4,明文攻击
明文攻击是一种较为高效的攻击手段,大致原理是当你不知道一个zip的密码,但是你有zip中的一个已知文件(文件大小要大于12Byte)时,因为同一个zip压缩包里的所有文件都是使用同一个加密密钥来加密的,所以可以用已知文件来找加密密钥,利用密钥来解锁其他加密文件,更详细的原理请读者自行谷歌
举个例子,已知 明文攻击.zip 中存在的文件 明文.txt,
因此将 明文.txt 压缩,这里需要判断明文压缩后的CRC32是否与加密文件中的一致,若不一致可以换一个压缩工具。
攻击过程如下:
点击开始,很快就恢复了密码
另:当明文的大小比较小时,攻击速度会比较慢;即使有时没有恢复密码,也可以使用明文攻击,最后点保存还是能得到压缩包里内容的。
5,属性隐藏
就是在属性的注释里有密码
6,进制转换隐藏信息
当发现开头是PK的时候
说明是ZIP文件
进行进制转换
再用winhex保存为zip
7,进制转换隐藏信息
当发现开头是PK的时候
说明是ZIP文件
进行进制转换
再用winhex保存为zip
标签:文件,00,加密,zip,压缩,misc,------,压缩包 From: https://www.cnblogs.com/wlwl1234/p/17090370.html