除伪加密外的解压缩包的方法 -aster
除伪加密外的解压缩包的方法
压缩包密码破解通常围绕着ARCHPR展开的有三种方式(不过就两种,一种是一个个去试,一个是拿现成已知压缩包里面有的去试):
- 暴力破解:这种方式尝试用各种字符的组合,穷举密码是否正确。但是破解的时间由密码的复杂和长度而定,太长就太离谱了,ARCHPR对于过长的密码的破解甚至要收费的。例如一个长度为10个字符、包含大小写字符、数字、特殊符号的密码。根据不同的机器性能进行暴力破解需要耗时数月甚至数年以上。
- 密码字典破解:另一种方式为使用,密码字典中包含了人们常用的各种密码组合,使用此种方式,感觉要比上一个要稍微靠谱(?)快一点吧,不过还是取决于你拿来破解的字典。之前搜资料的时候还看到过用kali来生成字典的,不过那个好像就关联到web方面破解网页的账号密码了。字典获取网站:https://hzgzs.lanzoui.com/s/yasuopj
- 明文破解:该攻击是根据已知的纯文本攻击,这意味着必须知道部分加密数据(俗话说就是压缩包里面的东西)才能破解密码。(注意!rar是没有办法明文破解的,aes256加密的zip以及rar、7z只能选择暴力破解或者字典破解。如果有错误待更正,网络上暂时没有找到相关的解法,问gpt也是含糊还说不要做不道德的事)
然后是额外需要脚本的:CRC32碰撞(这里zip和rar都可以用)
原理就是crc32的校验码比较短,一个个的枚举的所有可能字符串的 CRC32 值是要与压缩源文件数据区中的 CRC32 值所对应。不过用这个方法有限制,就是说适用于看到一堆压缩文件的,其加密的内容(里面只有txt文件)非常短,一般是四个字节,然后密码可以奇长(这样就不能直接穷举密码啦),因为crc32碰撞本来就是绕过密码直接得到内部的信息的。
它的碰撞性质(即两个不同的输入可以产生相同的 CRC32 值)是由于其固定长度的特性。由于 CRC32 只有 32 位,理论上存在很多可能的输入数据,它们的 CRC32 值相同。
-
关于什么是CRC32
CRC 本身是「冗余校验码」的意思,CRC32 则表示会产生一个 32 bit ( 8 位十六进制数) 的校验值。由于 CRC32 产生校验值时源数据块的每一个 bit (位) 都参与了计算,所以数据块中即使只有一位发生了变化,也会得到不同的 CRC32 值。
CRC32 校验码出现在很多文件中比如 png 文件,(所以也可以通过计算crc来得知是否更改了图片的长宽高)同样 zip 中也有 CRC32 校验码。值得注意的是 zip 中的 CRC32 是未加密文件的校验值。
接下来需要的就是找脚本了
直接上链接!下面的这个是处理多个文件的
https://www.cnblogs.com/Moomin/p/15269733.html
还有github上6位的CRC32爆破工具
https://github.com/theonlypwner/crc32
用法:python crc32.py reverse 你的crc32密文
(密文需要加上0x变成16进制)
单个的:
# -*- coding: utf-8 -*-
import zlib
import base64
import string
import itertools
import struct
# 爆破所有可能的crc,存起来
alph = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/='
crcdict = {}
print("computing all possible CRCs...")
for x in itertools.product(list(alph), repeat=3):
st = ''.join(x)
testcrc = zlib.crc32(st.encode('utf8'))
crcdict[testcrc] = st
print("Done!")
print(crcdict)
# 判断crc是否在集合中
f = open('flag.zip','rb')
data = f.read()
f.close()
crc = "".join('%s' %id for id in data[14:18])
if crc in crcdict:
print(crcdict[crc])
else:
print("FAILED!")
明天试试这个行不行,还没试。
还有一个比较好玩的,自动化脚本!(ctf全自动化呜哇)
https://www.ddosi.org/crc32-tools/
使用kali上的工具
-
Fcrackzip(zip专用)
安装
sudo apt-get install fcrackzip
指令格式
fcrackzip -b -c 'aA1' -l 1-10 -u 123.zip
-b 表示使用暴力破解的方式
-c 'aA1' 表示使用大小写字母和数字混合破解的方式
-l 1-10 表示需要破解的密码长度为1到10位
-u 表示只显示破解出来的密码,其他错误的密码不显示出来
另外的:
a 表示小写字母[a-z]
A 表示大写字母[A-Z]
1 表示阿拉伯数字[0-9]
! 感叹号表示特殊字符[!😒%&/()=?{[]}+*~#]
: 表示包含冒号之后的字符(不能为二进制的空字符),例如 a1:$% 表示 字符集包含小写字母、数字、$字符和%百分号添加字典破解:
lysmacbookair:Desktop laoyan$ fcrackzip -D -p lybbnpass.txt -u 123lybbn.zip
-D 表示要使用字典破解
-p 表示要使用那个字典破解
注:Kali linux自带了一些字典在/usr/share/wordlists/文件夹下
更多:
fcrackzip-h
-
rarcrack(zip,rar,7z都可)
官方主页:http://rarcrack.sourceforge.net
安装:
apt-get install rarcrack
指令格式
执行命令: rarcrack 文件名 -threads 线程数 -type rar|zip|7z
Rarcrack的特点是可以使用多线程,而且可以随时暂停与继续(暂停时会在当前目录生成一个(源文件)xml文件(状态文件:crack.rar.xml),里面显示了正在尝试的一个密码)。
可以对文件crack.rar.xml文件,做出一些修改来提高破解的速度:
输入命令:vim crack.rar.xml来对当前的状态文件进行修改。
<?xml version="1.0" encoding="UTF-8"?> <rarcrack> <abc>0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</abc> //要枚举的数 <current>000</current> //从什么位开始 <good_password>100</good_password> //这里的格式可能会不一样,有可能只有<good_password> </rarcrack>
如果在执行过程中,如果出现没有那个文件什么的错误,指令修复 :
sudo apt-get install libxml2-dev libxslt-dev
额外的相关链接:CRC32算法冲突概率测试和分析
https://blog.csdn.net/yunhua_lee/article/details/42775039和原测试报告http://www.backplane.com/matt/crc64.html