Cache

Overview

This is an application written in Python to perform audio steganography which is the process of hiding a message you want to be secret inside of another object.

Steganography takes many different forms and messages can be obfuscated in a variety of different media. This application focuses on a specific type of Audio Steganography which exploits the frequency range the average human adult can hear. The range of frequencies which can be percieved is roughly in the range of 20Hz - 17 kHz. This means that we can take an audio recording that we want to hide in plain site and apply a transformation to it which shifts the message outside of the range of human hearing & hide it within another audio recording. A special operation can be performed to retrieve the hidden secret message from the combined audio file.

To read more about this specific form of frequency domain steganography look here This was my primary reference source in developing the software

Download

A very early version can be downloaded here.

Note 1: this has only been tested on macOS at this stage - so may not work on Windows / Linux (but maybe it will!)

Note 2: I don't have a personal Apple developer account and so, unfortunately, the zip is not signed / notarised. This means

  1. You'll have to trust me not to do anything nefarious
  2. Go into System Preferences -> Security Privacy and allow the software to be run

All of the dependencies are bundled into the application - so there's no need to install any extra software

Usage

At this stage the usage is fairly simple, but requires using a terminal / console application

Unzip the downloaded archive and open a terminal window inside the newly created directory

It has two usage patterns:

Transmitter

./frequency_domain_CLI transmitter base_audio secret_audio output_path

This is the forward operation, which hides secret_audio inside base_audio and stores the combined result in output_path
Note: The 3 supplied parameters are all paths to MONO audio files on disk, with an assumed sample rate of 44.1 kHz. Its not necessary for output_path to point to an existing file, it will be automatically created

Receiver

./frequency_domain_CLI receiver input_audio output_path

This is the reverse operation, which retrieves a previously obfuscated hidden message from input_audio and stores the recovered result in output_path
Note: The 2 parameters are all paths to MONO audio files on disk with an assumed sample rate of 44.1 kHz

Example

The zip file contains some test audio to work with:

daniel_guitar_mono_trimmed.wav: is a recording of a friend of mine playing guitar
secret_message.wav: is a low quality recording of myself saying something I heard in an old metal gear solid daniel_guitar_mono_trimmed

Run: ./frequency_domain_CLI transmitter daniel_guitar_mono_trimmed.wav secret_message.wav output.wav
This will hide "secret message" inside the guitar recording and store the result in output.wav

If you listen to the output.wav you shouldn't really notice any difference compared to the base guitar recording file. This means the secret message has been successfully hidden

Run: ./frequency_domain_CLI receiver output.wav recovered.wav
This will retrieve the hidden message and store it in recovered.wav

If you listen to the recovered.wav you should hear an even lower (and much quieter!) version of what we originally put in to the Transmitter