mcpField
C
competition-zip-archive

competition-zip-archive

github.com/zhaoxuya520安全43.7k69 次安装5 周前更新
代码仓库

关于 competition-zip-archive

面向 CTF 中加密 ZIP/PKZIP 文件的分析技能,适用于已由 `$ctf-sandbox-orchestrator` 建立分析环境的任务。它优先使用可预测明文恢复传统 ZipCrypto 内部密钥,并强调验证解密副本及保存证据,而非盲目暴力破解密码。

主要功能

  1. 01确认压缩包格式与加密类型
  2. 02寻找精确的已知明文
  3. 03用 bkcrack 恢复内部密钥
  4. 04生成并验证未加密副本
  5. 05记录命令、哈希和证据

适用场景

  1. 01利用可预测文件内容解锁 ZIP 条目
  2. 02检查压缩方式对明文匹配的影响
  3. 03验证解密归档并提取目标文件
  4. 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 已知明文路径。不要一开始就进行盲目密码爆破。

除非用户明确要求英文,否则用简体中文回复。命令和工具输出保持原样。

快速开始

  1. 保留原始压缩包,计算哈希,并在分析项目的 work/<case>/ 目录下对副本进行操作。
  2. 在尝试密码攻击之前,确认实际的压缩包格式并列出条目。
  3. 确定条目是否使用传统的 ZipCrypto。bkcrack 无法恢复 WinZip AES 或其他现代加密。
  4. 构建精确的已知明文候选。攻击至少需要 12 个已知明文字节,其中至少 8 个连续字节。
  5. 使用 bkcrack 恢复内部密钥,然后创建一个未加密的副本并解压。
  6. 保留命令、条目名称、已知明文来源、恢复的密钥、输出哈希和最终 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 获取决策表和证据清单。

评论

支持 Markdown