wav也能像png那样美丽吗
📎 相关:
| 2.音视频隐写
| 1.1LSB隐写
| 4.压缩包分析
| 1.图片隐写
| 4.1已知明文攻击(bkcrack)
| Misc tools
从Audacity读摩斯密码


fakeflag1 {**L**OOK AT THE FILE END}
010打开文件看文件尾

fakeflag2{**S**ee the audiram}
右键看频谱图


fakeflag3{**B**e aware of the sentences intials}注意句子的首字母
LSB
1 | import wave |

VNCTF{C@u5e_y0u_10ve_m3_dummy}
welcome.pdf
伪加密修复

010打开pdf

看到许多09``20构成的数据 推测是pdf隐写
wbstego pdf隐写
https://www.bailer.at/wbstego/


第一次用wbStego记一下使用步骤





如果有密码 填密码 此处为空


接下来在桌面上看到welcome.pdf.txt
获得7z压缩包的密码fHsi9qhd#3
汉信码

p图软件把他们拼在一起

用中国编码app扫描

得到半个flag VN{Un10n_7
盲水印
随后再对四张图片进行分析,StegSolve可以看到RGB各通道是有一点猫腻的,邻近像素之间有细微差异,并且部分通道有一定对称性
考虑使用盲水印
盲水印算法可以有效抵抗模糊,图片覆盖,椒盐噪声,亮度变化,裁剪带来的影响,甚至连截图也能提取出水印
四张图,每张图上有4个padding为2的Unicode,一共是16个,全部提取出来并手动补0
ref(APA): https://himekawa.top/2025/12/minivnctf2025-welcomepdf/

\u0065\u0061\u0072\u006E\u005F\u0046\u0072\u0030\u0072\u006E\u0043\u004E\u0071\u0077\u0071\u007D(注意是先读第一张盲水印的正的一行,再读第二章盲水印正的一行这种)

earn_Fr0rnCNqwq}
VNCTF{Un10n_7earn_Fr0rnCNqwq}
D u know Pyc?
https://www.hurkin.top/index.php/2025/d-u-know-pyc%ef%bc%9f%e5%ae%98%e6%96%b9write-up/
关于pyc
.pyc是python源代码编译后的字节码文件

构建pyc头部
1.Magic Number

备注里提到版本号是python 3.12.12
1 | # get_pyc_magic.py |
于是python 3.12对应的前四字节是cb0d0d0a
2.Bit Field

在python 3.12.12中,Bit Field只有两种状态
00 00 00 00 ——->
后面跟着的是Timestamp和Source Size,然后16位后hash 值置空
(就是全0,会被非预期,所以我手动将其改掉了,但是不会影响pyc的正常功能,对此感兴趣师傅可以自己去构建一下)
01 00 00 00——->
后面跟着的是hash值 至于Bit Field为00 00 00 00,决定了8-12位是TIMESTAMP or HASH
ref(APA): Hurkin.Welcome To Hurk1n’s Home!!!.https://www.hurkin.top. Retrieved 2026/1/8.
情况1:Bit Field=00 00 00 00
1 | [魔数][Bit=0][时间戳][文件大小][CodeObject...] |
不存在hash值
python只靠“时间+大小”判断是否要重新编译 容易出错
情况2:Bit Field=01 00 00 00
1 | [魔数][Bit=1][时间戳][文件大小][16字节hash][CodeObject...] |
存了 hash 值!
python 会对比:当前 .py 的 hash vs .pyc 里存的 hash
一样 → 用缓存
不一样 → 重新编译
为什么wp原文说hash 置空(全0)不会影响功能?
因为如果 Bit Field 是 00 00 00 00,python 就不会去读 hash
所以即使你在那个位置写 16 个 0x00,python 也视而不见
但如果 Bit Field 是 01 00 00 00,而 hash 是全 0,那就会出问题(因为真实代码的 hash 不可能是全 0)。
此处Bit Field为00 00 00 00
3.TimeStamp
从Bandzip看到的修改时间是压缩包保存的时间 而非py文件最后修改时间 不知道
表示为????????
4.File Size

flag.py的原始大小是1411转为4字节的16进制表示是83050000
1 | def dec_to_le_hex(value, byte_length=4): |
0.pyc Header
于是构建的pyc头部为
CB 0D 0D 0A 00 00 00 00 ?? ?? ?? ?? 83 05 00 00
综上已知CB 0D 0D 0A 00 00 00 00 ?? ?? ?? ?? 83 05 00 00 8+4字节,且偏移量为12。可以进行明文攻击
ref(APA): Hurkin.Welcome To Hurk1n’s Home!!!.https://www.hurkin.top. Retrieved 2026/1/8.
| 字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 值 | CB | 0D | 0D | 0A | 00 | 00 | 00 | 00 | ?? | ?? | ?? | ?? | 83 | 05 | 00 | 00 |
什么是8+4字节
1 | [已知8字节] [未知4字节] [已知4字节] |
什么是偏移量为12
在整个数据块中,第12字节处的值是已知的,并且从那里开始有连续的4字节是已知的
明文爆破
cd C:\Users\13964\Desktop\pyc

.\bkcrack.exe -C flag.zip -c attack_it.pyc -x 0 CB0D0D0A00000000 -x 12 83050000

.\bkcrack.exe -C **flag.zip** -c **flag.py** -k **d7fe0787 b3af2704 99fa95dc** -d **flag_decrypted.py**

1 | from base64 import b64encode as _B64E |
Sect3t.jpg

your-secret-key-here
编写解密脚本
1 | from base64 import b64decode |
VNCTF{W3lc0me_T0_V&N2025}
