SteGUI

This project aims at developing a graphical front-end for Steghide, that lets users perform all the operations we mentioned in the previous pages, adding the possibility to display and play the supported image and audio file formats. Moreover, a simple text editor was added, which has proven useful to view or edit text files to use as payload (Steghide doesn't support text files as cover files). This project is still being developed on GNU/Linux systems, with Windows support being in the works.

Libraries used

The FLTK toolkit was used to build the GUI. Written in C++, they allow rapid, platform-independent development (FLTK is available on Linux, Windows, Mac OS X) of graphical user interfaces with advanced features. It is also possible to make use of 3D graphics with OpenGL and GLUT emulation (not used in this project). We shall show some screenshots of the front-end in action, that also show the basic FLTK look-and-feel, below.

The GUI interfaces with Steghide through the PStreams library, written again in C++, that permits launching programs from any application and transfer data among them the launcher and the launchees in ways similar to shell pipelines. The basic concept is indeed very similar to those behind the POSIX.2 functions popen() and pclose(), but PStreams also offers the possibility to read both from the stdout and stderr descriptors belonging to the launched processes, and may use bidirectional streams rather than traditionally unidirectional pipes. Windows support in PStreams is currently in CVS.

For audio playing the ALSA library was chosen, as it's currently the standard on Linux systems based on 2.6 kernels. ALSA leaves whatever doesn't belong to the hardware level to user space, allowing access to audio system features with an API that is independent from the actual driver employed; unfortunately, it is not supported on Windows systems.

Interfacing with Steghide

The graphical front-end allows performing all the operations that are supported by Steghide in a user-friendly way. From the menu bar you can open files in the supported formats, each of which will open a tab inside the main window. Every operation may be performed on the currently active open file or on any file by selecting its path in the corresponding boxes in dialog windows. When a Bitmap or JPEG image file is opened it is immediately displayed, while when a Wave or AU audio file is opened a minimal player is shown that allows the user to play the file; editing images or audio are advanced features that are not part of this project. You can select the currently active open file by clicking on any of the open files tabs:

Main window with some open files

Main window with some open files

Minimal player for playing audio files

Minimal player for playing audio files

It is always possible to edit text files with the embedded text editor, that supports selection, copy and paste operations and lets users save edited files. Any file that is opened and not recognized as one of the supported types is passed to the text editor and opened as text, as it would happen with any text editor. Recognition of file type happens by reading the file header for the supported formats, not by checking file extension, nor using any other system-dependent heuristics:

Dialog window for file opening with embedded preview

Dialog window for file opening with embedded preview

The status bar on the bottom of the windows shows information on the open file, like size and number of colors if it's an image or sampling frequency if it's a an audio file. This information is also read from the file header (in the case of JPEG files with the Libjpeg library), where possible.

Embed

From the Actions menu you can select the Embed... item, that will show the window below:

Dialog window for the Embed operation

Dialog window for the Embed operation

You can put the names of files to operate on in this window. By selecting the appropriate checkboxes it is possible to set the relevant compression and Cryptography options and choose whether to include the name of the embed file and the checksum or not. In the same window you can input a passphrase that will be requested when trying to extract the payload from the stego file that is output; the passphrase can optionally be empty.

The checkbox labeled Overwrite output file specifies whether SteGUI should overwrite an existing file that has the same name as the chosen stego file. If this checkbox is not checked and a file exists that has the same name as the stego file, the user is instead shown a dialog window where he or she can choose whether to overwrite the file or choose a different output name.

The options thus set are interpreted by the graphical interface and passed to Steghide. Since the actual operations are performed by Steghide, there is obviously no difference between stego files produced from the command line or the GUI, thus it's possible to extract payloads from the command line from stego files built by this front-end, and viceversa, without problems.

Extract

In the Actions menu you can also find the Extract... item, that lets you set the parameters for data extraction:

Dialog window for the Extract operation

Dialog window for the Extract operation

This dialog window is more simple than the one shown previously because there are less parameters to pass to Steghide in this case. It's necessary to choose a file from which to extract hidden data and, as in the previous case, it's possible to choose a passphrase to use for the operation and whether to overwrite the output file (in this case containing the hidden data that is extracted) if one with the same name exists.

Information on files

From the Info menu it's possible to access the Get info... and Get open file info commands, used respectively to obtain information on any file and on the currently active open file that is visible in the main window:

Output window for the Info operation

Output window for the Info operation

Again, it's possible to select a passphrase to use to access the payload, that in this case won't be extracted but only analyzed to gather the required information. If no passphrase is selected, the front-end will still try to use an empty passphrase to access the data. From the same menu you can also run the encinfo command, which we mentioned in the previous pages, to view a list of cryptographic algorithms supported by the version of Steghide that is in use and of the modes of operation these algorithms can use.

From the About menu you can get information on the version of Steghide that is currently installed and read an excerpt of the license Steghide and SteGUI are licensed under (GNU/GPL). It should be noted also that the front-end provides two different graphic themes, and it's possible to use either one by selecting the corresponding item in the Actions menu. The screenshots shown in this page are based on the default FLTK theme which is also the default SteGUI theme, but here's an example image of a window using the Plastic theme for comparison:

An example of the Plastic theme

An example of the Plastic theme

© 2005-2008 Nicola Cocchiaro