GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

网络安全 --- CTF打靶 之 ZIP伪加密 → Robot36慢扫电视 → 二维码补齐 → DeepSound隐写 → GPG解密 → Base64图片 → SilentEye隐写

这个只做了解没有多大意义,生活中几乎见不到

知识点概览

ZIP伪加密 → Robot36慢扫电视 → 二维码补齐 
    → DeepSound隐写 → GPG解密 → Base64图片 → SilentEye隐写

image

 

 

第一步:修复ZIP伪加密

伪加密 = 修改标志位骗过解压软件,数据本身未加密
修复方式 = 将加密标志位改回 00 00

操作步骤

使用 010 Editor 打开ZIP文件

搜索两处需要修改的位置:

修复对照表

标识魔数标志位偏移修改前修改后
本地文件头 50 4B 03 04 +6, +7 09 00 00 00
核心目录区 50 4B 01 02 +8, +9 09 00 00 00

⚠️ 注意:实验手册中写的是 504b0304504b0102,即这两处都需要修改 

原则上只需修改 50 4B 01 02(Central directory)中的标志位

因为解压软件优先读取Central directory来判断是否加密


第二步:Robot36 解码慢扫电视信号

什么是 Robot36?

本质就是图片和音频的相互转化

SSTV(慢扫描电视) 是一种通过音频信号传输图像的技术,Robot36 是其中一种编码模式。

音频文件(.wav) → SSTV解码 → 图像文件(.png/.jpg)

工具准备

平台工具
Android Robot36 App(Google Play)
Windows MMSSTV / RX-SSTV
Linux qsstv
通用 在线解码器

操作步骤

方法一:手机App(最简单)

1. 安装 Robot36 App
2. 手机播放 sounds.wav
3. App自动识别并解码
4. 得到二维码图片

方法二:Linux qsstv

# 安装
sudo apt install qsstv

# 或使用 Python 库
pip install pySSTV

# 播放音频同时用软件接收
aplay sounds.wav  # 同时运行qsstv监听

方法三:在线工具

网站:https://slowrx.com/
上传wav文件 → 自动解码 → 下载图片

二维码补齐

解码出来的二维码可能不完整(缺少边框或定位角):

正常二维码结构:
┌──────────────────┐
│ ██  ░░░░░░  ██   │  ← 定位符(三个角)
│ ██  ░░░░░░  ██   │
│                  │
│   ░░░░░░░░░░░    │  ← 数据区
│   ░░░░░░░░░░░    │
│                  │
│ ██               │  ← 第三个定位符
│ ██               │
└──────────────────┘

补齐方法:

1. 用 PS / GIMP 打开二维码图片
2. 添加白色边距(四周留白至少4个模块宽度)
3. 若定位符缺失,手动补全三个角的黑色方块
4. 确保图片为黑白两色,无灰度

扫码获取密码

使用微信/支付宝/专业扫码App扫描补齐后的二维码

结果:lapsume

第三步:DeepSound 提取隐写内容

DeepSound 简介

本质就是

DeepSound 是一款音频隐写工具,可以将文件隐藏在WAV/MP3等音频文件中,支持密码保护。

工具获取

官网:https://github.com/Jpinsoft/DeepSound/releases
平台:Windows

操作步骤

1. 打开 DeepSound
2. 点击 "Open carrier files"
3. 选择 flag.wav
4. 输入密码:lapsume
5. 点击 "Extract secret files"
6. 选择输出目录

提取结果

flag.wav (密码: lapsume)
    ├── *.asc          ← GPG私钥文件
    └── encrypted_file ← 被GPG加密的文件

第四步:GPG 解密(Kleopatra)

什么是 .asc 文件?

.asc 文件是 ASCII 装甲格式的 GPG 密钥文件,通常包含:

  • 公钥(Public Key)
  • 私钥(Private Key)
  • 签名(Signature)
text
文件内容格式:
-----BEGIN PGP PRIVATE KEY BLOCK-----
...base64编码的密钥数据...
-----END PGP PRIVATE KEY BLOCK-----

工具选择

工具平台说明
Kleopatra Windows GnuPG图形界面,推荐新手
GnuPG Linux/Windows 命令行工具
GPG Suite macOS Mac平台推荐

方法一:Kleopatra(图形界面)

text
1. 安装 Gpg4win(包含Kleopatra)
   下载:https://www.gpg4win.org/

2. 导入私钥
   - 打开 Kleopatra
   - 文件 → 导入...
   - 选择 *.asc 文件
   - 确认导入

3. 解密文件
   - 文件 → 解密/验证...
   - 选择加密文件
   - 自动使用导入的私钥解密
   - 保存解密结果

方法二:GnuPG 命令行

Bash
# 导入私钥
gpg --import secret.asc

# 查看已导入的密钥
gpg --list-secret-keys

# 解密文件
gpg --decrypt encrypted_file > decrypted_output

# 或指定输出文件
gpg --output decrypted.txt --decrypt encrypted_file

解密结果

text
解密后得到:Base64编码的图片文本文件

第五步:Base64图片还原

识别 Base64 图片

text
文件内容示例:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...

或纯 Base64:

text
iVBORw0KGgoAAAANSUhEUgAAAAUA...(以 iVBOR 开头通常是PNG)

还原方法

方法一:Python脚本

Python
import base64

# 读取base64文本
with open('decrypted.txt', 'r') as f:
    content = f.read().strip()

# 去除data URI头部(如果有)
if ',' in content:
    content = content.split(',')[1]

# 解码并保存为图片
img_data = base64.b64decode(content)
with open('output.png', 'wb') as f:
    f.write(img_data)

print("[+] 图片已保存为 output.png")

方法二:在线工具

text
网站:https://base64.guru/converter/decode/image
粘贴Base64文本 → 点击解码 → 下载图片

方法三:Linux命令行

Bash
base64 -d decrypted.txt > output.png

第六步:SilentEye 提取最终Flag

SilentEye 简介

SilentEye 是一款跨平台的隐写工具,支持在图片和音频中隐藏信息,使用默认密码(空密码)或自定义密码。

工具获取

text
官网:https://achorein.github.io/silenteye/
平台:Windows / Linux / macOS

操作步骤

text
1. 打开 SilentEye

2. 拖入 output.png 图片
   (或 文件 → 打开)

3. 点击 "Decode"

4. 密码设置:默认密码(留空)
   按题目说明使用 "default password"

5. 点击解码

6. 查看提取的文本内容

获取 Flag

text
SilentEye 解码结果:

flag{dorothy's_vision}

工具汇总

步骤工具用途
第一步 010 Editor / WinHex / HxD ZIP伪加密修复
第二步 Robot36 / qsstv SSTV音频解码
第二步 PS / GIMP 二维码补齐
第三步 DeepSound 音频隐写提取
第四步 Kleopatra / GnuPG GPG解密
第五步 Python / 在线工具 Base64图片还原
第六步 SilentEye 图片隐写提取

知识点速查

凯撒密码(题目提到但本题似乎未直接用到)

Python
def caesar_decrypt(text, shift):
    result = ""
    for char in text:
        if char.isalpha():
            base = ord('A') if char.isupper() else ord('a')
            result += chr((ord(char) - base - shift) % 26 + base)
        else:
            result += char
    return result

# 爆破所有位移
for i in range(26):
    print(f"shift {i}: {caesar_decrypt('密文', i)}")

ECDSA(椭圆曲线数字签名,本题用于理解GPG相关)

text
ECDSA 常见于 GPG 密钥中
特点:相比RSA,密钥更短但安全性相当
在CTF中:若出现 ECDSA 漏洞题,
          通常考察随机数重用 → 可恢复私钥

解题路径思维导图

text
challenge.zip (伪加密)
├─[修改 09 00 → 00 00]
├── sounds.wav
│   └─[Robot36 SSTV解码]
│       └── 二维码图片
│           └─[补齐 + 扫码]
│               └── 密码: lapsume
└── flag.wav
    └─[DeepSound + 密码 lapsume]
        ├── private.asc (GPG私钥)
        └── encrypted_data
            └─[Kleopatra/GPG导入私钥解密]
                └── base64_image.txt
                    └─[Base64解码]
                        └── image.png
                            └─[SilentEye默认密码]
                                └── flag{dorothy's_vision} ✓

总结

这道题考察了多层隐写和加密的综合运用:

  1. ZIP伪加密 - 格式层面的障眼法
  2. SSTV音频图像 - 将图像编码进音频
  3. 二维码识别 - 图像信息提取
  4. 音频隐写(DeepSound) - 音频中藏文件
  5. GPG非对称加密 - 文件加密保护
  6. Base64图片编码 - 数据编码传输
  7. 图片隐写(SilentEye) - 最终信息藏匿

💡 CTF解题核心思路:遇到文件先看文件头魔数,判断真实文件类型;每一层都可能是一种隐写或加密手段,逐层剥开即可找到Flag。

posted on 2026-05-21 07:38  GKLBB  阅读(81)  评论(0)    收藏  举报