tôi làm như writeup nhưng flag trong write up khôn...
बनाया गया: 17 मई 2026
का उपयोग करके उत्तर दिया गया GPT-5.5 Thinking द्वारा Chat01
बनाया गया: 17 मई 2026
का उपयोग करके उत्तर दिया गया GPT-5.5 Thinking द्वारा Chat01
tôi làm như writeup nhưng flag trong write up không đúng
flag format: tjctf{....}
hãy giải lại thật cẩn thận và tìm ra flag có thể nhìn thấy 1 cách rõ ràng rồi viết write up chi tiết
Flag đúng để submit:
texttjctf{sine_waves_are_the_best}
Phần sai trong writeup cũ là đưa dấu ! vào flag. Spectrogram hiện câu:
textSINE WAVES ARE THE BEST!
Nhưng khi chuyển sang flag format thì lấy nội dung câu, lowercase, đổi khoảng trắng thành _, và bỏ dấu câu cuối. Writeup cũ đang submit tjctf{sine_waves_are_the_best!} nên bị sai. (writeup2.txt)
Mình đã tạo lại file kiểm chứng ở đây:
clear_spectrogram.png
[solve_nesting.py]
selected_overlay.wav
File tên là .mp4, nhưng thực tế là Matroska:
bashfile nesting.mp4 ffprobe -hide_banner -show_streams -show_chapters nesting.mp4
Các điểm quan trọng:
textnesting.mp4: Matroska data Stream #0:0 Video: h264 Stream #0:1 Audio: aac Stream #0:2 -> #0:51 Audio: pcm_f32le, 16000 Hz, mono Stream #0:52 Subtitle: ass 12 chapters
Extract subtitle:
bashmkdir -p work ffmpeg -v error -y -i nesting.mp4 -map 0:s:0 work/sub.ass ffprobe -v error -show_chapters nesting.mp4
Lấy subtitle đúng tại timestamp của từng chapter sẽ ghép được:
textIAMNOTTHEFLAG.NOTYET!
Nó nói rõ đây chưa phải flag.
Extract các stream PCM:
bashmkdir -p work/audio for i in $(seq 2 51); do ffmpeg -v error -y -i nesting.mp4 -map 0:$i -c:a pcm_f32le work/audio/s$i.wav done
Tính RMS theo từng cửa sổ 1 giây. Các đoạn nổi bật là:
textsec 00 -> stream 43 sec 01 -> stream 36 sec 02 -> stream 34 sec 03 -> stream 7 sec 04 -> stream 23 sec 05 -> stream 42 sec 06 -> stream 27 sec 07 -> stream 29 sec 08 -> stream 10 sec 09 -> stream 30 sec 10 -> stream 47 sec 11 -> stream 50 sec 12 -> stream 26 sec 13 -> stream 17 sec 14 -> stream 14 sec 15 -> stream 46 sec 16 -> stream 28 sec 17 -> stream 48 sec 18 -> stream 15 sec 19 -> stream 2 sec 20 -> stream 25 sec 21 -> stream 40 sec 22 -> stream 18 and 33
Điểm cần cẩn thận: nhiều đoạn mạnh vì có DC offset. Trước khi ghép để xem spectrogram phải trừ mean của từng đoạn 1 giây:
pythonseg -= seg.mean()
Nếu không trừ mean thì spectrogram sẽ bị các vạch dọc mạnh che mất thông tin.
Sau khi overlay các đoạn đã trừ mean, tạo spectrogram low-frequency. Dòng hiện ra là:
textSINE WAVES ARE THE BEST!
Do đó flag chuẩn hóa là:
texttjctf{sine_waves_are_the_best}
Dấu ! là dấu câu trong thông điệp nhìn thấy, không đưa vào flag.