
BUUCTF上有大量题目都叫 password但每题打开以后的玩法完全不一样。有些是压缩包加密等你爆破有些是伪加密改两个字节就解了还有一些是把 flag 编码成 base64 或凯撒密码题干却只写了一个 password。我第一次刷这类题时解压弹窗让我输密码试了一堆 admin、123456、password 全不对最后才发现题目描述里写着“生日八位数字”。这篇文章把我做 BUUCTF password 题的完整思路、工具参数、踩坑记录整理出来希望卡关的朋友少走弯路。这类题的难点不在密码学本身而在信息收集和文件分析。很多新手一上来就开爆破爆了半天不出结果其实是方向错了。下面按我的解题顺序逐步展开。1. 题目初识password题到底在考什么1.1 一类看似简单却容易卡住的题型password 类题目在 BUUCTF 里通常归类到 Misc 或 Crypto常见形式是给一个加密的压缩包附件里放着 flag 或线索文件压缩包打开需要密码。表面上看这是一道“猜密码”题但实际上考点覆盖了文件格式分析、压缩包加密原理、常见编码识别、字典构造、掩码爆破等多个方向。这类题难度跨度很大。简单的题目把密码直接写在题目描述里比如“初始密码是 123456”中等题需要从文件名、注释、图片隐写、伪加密等角度找线索难一点的要综合多种线索比如“名字缩写生日”这种组合密码。我见过很多朋友在 password 题上卡一下午不是因为工具不会用而是没意识到题目里到处都藏着提示。判断一道 password 题从哪下手先别急着爆破而是先看三样东西题目描述、附件类型、文件命名。题目描述里如果出现“生日”“手机号”“六位数字”这类字样基本就是掩码爆破的方向如果文件名本身就是一串有规律的字符那很可能是编码或隐写线索。1.2 解题前必须先做的三件事第一件事是完整读题。BUUCTF 的 password 题很少把话说满“密码是六位纯数字”这种描述已经是良心了更多时候只说“一个神秘压缩包”。但描述里有几个字往往决定了解法比如“生日”“纪念日”“连续数字”“初始密码”等这些都是缩小爆破范围的直接线索。第二件事是看附件类型。拿到压缩包后先用file命令确认真实格式不要只靠扩展名判断。我遇到过文件名是 flag.zip实际却是一个图片文件的 case也遇到过压缩包尾部被追加了额外数据的情况。第三件事是检查文件命名和压缩包注释。很多题目会把密码暗示放在文件名里比如password_19981214.zip或者压缩包注释写着“你猜我是谁”。用 7-Zip 或 WinRAR 打开压缩包时先看“注释”标签再用十六进制工具搜索可见字符串往往能发现线索。做完这三件事再决定走伪加密路线还是爆破路线能省很多无用功。2. 核心考点拆解从伪加密到爆破参数的完整认知2.1 压缩包文件头与伪加密判定很多 password 题实际上不是密码难而是“伪加密”。伪加密是指压缩包文件头里的加密标志位被人为改成了“已加密”但数据区其实没有真正加密。这种情况下暴力破解完全没有意义因为根本不存在密码直接修改标志位就能解开。判断伪加密需要理解 ZIP 格式的文件头结构。ZIP 文件由多条记录组成每个文件条目对应一个局部文件头以50 4B 03 04开头ASCII 为PK\x03\x04。在这个头部里偏移 6 字节处的两个字节是通用位标志general purpose bit flag。这个标志的最低位bit 0值 0x01表示文件是否加密置 1 代表加密置 0 代表未加密。文件末尾的中央目录记录以50 4B 01 02开头同样位置也有这个标志位。我用十六进制编辑器打开压缩包时会先搜索50 4B 03 04然后看后面第 6、7 个字节。如果这个值是09 00表示 bit 0 被置位看起来像是加密但真正决定是否加密的还要看数据区情况有些伪加密题只改了局部文件头的标志位中央目录的标志位还没改这种不一致现象就是典型的伪加密特征。处理伪加密的思路很简单把通用位标志的 bit 0 清零。比如09 00改成08 00或者干脆改成00 00。修改前先把原文件复制一份备份改坏了还能恢复。改完之后再用解压工具打开如果不再提示输入密码说明判断正确。Ziperello 这类工具也能检测出部分伪加密但最稳妥的仍然是手动看文件头。2.2 真加密与爆破参数选择如果确认不是伪加密数据区确实加密了这时候才需要考虑爆破。BUUCTF 的压缩包多为 ZIP 格式加密方式常见为 ZipCrypto。ZipCrypto 属于较老的加密算法破解速度相对较快普通的 CPU 也能跑出不错的速度。另一类 AES 加密的 ZIP 包破解会慢很多BUUCTF 的题一般不会上 AES。爆破工具我常用 Advanced Archive Password RecoveryARCHPR。打开后选择附件Attack Type 有 Brute-force、Mask、Dictionary 等选项。跑纯数字密码时勾选字符集里的 Digits然后设置密码长度范围。所谓掩码就是用?d表示任意数字?l表示小写字母?u表示大写字母?s表示符号。六位纯数字的掩码就是??????八位生日就是????????。参数设置的核心原则是“宁窄勿宽”。一个纯数字六位密码候选空间是 10 的 6 次方即 100 万种组合普通机器几秒钟就能跑完。但如果你选了“大小写字母数字符号”的全字符集密码长度 8 位候选空间就是 94 的 8 次方数量级太大了跑几天都不一定有结果。所以爆破前必须从题目描述、文件名、注释等线索里尽量缩小字符集和长度范围。RAR 压缩包的加密机制和 ZIP 不同BUUCTF 里也有不少 RAR 加密题常用工具是 RAR Password Cracker。思路一样先分析线索再选择掩码直接全键盘暴力往往不现实。有些题还会把加密方式从 ZipCrypto 换到 AES这时 ARCHPR 需要在“加密算法”相关设置中正确选择否则跑半天也是无效功。2.3 编码与数据隐藏解压出 flag 文件后真正的挑战才刚开始。BUUCTF 的 password 题经常在压缩包里放一个文本文件内容却不是明文 flag而是各种编码后的字符串。最常见的有 base64、十六进制、凯撒密码、栅栏密码、云影密码等。识别编码的第一步是看字符集。base64 的典型特征是由大小写字母、数字、、/和末尾的组成长度是 4 的倍数十六进制编码的特征是只有 0-9 和 a-f凯撒密码的特征是内容看起来像英文单词但字母整体偏移了比如flag变成iocj。还有一个常见套路是二维码有的题把密码或提示藏在二维码里需要扫描或者用脚本解析。我在解编码题时最常用的方式是先在 CyberChef 里过一遍。CyberChef 的 Recipe 可以叠加多种操作base64、Hex、ROT13、URL 解码等一键完成。如果编码被套了两层比如先 hex 再 base64CyberChef 也能连续处理。命令行下也可以用 Python 快速验证比如base64.b64decode()解 base64或者自己写个凯撒循环移位脚本。3. 实操过程一道典型password题目的完整WriteUp3.1 信息收集与文件识别下面我用一道典型的演示题把完整流程串起来。假设题目描述是“password: 六位数字”下载附件得到一个flag.zip。我没有直接上爆破工具而是先做信息收集。Linux 下先用file命令看附件类型file flag.zip输出如果显示Zip archive data说明确实是 ZIP如果显示 JPEG 图片或其他格式就得另作打算。接着用binwalk快速扫描压缩包是否包含附加数据binwalk flag.zip然后看压缩包内文件列表和注释unzip -l flag.zip zipinfo -v flag.zip | grep -i commentunzip -l能列出压缩包里的文件名有时候文件名本身就是重要提示。比如文件名叫password_hint.txt内容大概率是线索而不是 flag。如果压缩包支持读取注释也不要漏掉。3.2 压缩包处理与伪加密判定用十六进制编辑器打开flag.zip搜索50 4B 03 04定位到局部文件头再看第 6、7 字节的通用位标志。我遇到的情况是标志位为09 00说明 bit0 被置位看起来是加密了的。但紧接着我检查中央目录记录也就是搜索50 4B 01 02发现中央目录里的标志位也是09 00。按照经验先尝试把局部文件头的09 00改成08 00保存后重新打开压缩包。如果不再要求输入密码说明这就是伪加密已经解决了。如果依然要密码那就要回到爆破路线。补充一个细节中央目录记录里同样有通用位标志如果局部文件头是加密标志但中央目录是未加密解压工具的行为会不一致。有些工具弹窗要求密码有些工具却能直接列出文件。这种“半伪加密”情况以中央目录和局部文件头的差异作为突破点通常把两边都改成08 00即可。3.3 爆破参数设置与执行假设判断下来是真的加密且题目描述是六位数字那我就用 ARCHPR 爆破。打开 ARCHPR加载flag.zipAttack Type 选择 Brute-force字符集勾选 Digits数字 0-9Password Length 设置 Min6、Max6然后点击 Start。六位纯数字的候选空间是 100 万ARCHPR 每秒能跑几十万次基本是秒出结果。密码跑出来后直接解压得到flag.txt。这里要注意 ARCHPR 对 ZIP 加密算法的支持问题。有些新的压缩包加密方式较新ARCHPR 识别不了需要先用其他工具转换或更换暴力破解工具。如果 ARCHPR 长时间卡在 0%先确认加密方式是否为 ZipCrypto。3.4 编码还原与flag提取解压得到的flag.txt内容如果是一串字符串需要判断编码类型。假设内容是ZmxhZ3tidXVjdGZfcGFzc3dvcmR9结尾没有等号但字符集完全落在 base64 的范围内。用 Python 快速解码echo ZmxhZ3tidXVjdGZfcGFzc3dvcmR9 | base64 -d得到flag{buuctf_password}。如果 base64 嵌套多层就在 Python 里循环解码。遇到凯撒密码可以自己写脚本把所有 26 种偏移都打印出来肉眼找 flag或者直接交给 CyberChef 的 ROT13 Brute Force。注意凯撒密码不区分大小写时结果要手动调整大小写。4. 常见问题与排查技巧实录4.1 压缩包无加密却提示要密码这个现象十有八九是伪加密。先用十六进制编辑器查看文件头标志位观察局部文件头和中央目录记录是否都是加密位。若标志位是09 00把 bit0 清零改成08 00或00 00。改完先备份原文件避免改错后文件损坏。还有一种情况是压缩工具对 zip 的兼容性差异。某个压缩包在其他工具下不要求密码但换个工具就要求密码这很可能是工具对通用位标志的解析不同。可以多试几个工具比如 7-Zip、Bandizip、WinRAR通常有一个能直接解开。4.2 爆破半天爆不出来先排查三个因素字符集是不是太宽、密码长度是不是猜错、加密方式是不是选错了。我见过有人把纯数字密码的题放到全字符集里跑跑了几个小时都没结果。正确做法是根据题目描述缩小到数字、生日、手机号、姓名缩写等范围。如果字符集和长度都正确但速度极慢可能加密方式是 AES。ZipCrypto 在 ARCHPR 下速度很快AES 会慢很多。确认加密方式的方法是用 7-Zip 查看压缩包属性或者看压缩包文件头中的额外字段。遇到 AES 加密先把密码范围尽量缩小再用掩码精准爆破。4.3 解压密码正确但flag文件乱码压缩包解开了但拿到的文件用记事本打开是一堆乱码别急着放弃。先用file命令看文件真实类型file flag.txt有些题的 flag 是图片格式只是扩展名改成了 txt有些是 PDF 或 Python 脚本内容看起来像乱码但实际是二进制。如果是图片直接改扩展名或拖进图片查看器就能看到 flag如果是二进制文件用binwalk分析内部结构可能有隐藏数据。4.4 工具选择与报错速查我在实际做题中整理了一张工具速查表遇到对应场景可以直接照着用。使用场景推荐工具备注查看文件真实类型file、DIELinux 下 file 最方便DIE 适合 Windows十六进制分析与修改文件头010 Editor、WinHex搜索50 4B 03 04定位 ZIP 局部文件头ZIP 伪加密检测Ziperello、7-ZipZiperello 能识别部分伪加密但最终以十六进制为准ZIP 密码爆破ARCHPRAdvanced Archive Password Recovery支持暴力、掩码、字典优先选掩码RAR 密码爆破RAR Password Cracker针对 RAR 格式优化速度还算可观明文攻击ARCHPR、PKZIP 相关工具需要已知压缩包内一个文件的明文内容编码转换与多层解码CyberChef、Python拖拽 Recipe 即可连续解码新手友好ARCHPR 还有一个功能容易被忽略Plain-text Attack明文攻击。如果你知道压缩包内某个文件的明文内容同时该文件正好也被同一个密码加密那就可以用明文攻击把密码还原出来而且速度远快于暴力破解。BUUCTF 里有些题会同时给出加密压缩包和一个同名明文文件这时直接走明文攻击就是正解。5. 工具选型与效率心得5.1 常用工具对比经常有新手问我到底该用哪个工具我的答案是“按场景选不按名气选”。ARCHPR 对 ZIP 支持最好速度也快但它不是万能的。RAR 加密的题用 RAR Password Cracker 更顺手PDF 加密的题则用 Advanced PDF Password Recovery。十六进制编辑器是必须常备的。我习惯用 010 Editor因为它有自带模板解析 ZIP 文件结构更直观能看到通用位标志的具体位数含义。WinHex 也不错支持快捷键跳转搜索字符串很方便。两个工具选一个深入用就足够了。除了桌面工具命令行工具也很重要。Linux 下fcrackzip可以跑字典和暴力zipinfo可以查看压缩包详细信息binwalk可以分离隐藏文件。Windows 下没有原生命令但 WSL 环境解决了这个问题。我个人喜欢把 Windows 和 WSL 结合用图形化工具处理文件头命令行处理批量操作。5.2 实操中沉淀的几点心得第一永远先试伪加密再爆破。很多 password 题就在文件头里动了手脚一个字节的事根本不需要跑密码。判断方法很简单用十六进制工具找通用位标志看 bit0 是不是被人为设置过。改完后能解开就省去了爆破时间。第二题目描述是最大提示来源。不是所有 password 题都会明说密码规则但描述里的每一个字都可能是线索。比如“密码是六位数字”说明字符集只有 0-9“密码是生日”需要结合题目给出的日期或人物信息“密码是姓名拼音数字”就需要自定义掩码。仔细读题比盲目爆破有效得多。第三要熟悉编码特征。base64、hex、凯撒、栅栏是出现频率最高的几类编码必须做到一眼认出。base64 的典型特征是等号和/hex 的特征是纯 0-9a-f凯撒的特征是英文单词整体偏移。识别不准时扔进 CyberChef 里逐层试错是最快的方法。第四爆破时学会用掩码而不是纯暴力。掩码能精确表达已知信息比如“八位生日”就可以写成?d?d?d?d?d?d?d?d配合自定义日期范围效率远高于无差别暴力。ARCHPR 的 Mask 模式里也支持多位规则比如?????后接年份这些都是实战中非常好用的操作。最后一句话总结我对这类题的看法password 题的核心不是密码本身而是题目怎么把“密码线索”藏起来。你找线索的能力越强爆破的时间就越短。学会看文件头、学会缩范围、学会识别编码这三件事做扎实之后BUUCTF 上的 password 题基本就拦不住你了。