破解Zip加密文件常用的几种方法

前言

在互联网的浪潮中,大家也许碰到过这种情况:

从网络上下载了一个zip文件,最后却发现它是用密码保护的,或者自己用密码加密了一个很重要zip文件,但是一段时间后忘记了密码,无法打开。这个时候,我们就可能就需要对这个加密文件进行破解了。

而随着计算机性能的提高,很多人可能觉得找到一个zip文件的密码是一件很简单的事情。

我将从一个Web安全狗&CTF选手的角度去解析如何去找到/破解一个Zip文件~

01.Zip属性隐藏

我们先从最简单的开始讲起,可能很多人没有去注意文件属性一栏,往往有时候,加密者会把密码放在属性里面,例如下图:

我们可以看到,这个Zip压缩文件的密码就是www.cnblogs.com了~

02.Zip伪加密

Zip伪加密是在文件头的加密标志位做修改,进而再打开文件时识被别为加密压缩包~

一个 Zip文件由三个部分组成:

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

下面我们来看下这个例子:

压缩源文件数据区: 

50 4B 03 04:这是头文件标记(0x04034b50) 
14 00:解压文件所需 pkware 版本 
00 00:全局方式位标记(有无加密) 
08 00:压缩方式 
5A 7E:最后修改文件时间 
F7 46:最后修改文件日期 
16 B5 80 14:CRC-32校验(1480B516) 
19 00 00 00:压缩后尺寸(25) 
17 00 00 00:未压缩尺寸(23) 
07 00:文件名长度 
00 00:扩展记录长度 
6B65792E7478740BCECC750E71ABCE48CDC9C95728CECC2DC849AD284DAD0500 
压缩源文件目录区: 
50 4B 01 02:目录中文件文件头标记(0x02014b50) 
3F 00:压缩使用的 pkware 版本 
14 00:解压文件所需 pkware 版本 
00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了) 
08 00:压缩方式 
5A 7E:最后修改文件时间 
F7 46:最后修改文件日期 
16 B5 80 14:CRC-32校验(1480B516) 
19 00 00 00:压缩后尺寸(25) 
17 00 00 00:未压缩尺寸(23) 
07 00:文件名长度 
24 00:扩展字段长度 
00 00:文件注释长度 
00 00:磁盘开始号 
00 00:内部文件属性 
20 00 00 00:外部文件属性 
00 00 00 00:局部头部偏移量 
6B65792E7478740A00200000000000010018006558F04A1CC5D001BDEBDD3B1CC5D001BDEBDD3B1CC5D001 

压缩源文件目录结束标志: 

50 4B 05 06:目录结束标记 
00 00:当前磁盘编号 
00 00:目录区开始磁盘编号 
01 00:本磁盘上纪录总数 
01 00:目录区中纪录总数 
59 00 00 00:目录区尺寸大小 
3E 00 00 00:目录区对第一张磁盘的偏移量 
00 00:ZIP 文件注释长度

我们可以进行大胆的猜想:

如果把一个zip文件的文件头或者加密标志位进行适当修改,那就可能会改

  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用jszip打包zip几种方法: 1. 创建一个空的zip文件并添加文件: ```javascript var zip = new JSZip(); zip.file("hello.txt", "Hello World"); zip.generateAsync({type:"blob"}) .then(function(content) { saveAs(content, "example.zip"); }); ``` 2. 添加文件夹和子文件夹: ```javascript var zip = new JSZip(); var folder = zip.folder("example"); folder.file("hello.txt", "Hello World"); folder.folder("subfolder").file("world.txt", "Hello World"); zip.generateAsync({type:"blob"}) .then(function(content) { saveAs(content, "example.zip"); }); ``` 3. 添加多个文件: ```javascript var zip = new JSZip(); zip.file("file1.txt", "File 1"); zip.file("file2.txt", "File 2"); zip.file("file3.txt", "File 3"); zip.generateAsync({type:"blob"}) .then(function(content) { saveAs(content, "example.zip"); }); ``` 4. 添加文件夹和文件的数组: ```javascript var zip = new JSZip(); var files = [ {name: "file1.txt", content: "File 1"}, {name: "file2.txt", content: "File 2"}, {name: "file3.txt", content: "File 3"} ]; var folder = zip.folder("example"); files.forEach(function(file) { folder.file(file.name, file.content); }); zip.generateAsync({type:"blob"}) .then(function(content) { saveAs(content, "example.zip"); }); ``` 5. 添加远程文件: ```javascript var zip = new JSZip(); zip.file("remote.txt", JSZipUtils.getBinaryContent("http://example.com/remote.txt"), {binary:true}); zip.generateAsync({type:"blob"}) .then(function(content) { saveAs(content, "example.zip"); }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值