Slashdot Mirror


Program Hides Secret Messages in Executables

DmuZ writes "My friend Rakan has created a new steganographic tool named Hydan which can embed messages into an executable without altering its size. He recently presented this tool to the public for the first time at codecon. This new technique was intriguing enough to get coverage on SecurityFocus.com. The code is available here."

10 of 243 comments (clear)

  1. For those who encounter compilation problems... by Anonymous Coward · · Score: 4, Informative

    Add -ldl to the LDFLAGS in the Makefile.

  2. First used in a86.com by Ninja+Programmer · · Score: 4, Informative

    This is a well known technique that was used in the mid-80s by Eric Isaacson in his product "a86". See here: http://eji.com/a86/

    Eric Isaacson used the technique to mark executables, so that he could determine if they were created with an unregistered copy of a86.

  3. Re:Redundancy? by brejc8 · · Score: 4, Informative

    Some instructions have dont care bits in them.
    You could remove these bits in order to compress the file but they occur so rarely its not worth it.
    And yes the redundency would have been used up.

  4. Re:Redundancy? by sql*kitten · · Score: 4, Informative

    Can someone explain to me exactly what this means? Will all i386 executable binaries have unnecessary redundancy? Could the size of the binary be harmlessly reduced by removing it? If so, then why isn't this done?

    It means that if you want to add 50 to a number, you can choose to do (+50) or (-(-50)). They both take up the same amount of space and do the same thing. But if you first process a program to ensure that all additions and subtractions are actually additions, then you can encode data into the list of additions by making some of them into subtractions.

  5. Re:stenography by JohnFluxx · · Score: 4, Informative

    er...

    Steganography requires that it is impossible to prove that data is being hidden there. (Without reference to other material, etc etc).

    From The Free On-line Dictionary of Computing (09 FEB 02):

    steganography

    Hiding a secret message within a larger one in such a way that others can not discern the presence or contents of the hidden message. For example, a message might be hidden within an image by changing the least significant bits to be the message bits.

  6. Re:Redundancy? by BenV666 · · Score: 5, Informative
    Can someone explain to me exactly what this means?
    It means exactly what it says, there is more than 1 road that leads to Rome.... combining instructions in different ways leads to the same results.
    Will all i386 executable binaries have unnecessary redundancy?
    Almost everything can be done in several ways. Consider these 2 pieces of asm:
    XOR DX,DX
    MOV AX,3
    MOV BX,4
    MUL BX
    verses
    MOV BX,4
    MOV AX,3
    XOR DX,DX
    MUL BX
    Same results, same size, different order :)
    Could the size of the binary be harmlessly reduced by removing it? If so, then why isn't this done?
    Often the binary can't get much smaller without having effect on efficiency of the code, as far as I trust compilers that is :) (ASM rules!!! :)) I.e.
    MOV AX,A000
    MOV ES,AX
    verses
    PUSH A000
    POP ES
    Same effect while the latter saves 1 byte in code.
  7. Re:Redundancy? by etcpasswd · · Score: 5, Informative
    From my understanding, it appears that he chooses a complentary pair of instructions: addition-subtraction. Then you designate "1" to addition instruction, and "0" to subtraction. So, if you look at only these instructions, your executable can contain a binary string (addition and subtraction instructions).

    Now what the author does is, alter the original binary string to that bit-string data of our interest (of the same length). This process requires flipping of instructions. For example, if some instruction is addition (1), but your data requires it to be (0) bit, you change the instruction to subtraction, and change the operand to a negative of the original value. Same applies to flipping a '0' to '1'.

    Addition-subtraction works because there are no overflow issues (atleast with signed ints). Since this is also a very common operation, your executable is likely to be large enough to "hold" sizeable data.

  8. Re:Virus by KDan · · Score: 5, Informative

    Never. The information, though contained in an executable file, is not itself executable (unless you went and took that information out and then executed it separately. The whole point is it does not affect the execution of the program that you hide the information into. So you can put whatever information you want in there (even the code for a virus) and it will still not be a virus, because that information will never get executed unless you actively go in there, extract it, paste it as an executable file somewhere else (eg in memory) and then execute it - so you'd need another virus to do this, basically.

    Daniel

    --
    Carpe Diem
  9. Hiding messages within messages by Bender+Unit+22 · · Score: 4, Informative

    Hiding messages within messages are used often in many contexts, like the radio broadcasts in WW2 sending "birthday greetings" among other things

  10. Re:You might have gotten hoaxed. by ZigMonty · · Score: 4, Informative
    This is technically impossible, for two reasons.

    Did you read the article?

    First, executables are called executables because the computer interprets them. They are made of instructions, and unlike a document you cannot simply tamper with things because it will confuse the computer when it tries to run the executable.

    Of course you can tamper with executables! As long as your modified version does the same thing, there is no harm done. If you change the addition of a positive number to the subtraction of a negative number, you get the same result if you run it. You run through the binary and if the current bit of data to be hidden is a 0, you don't modify that particular addition instruction and if the data bit is 1 then you *do* modify it. If you compare the modified binary to an original, you can see all the changes and extract the hidden data.

    Second, and most importantly, the size of the file is dependent on the size of the bytes within the file. Because the bytes in the file have differing values depending on the instructions they encode, altering the data will alter the size unless you're borrowing from one byte to inflate another -- and in this case, again, you run afoul of the first problem.

    This makes no sense to me. The replacement instruction is the same size as the original.

    I'm surprised the editors didn't review this before approving it for posting. This is really pretty elementary to anyone who understands object code.

    I don't doubt that you understand object code but you don't seem to understand this technique.