22 June 2013

Hello Planet!

Today I want to present the very first beta of my small steganography tool for KDE. I call it stegano.kde.

First of all an introduction

My name is Sven and I use KDE desktop since version 2 somewhere around 2002. I work as a freelancer to develop business applications mainly with web-technologies and languages like PHP, Python, Java and a while ago c#.
I started the steganographic tool somewhere around 2006, first written in c#. I published it [1] and got a lot of nice feedback. Also some people were asking for a linux version of it. After a while I decided to engage my c++ skills from the university, and thought about a GUI framework, because i only use KDE, the decision was very easy: I used gtk+ - only kidding - of course I use Qt with a tight KDE integration.

Currently the application is pre-beta for testing, not far enough for an official release. Also it is not fully compatible to the Windows version (only for encrypted messages). The code isn't very well structured, also no patterns and no tests are yet there. This is leading me now,  to a bigger refactoring of the source.
Now I think it is time for getting some feedback from the community, especially about the frontend. Therefore I want to present you the current frontend and some thoughts about the future that I already had drawed.

Short background

Steganography is a technique of hiding information in a media. For example, you can write a letter and each 5th letter connected to a sentence can have a secret meaning. Presenting that in current media this means, you can use media like images, audio and movie files to put secret data in it without changing the obvious presentation of the media. This tool only supports images (PNG) at the moment. Therefore a method called Last Significant Bit (LSB) is used to manipulate the image without changing the visible picture.

For a better understanding how this is possible: Each image has pixel as you know. Each pixel has 3 byte of color data and sometimes 1 byte for transparency. Let's focus on the color for now. Imagine you have red-green-blue bytes, you could take the last bit from each of those bytes and modify the last bit only. Then the last bit stores your information and the color doesn't change significant. In the end, nobody will see it. Only a histogram will give you the information that something is strange with the image.

How the tool looks

Please do not wonder. I have activated a KDE dark color schematic. This is the reason why it is dark, it is not explicit styled like this.

The top field is a file selector, where you can select images. PNG if you want, you restore a message and JPEG is supported to be a input media. On save this gets converted in PNG. So do not wonder.

On the next block, you can enter a password for encryption and enable or disable encryption.
The left bottom block shows a preview of the image. So you can see that you cannot see any change on the image. The right bottom block is the text message widget, where you can enter a text. There is also a tab for documents, because documents are also only data that can be included. But this feature is not supported until now.

Currently the GUI is not in English at the moment. But a lot of refactorings will include this cleanup as well. For now, I'm sorry about that.

Short feature summary

  • open media files
  • restore messages from PNG media
  • write own messages
  • save new media that includes your message
  • protect the message with a password

Planned features are

  • support for include files as like text to the media
  • improved GUI (progress, cancelable arrangement etc)
  • compatibility to the crypted files from the windows version [1]
  • internationalisation default to English and add some translations
  • other media sources like movies and music
  • other save media formats than PNG


You can find the sources on my scratch repository [5] or on github [6]

There is also a package deb file [2] that was tested on Kubuntu 12.10 and 13.04 (only amd64 architecture) that you can easily install and test it with launching stegano on the runner or konsole.

Some sample files

If you were able to run it, you can test the 2 images that was used on that post to get some impression. Or find them in reference [3] and [4].

Looking forward

My plans are to finish the mentioned refactorings. This will include some GUI changes as well. When I reach a state that is presentable my next post will show this GUI and then you can give me the feedback.

Please have a try and give me some feedback how do you like this first draft.

Build note: please use the tag v0.1.1 that is on github.


[5] git://anongit.kde.org/scratch/assmann/stegano.kde


  1. Hi!
    And what is the password for decrypt?

  2. Hi, I tried to build from source stegano, but I get this error message:

    Make Error in app/CMakeLists.txt:
    Cannot find source file:


    Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
    .hxx .in .txx

    -- Generating done

    1. thanks for your feedback, i forgot to mention that the tag v0.1.1 is the one that should be used for build. This tag is only on github. I will update the scratch repository asap.

    2. Thanks, now works. But I don't understand German.

    3. sorry about it, but the english ui will be changed soon - i promise.

    4. Thanks... arch package is on AUR...

  3. Hi !
    I downloaded the .zip from GitHub, and I have the same error:

    CMake Error in app/CMakeLists.txt:
    Cannot find source file:


    Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
    .hxx .in .txx

    -- Generating done

    I use openSUSE

    1. same as said above: use the tag v0.1.1 to build

  4. Hi Sven, I find this very interesting. But what isn't clear to me: the LSB method and w/o is this now specific to your program? Or can just any program with the knowledge of LSB and encription open the hidden messages?

    1. Hi Richard,

      basically every programm that has implemented that method can open this images if they are without encryption.

      With encryption this will become bit more complicated, because all the parameter used by encrpyted, algorithm, padding etc. needs to be known.

      But later version will introduce a message container, as some kind of a document; very simple and nothing secret. So other programms needs to support those document containers to be able to read the files.

      Hope that was helpful

  5. Hi again...
    Whe I do "make", I get one error:

    [ 0%] Built target stegano.kde_automoc
    [ 14%] Building CXX object src/CMakeFiles/stegano.kde.dir/main.o
    In file included from /home/victorhck/stegano.kde4-0.1.1/src/main.cpp:5:0:
    /home/victorhck/stegano.kde4-0.1.1/src/steganodialog.h:8:37: fatal error: ../build/src/ui_stegano.h: No existe el fichero o el directorio
    compilation terminated.
    make[2]: *** [src/CMakeFiles/stegano.kde.dir/main.o] Error 1
    make[1]: *** [src/CMakeFiles/stegano.kde.dir/all] Error 2
    make: *** [all] Error 2


    1. can you give me the version that you use for
      - cmake
      - qt
      - kde
      - distribution

    2. cmake version 2.8.6
      Kernel 3.1.10
      KDE 4.8.5
      openSUSE 12.1

      (I know, I must update!! hehehe )

    3. I was able to find the issue. This is now fixed on master.
      The next versoin v0.1.2 includes the fix as well.

      So you can checkout tag v0.1.2 and test it. Unfortunately the UI has rewritten in that version, so that it not more matches to this article screenshots. A new blog post will follow soon.

    4. ok...
      I will try the new version