前言

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

从网络上下载了一个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文件的文件头或者加密标志位进行适当修改,那就可能会改变文件的可读性~

我们可以用16进制编辑器添加文件头或文件尾,即可修复zip。

上面这种方法相对比较麻烦,不太容易操作,在Mac OS及部分Linux(如Kali)系统中,可以直接打开伪加密的zip压缩包,此时我们希望有种简便而通用的方法该怎么办呢?

我们推荐使用下面这种方法:

使用检测伪加密的ZipCenOp.jar,解密后如果能成功打开zip包,则是伪加密,否则说明思路错误

ZipCenOp.jar的下载我已经传到了本地,点击下载即可~

下面举个例子,如下是个被加密的文件,理由很简单,文件夹后面跟了一个*~

使用ZipCenOp.jar(需java环境)使用方法:

java -jar ZipCenOp.jar r xxx.zip

我们对其使用如上命令进行解包,得下图所示:

我们再看下这个文件:

发现文件夹后面跟的*消失了,说明这个文件就是伪加密文件~

当然啦,我们也可以对Zip文件进行伪加密~

java -jar ZipCenOp.jar e xxx.zip

03.暴力破解

顾名思义,就是逐个尝试选定集合中可以组成的所有密码,知道遇到正确密码~

而字典攻击的效率比爆破稍高,因为字典中存储了常用的密码,因此就避免了爆破时把时间浪费在脸滚键盘类的密码上~

而如果已知密码的某几位,如已知6位密码的第3位是a,那么可以构造 ??a??? 进行掩码攻击,掩码攻击的原理相当于构造了第3位为a的字典,因此掩码攻击的效率也比爆破高出不少~

对这一类的zip问题,Windows下我使用的是ARCHPR~

点击开始,进行爆破即可~下面是个演示,就花了4s的时间爆破出密码是MIT~

而所谓的字典攻击其实就是在字典选择合适的情况下,用很短的时间就能找到密码~如果需要字典的朋友可以私聊滴滴我,我可以发给你~

实例如下所示:

如果对Wifi密码破解感兴趣的同学可以关注我的B站ID:Angel_Kitty,我录制过关于Wifi破解的视频,视频ID是:https://www.bilibili.com/video/av25852173/

而掩码攻击就是通过已知密码的某几位进行构造,如下示例我们构造了??T进行爆破,仅花了81ms就破解了~

04.明文攻击

明文攻击是一种较为高效的攻击手段,大致原理是当你不知道一个zip的密码,但是你有zip中的一个已知文件(文件大小要大于12Byte)或者已经通过其他手段知道zip加密文件中的某些内容时,因为同一个zip压缩包里的所有文件都是使用同一个加密密钥来加密的,所以可以用已知文件来找加密密钥,利用密钥来解锁其他加密文件~

此时我们可以尝试用ARCHPR或者pkcrack进行明文攻击~

举个例子,下载链接在这里

我们可以看到readme.txt是加密压缩包里的readme.txt的明文,所以可以进行明文攻击~

将readme.txt压缩成.zip文件,然后在软件中填入相应的路径即可开始进行明文攻击,这里我们用ARCHPR进行演示~

可能有些朋友会说ARCHPR怎么行不通啊,一般是版本不对的问题~

如果还是有问题怎么办呢?那就尝试用下pkcrack

下载链接在这里:https://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack.html

似乎网站日常会崩,所以我把文件上传到了本地~

Windows版本:https://files.cnblogs.com/files/ECJTUACM-873284962/pkcrack-1.2.2-win32.zip

Linux版本:https://files.cnblogs.com/files/ECJTUACM-873284962/pkcrack-1.2.2.tar.gz

有些朋友在Windows下会出现如下错误:

那是因为pkcrack只支持32位的,所以运行这个需要在XP系统下进行

而选择Linux的话则不需要这么麻烦,直接安装就好了,还有一种更快的办法~

我已经把项目上传到Github上,文件在这里:https://github.com/AngelKitty/CTF-Tools/tree/master/pkcrack

我们写个shell脚本就好了~

#!/bin/bash -ex

wget https://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack/pkcrack-1.2.2.tar.gz
tar xzf pkcrack-1.2.2.tar.gz
cd pkcrack-1.2.2/src
makemkdir -p ../../bin
cp extract findkey makekey pkcrack zipdecrypt ../../bin
cd ../../

把文件保存,改为install.sh,然后跑到当前目录下,给它加一个执行权限x

chmod 777 install.sh

或者直接可以:

chmod u+x install.sh

然后运行install.sh

./install.sh

然后当前目录下会生成一个bin的文件夹,我们直接进入bin文件夹下,看到有pkcrack文件,直接对文件进行明文破解

./pkcrack -c "answer/key.txt" -p readme.txt -C Desktop.zip -P readme.zip

-C:要破解的目标文件(含路径)-c:破解文件中的明文文件的名字(其路径不包括系统路径,从zip文件一层开始)-P:压缩后的明文文件-p:压缩的明文文件中明文文件的名字(也就是readme.txt在readme.zip中的位置)

至于其他选项参看./pkcrack --help

pkcrack还有一个重要的选项是-d,后面跟一个文件名,比如decrypt.zip,表示解密后的zip文件输出。据说这个命令可以加快解密时间,我尝试过以后发现并没有快多少,所以我花了两个小时还没跑出来密码QAQ

05.CRC32碰撞

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

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

具体算法实现参考百度百科:https://baike.baidu.com/item/CRC32/7460858?fr=aladdin

我们看个CRC32碰撞的例子:

flag是4位数,且CRC32值为56EA988D

我们可以写出如下脚本:

#coding=utf=8
import binascii
real = 0x56EA988D
for y in range(1000,9999):if real == (binascii.crc32(str(y)) & 0xffffffff):print(y)
print('End')

在 Python 2.x 的版本中,binascii.crc32 所计算出來的 CRC 值域为[-2^31, 2^31-1] 之间的有符号整数,为了要与一般CRC 结果作比对,需要将其转为无符号整数,所以加上& 0xffffffff来进行转换。如果是 Python 3.x 的版本,其计算结果为 [0, 2^32-1] 间的无符号整数,因此不需额外加上& 0xffffffff 。

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

拓展与补充

  • zip在线爆破:https://passwordrecovery.io/zip-file-password-removal/
  • 使用fcrackzip破解zip保护密码:http://topspeedsnail.com/fcrackzip-crack-zip-password/

您可以考虑给博主来个小小的打赏以资鼓励,您的肯定将是我最大的动力。thx.

微信打赏

支付宝打赏

作  者: Angel_Kitty
出  处:http://www.cnblogs.com/ECJTUACM-873284962/
关于作者:潜心机器学习以及信息安全的综合研究。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击右下角【推荐】推荐一下该博文。您的鼓励是作者坚持原创和持续写作的最大动力!

破解Zip加密文件常用的几种方法相关推荐

  1. Python攻防-暴力破解ZIP加密文件的密码

    文章目录 前言 Python语法 自定义迭代器 Python多线程 Python脚本 单线程数字爆破 单线程字符爆破 多线程字典爆破 总结 前言 本文继续记录学习下 Python 的有趣应用:借助 P ...

  2. python暴力破解zip加密文件

    目录 前言: 一.破解zip加密文件的思路: 1.准备一个加密的zip文件. 2.zipfile模块可以解压zip文件. 3.itertools.permutations实现全字符的全排列. 二.实操 ...

  3. 前女友闺蜜给我发了一个压缩包,居然还带密码?暴力破解ZIP加密文件的密码!

    前言 今晚下班后微信收到一跳消息!是前女友的闺蜜发过来的,然后让我自己去猜密码,本来我是不打算理她的!但是她后面说里面有你想不到的福利!这句话对于一枚(lsp)不对一枚宅男程序员没有抵抗力,毕竟我对她 ...

  4. ZIP加密文件破解:john简介

    John是一款Kali linux自带的密码破解工具,支持密码本破解.John基于密码本破解root用户开机口令如下图所示,当然重点还是你有靠谱的密码本,否则也是白费力气. unshadow /etc ...

  5. 破解XP系统密码的常用的几种方法

    破解系统密码的常用的几种方法 ---流血的蚊子(个人实验加整理) 以下几种方法都需要Dos环境或者winpe环境,所以需要自己制作启动盘(具体方法不多言) 1.  SAM文件.Windows xp目录 ...

  6. 压缩包 zip RAR 7z 密码破解常用的几种方法

    01.Zip属性隐藏 我们先从最简单的开始讲起,可能很多人没有去注意文件属性一栏,往往有时候,加密者会把密码放在属性里面,例如下图: 我们可以看到,这个Zip压缩文件的密码就是www.cnblogs. ...

  7. ziperello破解zip加密

              ziperello破解zip加密 一.选择可以设置密码方式的压缩 二.设置密码压缩 三.文件已加密 四.使用ziperello打开加密文件        等待读取完成 五.选择破解 ...

  8. python 暴力破解 excel加密文件

    python 暴力破解 excel加密文件 'wordlist.txt' 为待测试的密码列表 fdd ddd eeee 5e5e5 58d85d5e d2d4d5d 4d4d4d3 dfdf,d; l ...

  9. 简单操作破解PDF加密文件

    简单操作只需10秒破解PDF加密文件     [尊重 原创,转载请注明出处 ]http://blog.csdn.net/guyuealian/article/details/51345950     ...

最新文章

  1. 算法精解:DAG有向无环图
  2. 从 Vuex 0.6.x 迁移到 1.0
  3. php定时执行任务没有执行,linux中定时任务crontab中的php任务无法执行,求可能的原因...
  4. 如何恢复master数据库
  5. 6-4 使用函数统计指定数字的个数_高手不可不学的Excel引用函数(上)
  6. matlab如何判断矩阵中元素都大于0_在MATLAB中找到矩阵中零元素的数量
  7. rds mysql_Amazon RDS上MySQL
  8. java中EL表达式怎么获取网站的根目录
  9. laravel如何利用数据库的形式发送通知
  10. 【华为OD机试真题 JS】字符串分割
  11. 二元二次方程例题_二元二次方程练习题.doc
  12. CORTEX:我知道你在真笑还是假笑 | 前辅助运动区的激活与对笑声传染性和真实性的感知
  13. 30 行代码实现,支付宝蚂蚁森林自动收能量!
  14. HOOK SSDT 实现内核级的进程保护
  15. win7共享计算机打不开,windows7共享文件夹打不开怎么办
  16. 戴尔服务器的性能,解析戴尔12G服务器主要性能提升和改进
  17. JSH_ERP华夏ERP开发配置
  18. 触摸!天空龙 - 锻炼极速反应力
  19. python感叹号的作用_Python的作用
  20. 用函数实现判断素数(以及改进思路)

热门文章

  1. 责任心与态度比技术更重要
  2. 排序学习-必读论文-AMiner
  3. 我数星星...宝宝,你智商差点,就数月亮吧
  4. java8 joda_Java基础之如何取舍Joda与 Java8 日期库
  5. 终端文本编辑神器--Vim命令详解。如何配置使用Vim、Vim插件?
  6. Java毕业设计_基于javaweb的网上预约实验室管理系统的设计与实现
  7. 计算机二级真题期刊论文模板,论文格式?二级标题是什么?
  8. 什么是Scrum团队?
  9. Excel中提取单元格(括号)内的信息
  10. win7访问XP或者2003共享,提示密码错误的解决办法