首页 > 其他分享 >misc之压缩包总结------2023.2.3

misc之压缩包总结------2023.2.3

时间:2023-02-03 20:47:11浏览次数:59  
标签:文件 00 加密 zip 压缩 misc ------ 压缩包

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为例,选定暴力攻击、字符集和长度后进行爆破

http://p7.qhimg.com/t018a6f366fcf9b3f21.png

http://p4.qhimg.com/t010afd7e4440281a23.png

点击开始,进行爆破,如下图,在4ms内就找到了密码为BIT

http://p0.qhimg.com/t01811a7e2dcb89cade.png

 

例二:

掩码攻击,以ISCC 2017 Misc-06为例,题目给了一个jpg图片,用0x02中的方法分离出加密的压缩包,根据题目提示:注意署名, 构造????LiHua的掩码(?可在自己定义的字符集中任意选择)进行掩码攻击,如下图:

 

http://p6.qhimg.com/t01df197bb44c6ff8da.png

 

攻击结果如下,只耗费了很少的时间就找到了密码

 

http://p9.qhimg.com/t011e91c09434272596.png

 

 例三:

字典,还以之前的ISCC 2017 Basic-07举例,从图片中分离出一个加密的zip压缩包,爆破无果后考虑字典攻击(可从网上下载字典,但大多数题目需要自己构造字典,文末的网盘连接里提供了常见的字典)

http://p6.qhimg.com/t0161c303af1040467f.png

字典攻击的结果如下图,在字典选择合适的情况下,用很短的时间就能找到密码

http://p0.qhimg.com/t01f20c62ea9613230d.png

继续以此题为例,解压后的压缩包有一个txt文档和一个握手包,txt内容如下:

http://p1.qhimg.com/t016b6d12c62d06a5ad.png

因此可知握手包的密码为ISCC****的形式(*代表大写字母或数字),自己写程序构造字典

http://p9.qhimg.com/t01023e96e1a806e82c.png

运行此程序得到字典如下:

http://p4.qhimg.com/t01ebdf87a5ebae3d3a.png

之后用aircrack-ng来选中字典跑除握手包的密码如下图,不再详述

http://p5.qhimg.com/t014ad5b26364cf618f.png

 

3,crc32碰撞

 

CRC32:CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值。

 

在产生CRC32时,源数据块的每一位都参与了运算,因此即使数据块中只有一位发生改变也会得到不同的CRC32值,利用这个原理我们可以直接爆破出加密文件的内容

 

还是以之前HBCTF伪加密那道题为例,另一种解法就是CRC32碰撞,打开压缩包,可以看出压缩文件 flag6位数

 

的CRC32值为0x9c4d9a5d

 

http://p4.qhimg.com/t01b82b48613741c1c9.png

 

因此写出碰撞的脚本如下:

 

http://p1.qhimg.com/t01a640855d935796bf.png

 

要特别注意

 

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 。

 

脚本的运行结果如下,即为压缩文件的内容:

 

http://p5.qhimg.com/t01e060547556133ddc.png

4,明文攻击

明文攻击是一种较为高效的攻击手段,大致原理是当你不知道一个zip的密码,但是你有zip中的一个已知文件(文件大小要大于12Byte)时,因为同一个zip压缩包里的所有文件都是使用同一个加密密钥来加密的,所以可以用已知文件来找加密密钥,利用密钥来解锁其他加密文件,更详细的原理请读者自行谷歌

举个例子,已知 明文攻击.zip 中存在的文件 明文.txt,

因此将 明文.txt 压缩,这里需要判断明文压缩后的CRC32是否与加密文件中的一致,若不一致可以换一个压缩工具。

http://p4.qhimg.com/t0112994a09cc25c574.png

攻击过程如下:

http://p2.qhimg.com/t0170f27bf19e30b533.png

点击开始,很快就恢复了密码

http://p4.qhimg.com/t016abbabfa89c43970.png

另:当明文的大小比较小时,攻击速度会比较慢;即使有时没有恢复密码,也可以使用明文攻击,最后点保存还是能得到压缩包里内容的。

5,属性隐藏

就是在属性的注释里有密码

在这里插入图片描述

 

6,进制转换隐藏信息

在这里插入图片描述
当发现开头是PK的时候
说明是ZIP文件

进行进制转换
再用winhex保存为zip

7,进制转换隐藏信息

在这里插入图片描述
当发现开头是PK的时候
说明是ZIP文件

进行进制转换
再用winhex保存为zip

 

标签:文件,00,加密,zip,压缩,misc,------,压缩包
From: https://www.cnblogs.com/wlwl1234/p/17090370.html

相关文章

  • 修改表的各种操作
    修改表的各种操作官网:https://dev.mysql.com/doc/refman/8.0/en/alter-table.html这里挑几个常用的演示一下:原表格sql语句:createtableifnotexiststest1(id......
  • MySQL创建表的三种方式
    创建表的三种方式通过create语句直接创建语法:create[TEMPORARY]table[IFNOTEXISTS]table_name( col_namecolumn_defination[constrant][NOTNULL|NULL][D......
  • 2023牛客寒假算法基础集训营6
    A#include<bits/stdc++.h>usingi64=longlong;intmain(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);intx;std::cin......
  • drf视图组件与视图基类
    drf视图组件视图就是视图类,我们之前学过的APIView就是drf提供的基类。APIView与原生View区别: 1.传入到视图类中的是drf的Request对象而不是django的request对象 2.视图......
  • G6 lesson1 grammar
    GrammarWhatisasentence?Asentenceisagroupofwordsthatexpressesacompletethought.Asentencemustincludeacompletesubject,allthewordsthatte......
  • 基于spring生态的基础后端开发及渗透测试流程
    这是一篇记录如何从建仓开始到最后安全测试完整流程的笔记,使用的spring生态,目的是为spring的基础后端开发及后期渗透测试打一个模板。本篇采用springSecurity作为安全框架,......
  • centos8搭建网桥
    1.nmcli命令搭建nmcliconnectionaddtypebridgecon-namebr0ifnamebr0autoconnectyesnmcliconnectionmodifybr0ipv4.addresses"192.168.8.16/24"ipv4.ga......
  • 求区间内质数(素数)
    题目:判断101~200之间有多少个质数(素数),并输出全部质数(素数)。质数(又称素数),是指在大于1的自然数中,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为素数(质数)。比1大但......
  • 2.2-2.3
    P2042[NOI2005]维护数列坑点:空间问题,要把删除了的节点循环利用修改操作的值可能为0时间问题,insert时直接把数列build(l,r),然后合并最大子段和,改了好几遍,每次以为改......
  • python django项目创建
    目标本文为创建django项目的第一步操作、实现项目创建、模块创建、虚拟环境指定、并实现健康检查接口一、环境准备安装python参考官方文档:https://www.python.org/down......