使用场景
一般破解加密压缩文件常规的方式主要有穷举、字典破解等方法。穷举破解的方式效率太低,字典破解需要碰运气。但是如果手上刚好有加密zip中的某个文件时,可以使用明文破解。这种方式利用了加密算法的BUG,相比穷举,能提高破解效率。但是有一个限制:我们把所持有的文件暂且成为明文文件(plaintext),该文件的大小必须大于12Byte
环境&准备
Ubuntu 20.04LTS
字符集
字符集需要注意的有3点:
- 系统使用的字符集
- 压缩文件使用的字符集
- 终端(Terminal)使用的字符集
一般windows下zip压缩包使用GBK编码(又称CP936编码),Ubuntu系统使用的是UTF-8编码。当使用unzip命令时,默认采用UTF-8编码读取文件名,此时输出到终端为乱码,解决方案有两种:
-
改变系统的编码
系统编码改完后,unzip就会使用GBK编码读取文件名。但还要注意一点,如果程序输出的是GBK编码,而终端以UTF-8编码展示,会出现一堆的问 ,此时需要修改终端,比如xshell、x-terminal-emulator的字符集为GBK编码
-
直接使用unzip命令提供的-O参数
压缩文件
使用pkcrack进行明文破解需要注意一点:压缩包中可能包含多个加密文件,但我们只要持有其中一个文件即可,该文件必须和压缩包中的某个文件一模一样。在破解前,需要先把明文文件进行压缩。如果使用zip命令直接压缩可能会出现压缩率的问题。windows下可以使用7-zip一类的桌面应用进行压缩。使用7-zip进行压缩时,会有一个压缩率的选项,可以调整word size的大小,如果这个压缩率和加密文件的压缩率不匹配,破解时可能会出现文件长度不匹配问题
安装pkcrack
执行破解
参数解读
C:要破解的目标文件(含路径)
-c:破解文件中的明文文件的名字(其路径不包括系统路径,从zip文件一层开始)
-P:压缩后的明文文件
-p:压缩的明文文件中明文文件的名字(也就是明文文件.info在plaintext.zip中的位置) –
d:指定文件名及所在的绝对路径,将解密后的zip文件输出
补充说明
-
pkcrack的破解分为对压缩文档的破解和对压缩文档密码的破解,直接破解压缩文档只需要计算出3个关键的key,计算这3个key的效率非常高。而计算压缩文档密码则需要在算出来3个key的基础上再进行穷举,虽然比一般的非明文破解的穷举效率要高,但是根据密码的长度,计算难度呈指数级增长。所以当密码非常长的情况下,破解难度相当大。其实无论什么情况下,直接破解文档都比破解密码更划算,因为破解密码最终也还是为了拿到文件。。。
-
当命令带-d参数时,pkcrack会直接对 通常情况下,pkcrack程序执行后,会先计算出3个key,再根据这3个key直接生成未加密的压缩文档。如下,是stdin打印出来的三个key。如果没有加-d参数,则会计算压缩文档的密码
-
如果一开始没加-d参数,而程序也一直没有得到密码,当程序打印出3个key后,就可以使用bin下的zipdecrypt命令破解该压缩文档,得到未加密的压缩文档,使用方法如下:
-
明文文件必须大于12Byte是由pkzip的规范决定的,pkzip会在加密前,在压缩文件的文件前加12Byte的随机数/CRC校验值。所以pkcrack程序内部会判断,如果明文文件和加密文件的文件大小有差异,差异大于或小于12Byte都会 错。
-
超大的压缩文件使用pkcrack生成压缩包时可能出现签名错误的问题,使用unzip和winrar解压被解密过的压缩包可能会出现压缩包损坏的情况,经测试使用7zip解压不会 错
参考资料
记一道明文破解的漫长斗争史
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!