Mona LSB

Flag: HACKDAY{M0N4_L1SA_IS_THE_NEW_META}

Challenge

Description


A mysterious audio file has been discovered. The steampunk engineers who created it are said to have hidden a precious secret within. Your mission is to dive into the binary depths of this file to reveal the hidden message.

The file contains a classical melody, but the essence of the challenge lies in least significant bits. Can you find the key to decode what it hides?

sha256: 978e2272c987311dc8f3ce8e3bf76a5e4bebf5cdafd13ef18e9dfbdbdb2e9a69

Flag format : HACKDAY{...}

Solution

On va lire frame par frame le fichier .wav. Les premières frames sont étranges, il n'y a que des 0 et des 1 :

import wave

wav = wave.open('wmremona-is-you-here.wav')
frames = wav.readframes(wav.getframerate())
print(frames[:20])
b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

Sachant que ça ressemble à des bits, on va appliquer une technique de LSB dessus. Pour ça, on va imaginer qu'on groupe ces bits par octets et ne garder que le dernier. Ça équivaut à ne prendre que toutes les 8 valeurs.

import wave

wav = wave.open('wmremona-is-you-here-wav')
frames = wav.readframes(wav.getframerate())
bits = [str(frames[i*8]) for i in range(8 * 50)]

Maintenant, on regroupe les bits par octets :

import wave

wav = wave.open('wmremona-is-you-here-wav')
frames = wav.readframes(wav.getframerate())
bits = [str(frames[i*8]) for i in range(8 * 50)]
data = [int(''.join(bits[i:i+8]), 2) for i in range(0, len(bits), 8)]
print(bytes(data).decode())
HACKDAY{M0N4_L1SA_IS_THE_NEW_META}

Dernière mise à jour

Cet article vous a-t-il été utile ?