去年帮一个朋友恢复他十年前的压缩老照片,压缩包密码是包密他自己设的,结果忘了。码暴他试了生日、力破手机号、压缩名字拼音,包密全不对。码暴我问他当时设密码什么习惯,力破他说那会儿刚看完《盗梦空间》,压缩可能跟电影有关。包密我写了个脚本,码暴拿网上能搜到的力破《盗梦空间》相关词汇——角色名、台词、压缩上映日期、包密导演名字——组合了大概两千个候选,码暴跑了不到三分钟就开了。密码是"Cobb2010"。
这事说明一个道理:大部分人设密码,逃不出自己那点生活半径。暴力破解听起来像黑客电影里的桥段,实际上它的核心不是技术,是猜测策略。你不需要真的穷举所有字符组合,那是天文数字。你需要的是缩小范围,让计算机替你去撞那几千几万种“人可能想出来的东西”。
所谓字典攻击,就是拿一个词表挨个试。这个词表不是英语词典那么简单。网上流传的rockyou.txt,包含一千四百万条真实泄露过的密码,从"123456"到"iloveyou"到"qwertyuiop"全在里面。我本地跑过这个字典对普通zip文件,每秒能试几千次,一千四百万条大概四十分钟跑完。如果密码是纯单词加简单数字后缀,命中率相当高。
但zip格式有个麻烦。传统ZipCrypto加密,校验方式很弱,甚至可以不验证密码直接解密部分内容。AES-256加密的zip就老实了,每次尝试都要完整走一遍密钥派生,速度掉到每秒几百次。一个八位纯数字密码,一亿种可能,用AES加密的zip去跑,单机得跑好几天。这时候就得换思路。
我那个朋友的密码"Cobb2010",如果用纯字典去撞,得把电影相关词全列出来再拼年份,组合数也不小。但我当时已经知道他大概会加年份,所以直接固定后四位为2010,前面只跑电影相关词。这就是掩码攻击的逻辑:你告诉工具,密码是“大写字母开头+四个小写字母+四位数字”,它只在这个模式里穷举。搜索空间从几十亿缩到几百万,秒开。
很多人设密码有固定格式。公司要求“首字母大写+特殊符号+数字”,那你就按这个格式去生成候选,别浪费时间试纯数字。我见过一个案例,某论坛打包资源用了解压密码“www.xxx.com”,这种直接把网站域名当密码的,字典里加一条就完事。
CPU跑hashcat,每秒几千次算快的。换成一张RTX 4090,跑NTLM哈希能到每秒上亿次。zip的AES稍微慢点,但也能到每秒几百万次。这个量级下,八位混合大小写字母加数字的密码,理论上几天内能出。当然电费也不便宜。
更狠的是分布式。我见过一个开源项目,把任务拆成小块分给几十台机器,每台跑不同的掩码区间。一个用生日+名字缩写的密码,在二十台机器上跑了六个小时出来。这已经不算“破解”了,更像是在跟密码主人的懒惰打一场消耗战。
说句实在话,普通用户设的压缩包密码,九成以上撑不过一个精心准备的字典加规则组合。真正难破的是那种用密码管理器生成的随机字符串,比如"7#kL9$mP2&xQ",这种你只能硬穷举,而穷举的代价往往超过文件本身的价值。所以下次设压缩包密码,要么用长随机串,要么干脆别加密——把文件传网盘设个提取码,可能还更省事。