关于 competition-zip-archive
面向 CTF 中加密 ZIP/PKZIP 文件的分析技能,适用于已由 `$ctf-sandbox-orchestrator` 建立分析环境的任务。它优先使用可预测明文恢复传统 ZipCrypto 内部密钥,并强调验证解密副本及保存证据,而非盲目暴力破解密码。
主要功能
- 01确认压缩包格式与加密类型
- 02寻找精确的已知明文
- 03用 bkcrack 恢复内部密钥
- 04生成并验证未加密副本
- 05记录命令、哈希和证据
适用场景
- 01利用可预测文件内容解锁 ZIP 条目
- 02检查压缩方式对明文匹配的影响
- 03验证解密归档并提取目标文件
- 04在不满足已知明文条件时转交其他路径
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ zhaoxuya520/ reverse-skill --skill competition-zip-archive安装后在 Claude Code 中输入/competition-zip-archive确认已加载。
附带文件agents/openai.yamlreferences/zip-archive.md
详细介绍
竞赛 ZIP 压缩包
仅当 $ctf-sandbox-orchestrator 已启用并已确立沙箱假设、证据优先级和分析项目根目录后,才将此技能作为下游专用技能使用。如果尚未完成上述步骤,请先回到 $ctf-sandbox-orchestrator。
当关键路径是加密的 ZIP/PKZIP 压缩包,而不是上传解析器或通用加密数据块时,使用此技能。当题目提供可预测的文件、格式头、模板或其他可恢复的明文时,优先使用传统的 ZipCrypto 已知明文路径。不要一开始就进行盲目密码爆破。
除非用户明确要求英文,否则用简体中文回复。命令和工具输出保持原样。
快速开始
- 保留原始压缩包,计算哈希,并在分析项目的
work/<case>/目录下对副本进行操作。 - 在尝试密码攻击之前,确认实际的压缩包格式并列出条目。
- 确定条目是否使用传统的 ZipCrypto。
bkcrack无法恢复 WinZip AES 或其他现代加密。 - 构建精确的已知明文候选。攻击至少需要 12 个已知明文字节,其中至少 8 个连续字节。
- 使用
bkcrack恢复内部密钥,然后创建一个未加密的副本并解压。 - 保留命令、条目名称、已知明文来源、恢复的密钥、输出哈希和最终 flag 作为证据。
工具设置
在猜测可执行文件位置之前,使用常规工具索引和引导路径:
powershell -NoProfile -ExecutionPolicy Bypass -File skills/scripts/refresh-tool-index.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File skills/scripts/bootstrap-reverse.ps1 -Capability bkcrack
在 Kali 上,使用等效的能力命令:
bash kali/scripts/bootstrap-reverse.sh bkcrack
Windows 能力固定在 v1.8.1 版本,并验证 GitHub 资产摘要。如果手动安装该工具,之后刷新 skills/tool-index.md。
工作流
1. 确立压缩包真相
保持原始文件不可变并记录:
sha256sum challenge.zip
file challenge.zip
bkcrack -L challenge.zip
在 Windows 上,使用 Get-FileHash 代替 sha256sum。bkcrack -L 显示条目名称、压缩方法和加密状态。不要仅凭 .zip 扩展名推断加密类型。
检查将提供已知明文的条目。有用的候选是已存储或其他可预测的文件,如 PNG、PDF、文本模板或题目生成的配置。本地 ZIP 头(PK\x03\x04)是压缩包条目的元数据,不是加密成员内部的明文,因此它本身不是有用的已知明文样本。
2. 通过已知明文恢复密钥
当密文条目是 flag.txt,且 known.zip 中有匹配的明文条目时:
bkcrack -C challenge.zip -c flag.txt -P known.zip -p flag.txt
对于原始密文和明文文件:
bkcrack -c cipherfile -p plainfile
明文必须与加密条目中表示的字节匹配。如果条目被 deflate 压缩,文件的未压缩副本不自动是正确输入;请使用匹配的 ZIP 夹具或精确的压缩字节。
如果已知字节从偏移量开始,添加 -o <offset>。如果只有 8-11 个连续字节,使用稀疏提示将它们与其他已知字节组合:
bkcrack -c cipherfile -p plainfile -x 25 4b4f -x 30 21
成功运行会得到三个内部 ZipCrypto 密钥。精确记录打印出的值;它们不是原始密码。
3. 解锁并验证
使用恢复的密钥创建新压缩包,保持源文件不变:
bkcrack -C challenge.zip -k K0 K1 K2 -D unlocked.zip
7z t unlocked.zip
7z x unlocked.zip -ounpacked
将 K0 K1 K2 替换为 bkcrack 打印的十六进制值。使用压缩包测试命令和哈希或精确 flag 比较来验证输出。如果只需要一个原始成员,-d 可以写出其解密字节;deflate 压缩的原始数据可能需要 bkcrack 附带的 inflate.py 辅助工具。
4. 前置条件不满足时改道
- WinZip AES 或其他现代加密模式:停止此路径,改为识别题目特定的原语。
- 没有可靠已知明文:在考虑口令恢复之前,先检查文件名、元数据、压缩方式选择、题目来源以及其他条目。
- 已知明文比所需长度短:寻找更多连续字节,或使用有证据支持的稀疏偏移。
- 问题是应用上传/解析链:转交给
$competition-file-parser-chain。 - 问题是压缩包解压后的通用密文或自定义密码:转交给
$competition-crypto-mobile。
需要保留的证据
- 原始文件与工作副本路径以及 SHA-256 哈希
bkcrack -L输出及选定的加密成员- 确切的明文样本、压缩方法、偏移量以及稀疏字节提示
- 密钥恢复命令及恢复出的三个内部密钥
unlocked.zip验证输出、解压路径以及最终产物哈希
阅读 references/zip-archive.md 获取决策表和证据清单。