除伪加密外的解压缩包的方法 -aster

除伪加密外的解压缩包的方法

压缩包密码破解通常围绕着ARCHPR展开的有三种方式(不过就两种,一种是一个个去试,一个是拿现成已知压缩包里面有的去试):

  1. 暴力破解:这种方式尝试用各种字符的组合,穷举密码是否正确。但是破解的时间由密码的复杂和长度而定,太长就太离谱了,ARCHPR对于过长的密码的破解甚至要收费的。例如一个长度为10个字符、包含大小写字符、数字、特殊符号的密码。根据不同的机器性能进行暴力破解需要耗时数月甚至数年以上。
  2. 密码字典破解:另一种方式为使用,密码字典中包含了人们常用的各种密码组合,使用此种方式,感觉要比上一个要稍微靠谱(?)快一点吧,不过还是取决于你拿来破解的字典。之前搜资料的时候还看到过用kali来生成字典的,不过那个好像就关联到web方面破解网页的账号密码了。字典获取网站:https://hzgzs.lanzoui.com/s/yasuopj
  3. 明文破解:该攻击是根据已知的纯文本攻击,这意味着必须知道部分加密数据(俗话说就是压缩包里面的东西)才能破解密码。(注意!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

posted on 2023-11-26 01:43  aster_ist  阅读(367)  评论(0编辑  收藏  举报

导航