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."

243 comments

  1. a usfeul virus! by Anonymous Coward · · Score: 0

    any export restriction son this one?

    i always thought that the original virus was written along these lines, a neat bit of code that the writer wanted on all his programmes

  2. stenography by JohnFluxx · · Score: 4, Insightful

    > El-Khalil concedes that the method is imperfect -- an application that's been impressed with a secret message has considerably more "negative subtractions" than an unadulterated program, making it easy to pick out through a statistical analysis.

    Note that as far as I remember, stenography by definition is supposed to make it imposible to prove that there is data hidden there - one step further than normal encryption. It's not so much as about hiding the data as being able to deny its existance.
    One reason for this is if you have encrypted data on your disk, then courts can demand the password for it. Stenography allows you to insist there is no hidden data.

    1. Re:stenography by gunne · · Score: 2, Informative

      Steganography would be more precisely defined as "information hiding". It doesn't require that it is impossible to find the data hidden, but it tries to conceal the existence of the data.
      Cryptography on the other hand does not try to try to hide the existence of information, it just tries to hide what message is embedded in that information.
      Cryptography != Steganography, but they can be used in conjunction.

    2. 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.

    3. Re:stenography by JohnFluxx · · Score: 1, Troll

      It's my polite way of saying "you dumb ass".

    4. Re:stenography by sql*kitten · · Score: 3, Insightful

      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

      OK, but geeks forget that possible/impossible isn't a binary state, like 1 and 0. It's a about likelihood. Is there a 1% chance that this file contains a hidden message? Or is it more like 90%?

      One the police have "reasonable grounds", they can step up to the next level. You can deny it 'til you're blue in the face, but if they get a professor to testify that it's highly probable that there is a message there, and they have evidence that you have corresponded with other suspects ("exactly why did you send Mohammed bin Mohammed a picture of your kitten a day before al-Queda hijacked that airliner?") and suddenly your steganographic sK1Lz aren't worth so much.

    5. Re:stenography by Anonymous Coward · · Score: 1, Interesting

      I laugh at your silly techniques! Look how easy it is to outsmart:

      $ cp /bin/ls .
      $ upx ls
      Ultimate Packer for eXecutables
      Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
      UPX 1.24 Markus F.X.J. Oberhumer & Laszlo Molnar Nov 7th 2002

      File size Ratio Format Name
      -------------------- ------ ----------- -----------
      69368 -> 32358 46.64% linux/386 ls

      Packed 1 file.
      $ ./hydan ./ls < msg > ls.stegged
      Password:
      Host file has no ELF section header
      Inconsistency detected by ld.so: dl-fini.c: 66: _dl_fini: Assertion `i == _rtld_local._dl_nloaded' failed!

      0wned!

    6. Re:stenography by Anonymous Coward · · Score: 0

      All you have to do is pack your executables, and then nobody can hide messages in them?

      Something tells me this tools lifespan is going to be pretty short ;)

    7. Re:stenography by Subcarrier · · Score: 1

      El-Khalil concedes that the method is imperfect -- an application that's been impressed with a secret message has considerably more "negative subtractions" than an unadulterated program, making it easy to pick out through a statistical analysis.

      It should be easy enough to get around this. The statistical telltale is only due to the fact that El-Khalil consistently uses the same type of instruction to encode a certain bit value. Have Hydan XOR the hidden message with a secret key that produces the right distribution of ones and zeros prior to encoding the message and the problem disappears.

      --
      "I have opinions of my own, strong opinions, but I don't always agree with them." -- George H. W. Bush
    8. Re:stenography by jaavaaguru · · Score: 2, Informative

      Stenography is the art of writing in Shorthand. :-)

    9. Re:stenography by p3d0 · · Score: 2, Insightful

      And I suppose you made the leap from "can not" to "impossible"?

      --
      Patrick Doyle
      I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
    10. Re:stenography by Bunji+X · · Score: 5, Insightful

      "exactly why did you send Mohammed bin Mohammed a picture of your kitten a day before al-Queda hijacked that airliner?"

      None of your freaking business. Mohammed bin Mohammed is an old friend of mine, he wanted to see a picture of my new kitten.

      Freedom of expression, freedom of speech. No?

      Maybe a professor's testamony of "high probability" is enough to get you in deep shit over there, fortunately we still have something that reminds of citizen rights, this side of the pond.

      --
      ---
      The combined human population is enough to feed every living tiger for app. 28000 years.
    11. Re:stenography by Anonymous Coward · · Score: 1, Interesting

      Unless you're a suspected terrorist. Then they throw due process out the window and you're burned at the stake. Like that prof. from florida. Is it just me or in the interest of a fair and just trial, shouldn't they simply report about the story without plastering the guys face all over national news saying he funds terrorism? All you've gotta say is 'A florida professor has been arrested due to suspected funding of x terrorist organization.' The only reason to put video/images of him on the air is to screw the guy over. Whenever something else happens you hear 'The police have x suspects in custody an aren't saying shit else'. They don't plaster the guy all over the news, because it slants the fucking trial. I'm all in favor of justice, but it should be done in a just way, otherwise we're no better than a modern age inquisition of sorts...

    12. Re:stenography by Alsee · · Score: 2, Funny

      exactly why did you send Mohammed bin Mohammed a picture of your kitten a day before al-Queda hijacked that airliner?

      Because he said something about wanting to get a little pussy before his trip...

      -

      --
      - - You can't take something off the Internet! That's like trying to take pee out of a swimming pool.
    13. Re:stenography by Hank+the+Lion · · Score: 3, Informative

      It should be easy enough to get around this. The statistical telltale is only due to the fact that El-Khalil consistently uses the same type of instruction to encode a certain bit value. Have Hydan XOR the hidden message with a secret key that produces the right distribution of ones and zeros prior to encoding the message and the problem disappears.

      I'm afraid this will not work.
      Problem is: 'normal' programs will do 'sub 50' instead of 'add -50'. If you don't want to be visible that a message is contained, you cannot change that. But if you don't change that (in about 50% of the cases), you can't hide the information! The only key that would work here would be as long as the message itself!

      The technique you propose will work to get a more even distribution of ones and zeros, but not the 'all zeros' (sub 50) distribution that is present in 'standard' programs.

    14. Re:stenography by Hubert_Shrump · · Score: 1

      Stenography is cool, but the outlay for one of those chording keyboards, and then the willingness to learn a whole new way of typing - is a little much. Though you do get to hear all the juicy details of a trial, you also have to worry about your job being taken by a computer with voice recognition.

      Now, Steganography, that's also cool, but in a very different and special way.

      --
      Keep your packets off my GNU/Girlfriend!
    15. Re:stenography by sql*kitten · · Score: 4, Interesting

      None of your freaking business. Mohammed bin Mohammed is an old friend of mine, he wanted to see a picture of my new kitten.

      You have a point. On November 12th, 2001, a 58-year old Australian woman resident in Helsinki, placed an obituary notice for Mohammed Atta in Finland's daily newspaper, Helsingin Sanomat. She was questioned by police. If I remember correctly, she had met him many years earlier, had no idea he was a hijacker, but had heard that he had recently died. But, when thousands of lives are at risk, suspicious events have to be followed up, even if it's only to eliminate them from enquiries.

      Maybe a professor's testamony of "high probability" is enough to get you in deep shit over there, fortunately we still have something that reminds of citizen rights, this side of the pond.

      Since you mention Freedom of Speech, a Constitutional right, I'll assume you're on the West side of "the pond". I suggest you look up Jose Padilla's story.

    16. Re:stenography by Anonymous Coward · · Score: 0

      call me a troll, but why isn't . the default path in 2003? Geez... :-)

    17. Re:stenography by amRadioHed · · Score: 3, Informative

      All stenographic methods that I've heard of leave some signs of tampering. For instance, the common method of hiding information in an image file by fiddling with the least signifigant bits in the RPG values is completely undetectable to the eye, however a statistical analysis of those low bits will reveal an unnatural amount of randomness. Really this is unavoidable since most any innocent looking data is going to have some natural order to it.

      --
      We hope your rules and wisdom choke you / Now we are one in everlasting peace
    18. Re:stenography by Poro · · Score: 1
      fortunately we still have something that reminds of citizen rights, this side of the pond.

      Yeah, but think about the unfortunate ones living on the other side of the pond, in America...

      I am serious.

      Really!

    19. Re:stenography by blair1q · · Score: 1

      Which is fine. But the bits still change, and the change is still detectable by comparison with the original.

      BTW, I was writing patch-code for microprocessor validation systems by using the blank words between functions in, oh, 1990 or so. Prior l33t is mine.

      I expect it's a fairly common virus-writing technique.

      Now, if these guys came up with a steganographic method that wouldn't fool a byte-comparison tool, but would fool a CRC32, an XOR, and a simple additive checksum, then they'd have something interesting.

    20. Re:stenography by pestihl · · Score: 2, Insightful


      thats funny considering all those people being held without a lawyer and without a court date and without representation from their country in guantonamo bay... I don't think in light of any "Homeland Security act" you will be allowed to have "free" speech.. in fact it seems quite the other way.

      more like.. You know who Mohammed bin Mohammed is.. you goto jail do not pass go do not have any rights do not even get to try to explain yourself infront of a judge.

      --
      "What do you do with the mad that you feel when you feel so mad you could bite?" - Mister Rogers
    21. Re:stenography by peter · · Score: 1

      > why isn't . the default path in 2003?

      So you don't shoot yourself in the foot by mistake. It's a paranoia thing, but there could be a trojaned version of something in the directory you're in, and you could run it without even realizing it. This could happen after you unpack a tarball or something, or on a multi-user system root has to be careful not to have . in the path when cded to a user-owned directory. The user could have put an executable there.

      Besides that, being explicit is never a bad thing when you're showing an example.

      --
      #define X(x,y) x##y
      Peter Cordes ; e-mail: X(peter@cordes , .ca)
    22. Re:stenography by Snoopy77 · · Score: 1, Flamebait

      Do you American's think you are the only country that has freedom of speech. You hold up your Bill of Rights as if it is the only document world wide that gives people freedom. It's time some of you stopped being so insular and took a look at how the rest of the world works.

      --
      "She's a West Texas girl, just like me" - G.W Bush Iraqis
    23. Re:stenography by allism · · Score: 1

      Which 'they' are you referring to? Are you referring to the government, or are you referring to the media? Although I think it is probable that the government supplies the media with, for example, the name and pictures of a suspected terrorist, the media certainly (a) is under no obligation to publish them, and (b) would not publish them if we, the viewing public, were not obsessive viewers of sordid subjects.

    24. Re:stenography by JohnFluxx · · Score: 1

      er yes.
      It is impossible to PROOVE 100%.
      What else do you think "can not" means?

    25. Re:stenography by WzDD · · Score: 5, Funny

      RPG values?

      "Bring me my +5 Sword of Information Hiding!"

    26. Re:stenography by nanoakron · · Score: 0, Offtopic

      My big fat hairy american ass.

      -Nano.

    27. Re:stenography by Anonymous Coward · · Score: 1, Informative

      OK, but geeks forget that possible/impossible isn't a binary state, like 1 and 0. It's a about likelihood. Is there a 1% chance that this file contains a hidden message? Or is it more like 90%?

      "Abstraction is selective ignorance." -- Andrew Koenig. It is sometimes neccessary to forget some things in order to adequately analyze a situation. However, this misses the point...


      Steganography is like a one-time-pad. If I transmit a message encrypted with a one-time-pad, and an attacker intercepts the message, then it is impossible for the attacker to determine the actual contents of the message. In steganography, when the message is intercepted it is impossible for the attacker to even tell whether or not he has the message. This is the ideal. In practice, one-time-pads can be broken, and steganographic messages can be detected. Which brings us to the point of the original poster. If I can run a simple statistical analysis on the transmissions, and find the programs with hidden messages in them, then this method effectively becomes the steganographic equivalent of a Caesar cipher. In other words, it's worthless. In the kitten example you are concerned not only with hiding the message, but, most importantly, with hiding the communication channel. You would most certainly not just send the picture to M. bin M. There are a number of rather obvious ways to correct this.


      As an example of a practical steganographic system there are communications systems which continuously stream garbage across the channel. When you want to use the channel the garbage is modified so that your message is encoded, and likewise for the response. Any attacker in the middle has no way of knowing what is garbage and what is not. Again, in practice there are attacks on this type of system, but they rely on extra information besides just access to the communication channel. Note that this is an, admittedly rough, approximation of posting random images with lsb modifications on the internet

    28. Re:stenography by Snoopy77 · · Score: 1

      Where the hell did privacy come into this Mr. AC? We were talking about freedom, and more specifically, freedom of speech. Freedom of speech is not always spelt out word for word in other countries but test it in a court of law and it is just as strong as it is in the US. Freedom of speech. at least where I live, does not have to be protected, it is implied in the constitution. No government can take that right away from me. As for US privacy and freedom being protected have you read the Patriot Act lately?

      --
      "She's a West Texas girl, just like me" - G.W Bush Iraqis
    29. Re:stenography by andrewski · · Score: 1

      Hahahahahahahahahahaha! I hope you don't mean America!

    30. Re:stenography by Anonymous Coward · · Score: 0

      Have you looked at what ridiculous lengths the Americans go in their reverence of the sacred First Amendment?

    31. Re:stenography by Bunji+X · · Score: 1

      Since you mention Freedom of Speech, a Constitutional right, I'll assume you're on the West side of "the pond".

      No, I am european. :)

      I think freedom of speech fares better in EU than in US right now, constitutional rights or not.

      --
      ---
      The combined human population is enough to feed every living tiger for app. 28000 years.
    32. Re:stenography by Bunji+X · · Score: 1

      That is why I am glad living on the right side of the pond.

      (Hint, not the west side.)

      (Hint 2. pond = Atlantic ocean)

      --
      ---
      The combined human population is enough to feed every living tiger for app. 28000 years.
    33. Re:stenography by Bunji+X · · Score: 1

      No, I don't.

      As far as I can tell americans allow their rights to be stripped away step by step, for a small sense of security.

      --
      ---
      The combined human population is enough to feed every living tiger for app. 28000 years.
    34. Re:stenography by sql*kitten · · Score: 1

      No, I am european. :)

      Actually, me too :-)

      I think freedom of speech fares better in EU than in US right now, constitutional rights or not.

      Have a read of the EU's charter of fundamental rights. Article 11, paragraph 2 notes that the freedom of expression must be subject to the interest of national security and territorial integrity, or "morals". The US Constitution contains no such provisos.

    35. Re:stenography by p3d0 · · Score: 1

      I think "can not" means that someone is unable to do something. Not that it is impossible in principle. For instance, I can not play the trombone.

      --
      Patrick Doyle
      I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
    36. Re:stenography by hymie3 · · Score: 1
      Do you American's think you are the only country that has freedom of speech. You hold up your Bill of Rights as if it is the only document world wide that gives people freedom. It's time some of you stopped being so insular and took a look at how the rest of the world works.


      We don't have to care; we're Americans.
      </sarcasm>

    37. Re:stenography by ncarey · · Score: 1
      One the police have "reasonable grounds", they can step up to the next level....[and]they have evidence that you have corresponded with other suspects ("exactly why did you send Mohammed bin Mohammed a picture of your kitten a day before al-Queda hijacked that airliner?") and suddenly your steganographic sK1Lz aren't worth so much.
      Yes, but that's traffic analysis: the mere fact of communication provides intelligence. The wise steganographer merely posts his steganographic images to USENET or somewhere similar. You partner-in-crime just needs to know that he should be sucking down all the posts of Racquel Darrien from abpe.pornstars and check them for messages. If you can't demonstrate direct communication, it's hard to get probable cause for looking any further. I've heard that a sizeable chunk of the images posted on USENET appear to contain stego information.
      --
      N. --
    38. Re:stenography by Anonymous Coward · · Score: 0
      Stenography is the art of writing in Shorthand
      yeah, like what some blind chick does in courtroom dramas.
    39. Re:stenography by Anonymous Coward · · Score: 0

      ROTFLMAO! I guess this can't be modded any higher, but DAMN, I found that to be terribly funny!

  3. Redundancy? by Phroggy · · Score: 4, Interesting

    It exploits redundancy in the i386 instruction set by defining sets of functionally equivalent instructions.

    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?

    If a message is embedded in a binary with this method, can another message be embedded in the resulting binary the same way, or has the required redundancy already been eliminated?

    --
    $x='S24;r)>63/* h@<5+oZ)32"5cz';$me='phroggy'x$];
    $x=~y+ -xz+\0-Tx+;print$_^chop$me for split'',$x;
    1. 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.

    2. 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.

    3. Re:Redundancy? by pldms · · Score: 1
      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?

      AIUI this system replaces one instruction with a functionally equivalent intruction. The binary doesn't contain redundant instructions (which, as you say, could be removed), rather the i386 instruction set contains redundancies.

      --
      Slashdot looked deep within my soul and assigned
      me a number based on the order in which I joined
    4. Re:Redundancy? by Ninja+Programmer · · Score: 1
      • Can someone explain to me exactly what this means? Will all i386 executable binaries have unnecessary redundancy?


      The x86 instruction set has some very convoluted encodings mostly due to the various addressing modes and sometimes assumed registers. Many of the common instructions have more than one way to be encoded. You can get more information at http://www.sandpile.org/

      I believe, in fact, that *most* x86 executable streams will expose a lot of this redundancy, and therefore there should be lots of potential for this. Of course it'll drive anti-virus checkers nuts ...
    5. 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.
    6. Re:Redundancy? by Ninja+Programmer · · Score: 2, Informative
      • It means that if you want to add 50 to a number, you can choose to do (+50) or (-(-50)).
      Actually on the x86, those two are not equivalent. They set the carry flag in opposite directions.
    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:Redundancy? by Ninja+Programmer · · Score: 3, Insightful

      In your examples, if there is are jump target in there somewhere they won't work. Remember that these are binary recompiler tools -- the source is not necessarily available, and it might not be decompilable to find all jump targets.

      The second example has the additional problem of having a different side-effect on AX and possibly stack faulting.

    9. Re:Redundancy? by erc · · Score: 2, Informative

      PUSH/POP is significantly slower than two MOV instructions on an x86, though...

      --
      -- Ed Carp, N7EKG erc@pobox.com PGP KeyID: 0x0BD32C9B What I'm up to: http://intuitives.mine.nu
    10. Re:Redundancy? by Anonymous Coward · · Score: 0

      Er, you can't just remove the bits to compress it, the instructions wouldn't be aligned on byte boundries and the whole thing wouldn't work

    11. Re:Redundancy? by brejc8 · · Score: 1

      I am talking in the compressor sence. If you removed them and then put them back after expanding.

    12. Re:Redundancy? by SomeGuyFromCA · · Score: 2, Informative
      It exploits redundancy in the i386 instruction set by defining sets of functionally equivalent instructions.

      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?


      You're confusing redundancy in the program (extra instructions executed) with redundancy in the instruction set (extra instructions available).

      The i386 set has add and subtract instructions where only one is strictly needed. From what I've read, this tool works by changing a sub 50 to an add -50, taking advantage of this. (Or a add 30 to sub -30.)

      The problem is, no person or complier would write code this way unless they had a particular reason to. Such as hiding something.
      --
      if the answer isn't violence, neither is your silence / freedom of expression doesn't make it alright
    13. Re:Redundancy? by Anonymous Coward · · Score: 0

      There is quite a bit of 'empty' space in every executable these days. The compiler spits out chunks of code for every function in the program.
      The linker puts all of these together to one program and fills in all those addresses where jumps or calls are made.

      Some 32bit processors can only jump to an address divisable by four (some can do it but take a big performance hit) so the linker will arrange the code blocks accordingly. On some systems it is better to arrange the code on even larger boundaries (eg. 16/32byte) due to the way the cache/memory interface works.

      This means that you will find a lot of unused space between the end of one function and the beginning of the next, usually filled with NOPs.

      It would be trivial to put some data in there.

    14. Re:Redundancy? by Tablizer · · Score: 1

      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.

      Same space? How? Or is this just an illistratrive example?

    15. Re:Redundancy? by mgv · · Score: 1

      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.

      Same space? How? Or is this just an illistratrive example?


      Written this way, the negative subtraction takes up more space. But represented intenally in machine code, its the same:

      x+ +50
      x- -50

      Because in most computers you would do a signed addition, the number (50) has to be expressed as +50 internally, it takes the same space as its negative equivalent (-50)

      When we write things down in english, we tend to drop leading +signs, but you can't get away from the fact that encoding the sign of a number in binary takes up as much space whether the number is positive or negative.

      Michael

      --
      There is no cryptographic solution to the problem where the intended receiver and the attacker are the same entity.
  4. But detection should be easy... by rediguana · · Score: 4, Insightful

    if you are using a relatively common binary. Then you just have to compare the MD5 checksums against a known-good (known-bad in MSFT's case ;P ) to identify a binary that could possibly contain encrypted data. Would it then be too much harder to go back through and disassemble the two and pick out the differences and hence identify the bits?

    Novel idea though!

    1. Re:But detection should be easy... by brejc8 · · Score: 2, Interesting

      I think the point here is that you never release the original binary.
      And the code looks pretty much like its compiler generated.

    2. Re:But detection should be easy... by JohnFluxx · · Score: 3, Interesting

      True - this is why you should make sure there is no original - i.e. use it on home photos.

      This is also why the data should be encrypted before hiding it in the message ;)

    3. Re:But detection should be easy... by wadiwood · · Score: 1

      so hiding your message in something like word or excel is a waste of time because a tool like this veracity will detect the change.

      I like scramdisk. A pity they've gone commercial but good they've done it in Europe.

      so anyone else have a favourite (free & opensource?) encryption tool

      --

      -- it must be true, it's on the internet.
    4. Re:But detection should be easy... by Ninja+Programmer · · Score: 3, Interesting

      You are correct -- detection should be easy so long as you have access to the original unmodified binary. I.e., an original software vendor could embed the message in a product of their own making and you would have no idea.

      Furthermore in opensource environments, it may be very difficult to determine if differences are due to different compiler flag settings, or just a different version of the compiler.

    5. Re:But detection should be easy... by Anonymous Coward · · Score: 0

      No, it doesn't. It fails vxm's compiler fingerprint checks, which can usually nail the version.

      Remember kids - this can't be used for release tagging or watermarking, because the nasty evil cracking groups just get two different copies, notice, and scramble it again.

      It's not like polymorphic engines are new, you know. Even commercial snake-oil "copy protection" systems like eLicense and SafeDisc have been using this for years.

    6. Re:But detection should be easy... by Llanfairpwllgwyngyll · · Score: 1

      Why bother detecting when you can simple use the same technology to destroy any information which may be present there?

      If this encoding technique became popular, then so would the necessary tools to scrabmble the covert channel.

    7. Re:But detection should be easy... by Anonymous Coward · · Score: 0

      or you can just sfv all of your files with something like quick sfv. however it isnt really all that easy detectable as you may think, microsoft has updates available allmost on a weekly basis, you have to check against all these file signatures to be sure its not a valid file

  5. Virus by bottlerocket · · Score: 1, Insightful

    So when can we expect our first virus using this code?

    --
    where the comment ends and sig begins
    1. 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
    2. Re:Virus by Anonymous Coward · · Score: 0

      I guess you could use this for the virus to store information that's invisible to all antivirus programs for later viruses to use. Perhaps even code hidden in files so the viruses that come afterwards find pieces of code to evolve themselves.

      Too bad viruses are illegal as such, you could make artificial internet life, that stores information on all hosts, ofcourse they'd have to have a way to move around the net aswell.

  6. How long... by ymgve · · Score: 4, Funny

    ...until somebody embeds "seineeW erA sreenignE epacsteN"?

    1. Re:How long... by Jugalator · · Score: 1

      For those who didn't get this joke, here's some info :-)

      http://www.ntsecurity.net/Articles/Index.cfm?Artic leID=8655

      Dammit, pick a beowulf joke so I get it! hehe

      --
      Beware: In C++, your friends can see your privates!
  7. For those who encounter compilation problems... by Anonymous Coward · · Score: 4, Informative

    Add -ldl to the LDFLAGS in the Makefile.

    1. Re:For those who encounter compilation problems... by swtaarrs · · Score: 1

      I did that, but I still can't compile. I get:

      /usr/lib/gcc-lib/i686-pc-cygwin/3.2/../../../../i6 86-pc-cygwin/bin/ld: cannot find -ldisasm
      collect2: ld returned 1 exit status
      make: *** [hydan] Error 1

      I'm using cygwin on Windows XP. Has anyone compiled with cygwin?

  8. 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.

    1. Re:First used in a86.com by Anonymous Coward · · Score: 0

      True, although it's more of a fixed watermark in this case than encoding of an arbitrary message. I don't think you'll find anything about this on the website, but I believe it it still mentioned in the zip file.

    2. Re:First used in a86.com by ponxx · · Score: 1

      Isn't a watermark steganography? After all you'r hiding a message in another message/picture/... The only difference is the intention.

  9. The meaning by Anonymous Coward · · Score: 3, Informative

    It just means that you can encode certain stuff in equivalent ways (*). Like: mov eax, 0 xor eax, eax sub eax, eax are all equivalent in functionality to zero the eax register.

    * = Taking into account flags and instruction size restrictions, etc.

    The "redundancy" comes from these facts. So, it's not size redundancy as such, and you can't remove the redundancy. It's more like permutations of the instructions are equivalent (length stays the same).

  10. new compression standard: rm -rf by more+fool+you · · Score: 4, Funny

    so how do i add my 6MB ogg to the 526K ls?

    1. Re:new compression standard: rm -rf by more+fool+you · · Score: 2, Funny

      sorry to reply to my own message, it's obviously possible using word.exe

  11. Re:You might have gotten hoaxed. by Ninja+Programmer · · Score: 2, Informative
    • This is technically impossible, for two reasons.


    Yeah, I know another unchecked perpetual motion machine story from timothy. But no, in this case, the story is not wrong, its just 15 years old (the technique was used 15 year ago, I mean.)

    The key point is to exploit x86 instruction set redundancy to find a few bits of entropy here and there strewn throughout the executable code. RISC instructions have the same potential. For example:

    add r0, r1, r2
    add r0, r2, r1 # not much different
  12. RTFA by Hanji · · Score: 1

    Read the f*cking article.
    No, you can't randomly tweak bytes in an executable and expect it to still work, but you can replace instructions with functionally equivalent ones, and develop a system to encode data that way (as described in the article).
    For example (again, straight from the article), an instruction to add 50 can be replaced with one to subtract -50, and you can (and the program does) encode data that way.

    --
    A Minesweeper clone that doesn't suck
  13. Re:Redundancy? (woops) by brejc8 · · Score: 1

    Nope Im wrong (Ive been doing too much ARM and MIPS)
    The thing worls as using add and subtract of signed numbers.

  14. Re:You might have gotten hoaxed. by flux · · Score: 0, Flamebait

    That is one terrific point.. Unless you just go ahead and RTFA, and figure out that it is not that impossible at all.

  15. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    Maybe you should just read the article?

  16. Re:You might have gotten hoaxed. by JohnFluxx · · Score: 1

    er..

    I can think of one nice and simple contridiction to your comment. If you replace "add x" with "sub -x". That wouldn't affect anything. (Assuming not self modifying code, the instruction length for add is the same length as sub, etc etc)

  17. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    I want to say R... but I will refrain. The technique is not impossible. The x86 instruction set, indeed any instruction set that contain more then say 4 instructions (indeed one even), is highly redaundant. for example

    addi ax 1
    subi ax -1

    are two instructions that encode the exact same function, these two instruction takes exactly the same amount of space.

  18. Re:You might have gotten hoaxed. by Michael+Dorfman · · Score: 5, Funny

    > Second, and most importantly, the size of the file is dependent on the size of the bytes
    > within the file.

    I don't know about you, but where I come from all bytes are pretty much 8 bits in size.

    >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.

    Altering the value of a byte changes its size?
    Man, I need to get me some of them new magic size-changing bytes! Down with the tyranny of 8-bit bytes!

  19. Re:You might have gotten hoaxed. by Thowllly · · Score: 1

    This is absolutely not impossible. The i86 instruction set has some redundancy (Different opcodes that end up doing the exact same thing.) So you can encode bits by toggling between two different opcodes whenever they're encountered. A86 (http://eji.com/a86/) already uses this technique, and has done so for a long time, to 'sign' the executables, so that it can be determined whether some codes has been compiled with the A86 compiler or not.

  20. Re:You might have gotten hoaxed. by ethnocidal · · Score: 3, Informative

    You are both correct and incorrect. While it's obviously not possible to simply go through changing instructions, operators and operands without consideration as to the effect on the program, it is possible to leverage functionally identical instructions to represent a bit.

    If you read the article, a trivial example would be subtracting -5, rather than adding +5. The presence of a subtraction operation, rather than an addition operation can signify a binary digit.

    Unfortunately, due to the consistent output from compilers, this is not steganography - you can both tell that the executable has been altered, and read the message! His plans for the future (parameter organisation, etc.) may be more relevant, but at the moment this is a proof of concept implementation, not a usable system.

    Anyone interested in other forms of steganography could do worse than to read Andrew Tanenbaum's page on the subject.

  21. Re:You might have gotten hoaxed. by Openadvocate · · Score: 2, Funny

    the size of the file is dependent on the size of the bytes within the file
    :D ..... mkaaay.


    so a byte containing the value 233 will create a larger file than one containing the value 3? interesting. Maybe you should stick to prgramming in c#.

    --
    my sig
  22. Re:You might have gotten hoaxed. by Brian+Blessed · · Score: 1

    You have to be briefly open minded before you just dismiss things as technically impossible (and then do it).

    In this case, I haven't read the article, so I'm wildly speculating, but if you consistently go through the executable replacing groups of instructions with functionally equivalent groups that are the same length then you effectively have an encoded stream of 1's and 0's (or other numbers for more equivalent types).
    This wouldn't work for self-modifying code, and each instruction has to be the right length also, but you can see how not blindly dismissing it is interesting.

    - Brian.

  23. 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

  24. Re:You might have gotten hoaxed. by peope · · Score: 3, Informative

    This is no hoax

    I has the same properties as:
    a*b gives the same result as b*a.

    You have options on what instructions to use which yields the same results.

    Lets say a*b is a 1 and b*a is a 0. You could describe a byte with eight occurancies of the (a*b || b*a) operation.

    a*b b*a b*a a*b a*b a*b b*a a*b == 10011101

    A common practice with x86 is to use XOR AX, AX instead of MOV AX, 0 to clear the AX register.

    However, this is not interchangeable since they do not have the same size. The XOR method is often used because it is faster and have less size IIRC.

  25. 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.

  26. Difficult part, code, data, format by peope · · Score: 2, Interesting

    The most interesting and difficult part I get from this is how can you be sure that the modifications are not done in DATA or in executable format headers (ELF eg).

    I would recon you would need to be able to disassemble the whole thing before being able to make modifications. Otherwise you could touch static data (vars initialized in the code) or the executable format (some of the metadata about the executable, the ARCH field in and ELF binary eg).

    1. Re:Difficult part, code, data, format by Oswald · · Score: 4, Interesting
      I would recon you would need to be able to disassemble the whole thing before being able to make modifications.

      Yes, it does that.

    2. Re:Difficult part, code, data, format by Anonymous Coward · · Score: 0

      Uhh, the headers are trivial to read and skip, but that has nothing to do with disassembling.

      There are, however, other reasons why (on the i386) you do need to disassemble the code. The length of i386 instructions varies, so you have to disassemble to make sure you aren't misinterpreting them, and you also want to trace the control flow to make sure you're only modifying guaranteed-reachable code because there may be constant data in the text section.

  27. Re:You might have gotten hoaxed. by etcpasswd · · Score: 1

    True. But the proposed method is much more simpler and elegant than this - encoding and decoding is very straight forward. In the method you cite, it sounds really complicated to encode some valuable data.

  28. Re:You might have gotten hoaxed. by hoggy · · Score: 1

    This is technically impossible, for two reasons.

    You, sir, are a moron.

  29. Speaking of which, Ogg Vorbis for Nero by Anonymous Coward · · Score: 1, Informative

    The first vorbis plugin for Nero is out.

    One less thing for the mp3-lUsers to complain abou

  30. compiling this program for windowsXP by Anonymous Coward · · Score: 0

    Let's assume (correctly) that I know no more than an idiot about compiling such a program. Could someone point me to a newbie "step-by-step" for compiling on Windows?

    Thanks for your l33t sk1LL5,
    A.C.

    1. Re:compiling this program for windowsXP by Anonymous Coward · · Score: 0

      1) Buy Visual Studio.NET
      2) Rewrite the program in C#
      3) Compile the new program

    2. Re:compiling this program for windowsXP by Anonymous Coward · · Score: 0

      ok moron, I asked for a NEWBIE way to do it. I don't think "Rewrite the program in C#" qualifies. try again

    3. Re:compiling this program for windowsXP by Anonymous Coward · · Score: 0
      1. Download Cygwin.
      2. Install Cygwin Base Packages and Devel Packages
      3. Write a Program in C
      4. Type "gcc " in Cygwin Window
      5. Type "./a" to Run Program
      Easy as pie. Of course, if you want fancy graphics or something, you'll have to do more than that, seeing as how writing graphical programs under Windows is a total kludge. The whole graphical subsystem is integrated into the kernel! Those type programs are inherently unstable, and really unusable.
    4. Re:compiling this program for windowsXP by Anonymous Coward · · Score: 0

      or why not just
      1) Buy Visual Sutdio.NET
      2) Compile the existing program

      or use gcc as someone else pointed out

  31. Re:You might have gotten hoaxed. by Ninja+Programmer · · Score: 4, Insightful

    I spoke too soon! Actually now that I've read the article myself and dug deeper in the story I realize there is a bigger issue here. The technique used in "Hydan" actually is broken! The ADD and SUB instruction will set the carry flag in opposite directions meaning simple code sequences like:

    A -= 3;
    if (A 0) ...

    Which might be encoded as:

    SUB EAX, 3
    JC ...

    will cease to function correctly!! The technique I cite (which has been proven and used in the a86 assembler) *DOES* work, since you don't change any of the instruction semantics, but just the instruction encodings.

    So in fact, this *IS* yet another bogus story posted by timothy ...

  32. Re:You might have gotten hoaxed. by grahamlee · · Score: 4, Insightful
    I don't know about you, but where I come from all bytes are pretty much 8 bits in size.

    You work with pretty old computers like the IA32 then, and ancient character sets to boot :-P
    Where I come from (which is C), the byte is defined as the smallest addressable unit of store (memory, IOW) that can hold one character from the execution character set (i.e. the number of bits in a char). If I'm using ASCII, then the character set is seven bits wide and the smallest addressable unit of store on an i686 is 8 bits, so the byte would be 8 bits. If I'm using EBCDIC on a computer that can address eight-bit-wide units of store, then the byte is still 8 bits.

    But now consider a computer that can address eight-bit-wide areas of store, but my OS uses 16-bit Unicode. The byte is now 16 bits, as that's the smallest chunk of memory that can hold a single char. Or a computer that deals in 32-bit-wide chunks only, but I'm (for some Godforsaken reason) using Baudot coding as my execution character set. Now my character set only takes up five bits, but as the minimum addressable unit of store is 32 bits wide, the byte has to be 32 bits.

    Man, I need to get me some of them new magic size-changing bytes! Down with the tyranny of 8-bit bytes!

    A common misconception is to think that the byte and the octet are interchangable concepts. They aren't. The octet is eight bits, the byte is defined as above (see the ISO C99 standard, for example). It's probable that every system you've used has an 8-bit byte; but don't start thinking that's a universal concept.

  33. Only for use by terrorists by nurb432 · · Score: 2, Interesting

    Just kidding, but you KNOW that's how it will be viewed by the 'outside'..

    I bet the get shut down, under the patriot act, before you can say 'what's that knock at the door'..

    --
    ---- Booth was a patriot ----
  34. Re:You might have gotten hoaxed. by Ninja+Programmer · · Score: 1

    You can use SUB AX, AX in place of XOR AX, AX with no issue (both will set the flags equivalently.)

  35. Re:You might have gotten hoaxed. by chrisseaton · · Score: 2, Informative

    You're confusing "byte" and "char". "char" is related to character sets, "byte" has nothing to do with them. Just because you're using 16 bit unicode does not change the size of the byte, it simply means that your "char" is two "bytes" (if your bytes are 8 bits). Why would a unicode system half the resolution of memory just because of the character set used? You could have a byte of 8 bits, a character of two bytes, or a byte of 128 bits and a character of 256 bits. No connection between the two.

  36. ~0 byte files whopido! by Anonymous Coward · · Score: 0

    Yey, the day had to come. Make an executable with only the needed header,
    and add the rest in those 0 byte comments?
    If this ain't flamebait, nothing is!

    1. Re:~0 byte files whopido! by Anonymous Coward · · Score: 0

      AFAIK the correct term is "whoop de doo".

    2. Re:~0 byte files whopido! by Anonymous Coward · · Score: 0

      It's "whoop tee doo," but saying "whopido" is pretty funny :)

  37. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    Your a dumbass, a byte is always 8 bits.

    Your thinking of char.

  38. Re:You might have gotten hoaxed. by Omnifarious · · Score: 2, Insightful

    There are cases in which the way the carry flag is set doesn't actually matter. In fact, I suspect that in most cases it doesn't actually matter. But, you're right, unless Hydan carefully analyzes the code to make sure it doesn't matter, it's broken.

  39. Yes, it can be done... by CoderByBirth · · Score: 4, Funny

    ...but why?
    Why would I want to hide messages in my executable files?
    Because I'm a secret little squirrel who just in general likes to hide stuff, like INSIDE other stuff?

    1. Re:Yes, it can be done... by McCart42 · · Score: 1

      Human rights groups in countries with authoritarian governments are often persecuted, their computers confiscated to get the names of their informants. Generally encryption (PGP/GPG) is sufficient in these cases to protect their data - unless the government is evil enough to torture them to reveal their private key/passphrase. In cases such as this, steganography allows plausible deniability.

      For more information on the uses of encryption in human rights organizations, read these letters to Philip Zimmermann (the creator of PGP).

      --
      "I may be quite wrong." - Socrates
    2. Re:Yes, it can be done... by peter · · Score: 2, Informative

      Hydan doesn't give you any deniability, does it? I just read the artice; I haven't tried the program, but if you use a well-known method of embedding info, it's not very steganographic anymore. The bad guys can just run hydan on your executables and see what comes out.

      If you want deniability even in the face of torture, you want rubber hose crypto. You might also want to use an authentication method more complicated than a password, so they'll have to torture you in the computer room instead of the dungeon, and they can't break your fingers or damage your higher brain functions.

      --
      #define X(x,y) x##y
      Peter Cordes ; e-mail: X(peter@cordes , .ca)
  40. Re:You might have gotten hoaxed. by KieranElby · · Score: 1

    Obviously the programming language character set does not affect the smallest unit adressable in machine code, as you say, but I think the previous poster was talking about ANSI-C, where a char is defined to always be 1 byte, but not necessarily an octet.

  41. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    From Jargon File (4.3.0, 30 APR 2001) [jargon]:

    byte /bi:t/ n. [techspeak] A unit of memory or data equal to the
    amount used to represent one character; on modern architectures this is
    usually 8 bits, but may be 9 on 36-bit machines. Some older
    architectures used `byte' for quantities of 6 or 7 bits, and the PDP-10
    supported `bytes' that were actually bitfields of 1 to 36 bits! These
    usages are now obsolete, and even 9-bit bytes have become rare in the
    general trend toward power-of-2 word sizes.

    Historical note: The term was coined by Werner Buchholz in 1956 during
    the early design phase for the IBM Stretch computer; originally it was
    described as 1 to 6 bits (typical I/O equipment of the period used 6-bit
    chunks of information). The move to an 8-bit byte happened in late 1956,
    and this size was later adopted and promulgated as a standard by the
    System/360. The word was coined by mutating the word `bite' so it would
    not be accidentally misspelled as {bit}. See also {nybble}.

  42. Use this program... by megazoid81 · · Score: 0, Redundant
    ... and the terrorists have won!

    How can one release such software without also releasing an antidote secretly to the Total Information Awareness program?

    1. Re:Use this program... by peter · · Score: 1

      A steg tool is its own antidote. Just run it on executable to see what comes out. If what comes out is encrypted, ship them off the Guantanamo bay and throw away the key.

      BTW, you might not think of your country as a police state, because it probably isn't _for you_. For some people, it IS, now.

      --
      #define X(x,y) x##y
      Peter Cordes ; e-mail: X(peter@cordes , .ca)
    2. Re:Use this program... by Tablizer · · Score: 1

      Use this tool and the terrorists have won!

      Actually, they only won 2 times and I won 23. Hmmm, I wonder if I should turn them in to FBI instead of playing online games with them. But I hate to lose good partners.

  43. Question: by Oswald · · Score: 2
    I followed the readme file right up until the last item in Future Plans. Can someone explain this to me:
    - Replace length fields with two fields (length of length, and length) to avoid attacks on stream cipher.

    Attacks on stream cipher?

    1. Re:Question: by Anonymous Coward · · Score: 0

      A cipher is a cryptographic system in which units of plain text, letters, symbols, etc are arbitrarily transposed, or substituted according to a predetermined code. A stream cipher just takes in several chunks of information and processes them in order, sort of like a conveyor belt or whatever. I believe what he means, is that by making the length field variable length, and adding an indicator as to the amount of space that the length field takes (ie, 1 byte, 2, 4, etc) that he can prevent several dumbass attacks on his stream cipher.

      -- CheezCake The Mighty

    2. Re:Question: by Anonymous Coward · · Score: 0

      If these are included the stego data becomes self delimiting. This make it more difficult to run synchronisation attacks.
      In other words if you know how long your data is its harder for an attacker to place item in the data that youll assume are yours.
      Cant see how this relates to stream ciphers but ill look it up and get back to you

  44. Re:You might have gotten hoaxed. by TheLink · · Score: 2, Funny

    And that's only one reason too ;)

    --
  45. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    Yes, but the compiler fingerprinting of Vexmon - or possibly even IDA or Olly - will flag this as very interesting, indicating a hand-coded section of the file as compilers are always consistent in how they use this - XOR EAX, EAX is theoretically faster as that is the canonical CLR EAX instruction that the pipelines of the P4 are optimised for, so they typically use that. At least one compiler uses SUB EAX, EAX but you'll only very rarely see a mix, and it always makes me suspicious. Some hand-coders use SUB, and I've even seen weirdness like AND EAX,0, and the eternally Hi-I'm-a-beginner-assembly-coder MOV EAX,0 used on occasion. I saw a multiply by 0 once, and that raised a few eyebrows. All clearly indicate hand-coded segments worthy of close attention - sprinklings of these throughout the code indicate the attentions of a polymorphic engine like this one.

  46. Re:You might have gotten hoaxed. by grahamlee · · Score: 1

    You're failing to read the C standard, in which a byte is defined as the smallest addressable unit of memory in which a single character from the execution character set may reside.

    Just because you're using 16 bit unicode does not change the size of the byte, it simply means that your "char" is two "bytes" (if your bytes are 8 bits). Why would a unicode system half the resolution of memory just because of the character set used?

    It wouldn't. However it would mean that the byte becomes sixteen bits long, even if the smallest physically addressable unit of store is eight bits long. You're confusing "byte" with "octet". BTW if I used a 16bit Unicode system as my execution character set, then the byte would be two octets long. The computer would still be able to address a snigle octet, I'm not arguing that this somehow magically changes. However the execution platform would have no need for the odd-numbered octet locations as they all lie halfway along units of storage. Think of it like this: I could have a seven-bit character set and an eight-bit byte, but be using a processor that can address four-bit locations (call 'em nybbles). The fact that my char variable is now longer than an addressable unit of store is immaterial; the byte is still an octet even though the computer can address quartets.

    You could have a byte of 8 bits, a character of two bytes, or a byte of 128 bits and a character of 256 bits.

    No you can't. See above, see the standard, learn, comprehend, become enlightened.

  47. Jump Targets by pommiekiwifruit · · Score: 1
    Yeah, even a simple piece of Z80 code (16 kilobytes) like the Pacman ROMs can take a few days for a human to decode properly getting out all the jump targets (which are cunningly held in various tables; executing the code with a tracer helps tell the difference between code and data but a lot of manual work is required), although compiler-generated code should be more tractable.

    If you have control of the linker though, you can on normal systems arrange the object files in n! ways which is enough to get going on (as I said online 15 years ago). That should be safe unless you have a linker bug or a really nasty address releated program bug (I hate those!).

    1. Re:Jump Targets by Tablizer · · Score: 1

      Yeah, even a simple piece of Z80 code (16 kilobytes) like the Pacman ROMs can take a few days for a human to decode properly getting out all the jump targets

      My assembler is very rusty, but isn't it possible to have "calculated" jump-to's in assembler? It may not be possible to find all the jump-to points using simple analysis. You would in theory have to consider all possible execution paths. Maybe most compilers don't get this funky, but it seems like a possibility to consider. I don't see how one could say 100% that they found all jump targets. Somebody could use a very indirect way to calculate jump-to addresses in their code.

    2. Re:Jump Targets by Anonymous Coward · · Score: 0

      Yes, in principle the problem is undecidable. For example, it would be relatively straightforward to construct an example where you have to first prove Goldbach's conjecture in order to determine which instructions are jump targets... However compilers only use few simple patterns, because there are no such complexities in high-level programming languages. Even in a language with a computed goto, the possible goto targets will end up in a data table in the binary, because you have to store the correspondence between the possible computed goto targets the programmer sees in source code, and the corresponding machine addresses in the binary.

    3. Re:Jump Targets by Tablizer · · Score: 1

      However compilers only use few simple patterns,...

      Okay, but the technique of this article then assumes certain compiler patterns in order to work. If somebody tweaked the machine code to have complex calculated goto's, then its substitutions might break original behavior. Correct?

    4. Re:Jump Targets by pommiekiwifruit · · Score: 1
      Pac-man uses RST $20 to mean jump to the Ath entry of the table following this instruction. So the words following it are a jump table, but happily they don't need to be altered (unlike 6502/65816 which needs a -1 if you are using RTS to perform a calculated jump).

      By working out what each routine does in the game (e.g. saying COMMAND_HEAD = $4c80 (RAM), TIME_WAVE0 = $4d86 (RAM), PlotString = $2C5E (ROM), DecideInkyNormal = $27A9 (ROM)) you should be able to determine all the jump targets.

      However, this is not practical for an automated process, and it is possible to obfuscate things much more than the Namco team did if you want to do that, as a friend of mine did when he was writing his code at University.

  48. Re:You might have gotten hoaxed. by chrisseaton · · Score: 2, Insightful

    Why is C the authority on what a byte it? Bytes were around a long time before C.

  49. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    Dude, get a life. He was making a joke...

  50. THIS should be on Slashdot by Anonymous Coward · · Score: 0

    Thank you very much kind sir.

  51. Re:You might have gotten hoaxed. by arkanes · · Score: 1

    Very nice, and stilly totally incorrect as related to the grandparents post, which states that changing the value of a byte changes it's size. In any case, you're confusing the definition of the word "byte" with the byte data type, and then confusing that with the char data type.

  52. Re:You might have gotten hoaxed. by grahamlee · · Score: 1

    Indeed they were, and as an AC points out elsewhere on this thread with reference to the Jargon File; the byte was originally defined as the size of a useful chunk of information on an IBM machine. Back then the byte was smaller than an octet, and its size varied depending upon the size of the information chunk in use. Note further that the jargon file also defines the byte in the same way as the C standard; I just happen to have more respect for ISO than I do for ESR (though Nethack is a fine game), and thought the C99 document to carry more weight than a hacker's dictionary. Perhaps I was wrong on that last count.

    But the punchline is strengthened; the byte is defined in multiple sources as the size of a character variable. One use of this form of the word byte has been shown to predate the incorrect definition of a byte as strictly equal to an octet. Case rests.

  53. Re:You might have gotten hoaxed. by grahamlee · · Score: 1

    There is no "byte" data type in C. What does exist is a byte, defined as:

    3.4.1 addressable unit of data storage large enough to hold any member of the basic character set of the execution environment.

    This whole language thing gets a lot simpler when you refer to the dictionary :-)

  54. Messages can be found in games too by racerx509 · · Score: 3, Funny

    I'm not so sure about hiding messages in executables, but there were two interesting messages hidden in the n64 game The new tetris. The messages were hidden in 00B8FF90 of the US ROM. They were also in the PAL rom about 2k further. Anyway, here it goes:


    ****START MARTIST RANT**** I must say, this was a fun time coming down to San Francisco to do The New Tetris. Allthough there were a few problems. First of all being our producer.. D*N, my god.. is this guy useless or what?? I don't hate you D*N.. but you SUCK, and I mean SUCK as a producer. You should go back to testing video games, but I doubt you could even manage that properly. I feel sorry for you. During this project you just sat around and played video games.. starcraft and everquest. Don't even deny that.. when you WERE working, it was making stupid Excel (tm) spreadsheets to try and tell me how many bugs I had left to fix on a graph.. like WTF is that??? who cares.. I have the bug list in front of me, like I need to see it in freaking technicolor. So D*N, I must say this.. hold onto, and fake your job while you can, because once they find out how truely useless you are, you will be out of a job. I cannot think of any skillset you would fit into in this industry, so you better hold on tight. (This guy thought I could save a name in 8.4 BITS.. like umm.. .4 BITS?? WTF is .4 BITS?? its either ON or OFF, not in between... anyhow, Enough about you though. To Nintendo.. It has been nice working with you.. Alot of you are great or were great. Tom 'Snoop Dog' Hertzog - you were great.. one of the nicest people I have ever met at Nintendo. You and your crews bug testing was outstanding and I commend you for the excellent work. Erich Waas - You know we have been friends a long time, but I must say this. After you had accepted the ART form for The New Tetris, and later on your higher ups said it was not UNISEX enough, you slapped the blame on H2O, Chris Bretz in particular. You did not have the balls to accept blame for your mistake, and stuck our entire team under IMMENSE stress and FRENZY. This to save your A$$ from getting in trouble at Nintendo. I still like you Erich, which is more than I can say for the rest of the team that you screwed because of this. But I guess your standing at Nintendo is more important than the friendships you had here. You always knew we had telent and you recognized that. I know you wanted to work with us again one day maybe outside of Nintendo, I think you screwed up those chances though. While I am screaming.. I might as well say this: Niel Voss.. your music is freaking KICK A$$.. you are one really damn talented boy. BUT, you are one of the laziest music guys I think there is You could go far if you wanted to, but you just lack the GO for it. It is a shame. I wish you all the luck and would reccomend you to ANYBODY just because even though everything is last minute, and like pulling teeth, the end result is AMAZING. I am leaving H2O after this project to work at 3DO. I hope this will be a good move for me. I love H2O, As amazingly disorganized of a company it is. I LOVE the people, I have so many good friends there. It will be hard to move on. Of course they will stay my friends. They were more than just co-workers.. they were FRIENDS. They were the people I lived with, spent my days and nights with.. went to bars with, camped with, drank with (alot), did other bad things with (wont elaborate ). They are true great friends, and I love them all and will miss them dearly. Allthough Vancouver is only a 2 hour flight away, I hope I can visit often. My best friends would include. Ross, Max, Scott, Jake, Bretz, Roland, Johnny, Sarah.. these are the people I love the most. And I wish you success. My 4.5 years at H2O were basically, making games.. drinking alot, playing pool alot, going to bars and raves and dancing while really screwed up in the head. THAT HAS TO BE THE MOST FUN I HAVE EVER HAD, and probably ever will. The good old days. These guys are in Vancouver right now because I got stuck finishing this project in San Francisco (Which by all means I LOVE and am staying (hence 3DO)) Well boys and girls, I just thought I would immortalize some thoughts I have at the moment into a rom which will be burned forever. This game sucks. The music is great but the game itself is not how we wanted it unfortunately. I mean, it is a good game, but some things could be polished, as well as sped up. Could use another month to finish this thing off AFTER all the bugs are fixed. oh well, woh is me. I would love to give special loves and kisses to the following. My Girlfriend Amy Bond, My Family (Joy, Allyson, Jon Pridie, Brant Sangster), My really really best old friends Selim Arikan, Cory Haberly, Jason Vasilash, Alfred Huger, Oliver Friedrichs. Goodbye H2O, it was a blast, and I mean that with all my heart. (C) 1999 July 1 David Pridie If you are reading this, you can obviously see this disclaimer. All this material belongs to David Pridie. If you find it and want to post it in ANY media format, you must get my permission or feel my wrath . This text if it is ever read, is intended to be read by hackers whom have dumped the contents of this rom and viewed it. That is ALL it is for. And maybe some of them will remember me from the C64 and PC days, Martial Artist of PE/TDT/RAZOR 1911/INC/FLT/TRN/FBR, I was in them all.. and I made trainers and intros mostly. I thank that scene for teaching me how to program, because without it I don't think I would be where I am today. Well that does it 4.5 years and Two games later (Tetrisphere and New Tetris). Unfortunately I wont be working on Nomans Quest.. but oh well. HAPPY CANADA DAY. ******END MARTIAL ARTIST RANT ******

    *****START LUPIN RANT FOR 50 MOST HATED THINGS*****1] Idiot teens hanging out in front of 7'11s, KFC, McDonalds, Jack In The Box etc... Your life REALLY SUCKS if that's the high point of your day...2] A$$holes who spit on the sidewalk.3] Drivers who don't know how to use a turn signal. I can reach mine with my pinky while driving. It's not that hard.4] Teens with their pants around their a$$.5] People with personalized licence plates.6] BMX bikes.7] People panhandling me. Get a job losers! McDonalds is always hiring!8] Bums with dogs. I'm sure the dog loves eating cheese from old pizza boxes.9] The cheeseheads from asia who take a Honda Civic, slap some stickers on it, put a muffler on it that makes it sound like a riding lawnmower, a ridiculous sized fin on the back and think they have a formula 1 racer. 'Devastating Power!' my a$$!10] The same idiots who then drive their 'hot' civic like they are in the Indy 500 through busy traffic.11] The huge complex hairdos on african american women, 5 layers, 6000 curls, 4 sprouting areas, 200 dangling bits, 6000 beads, air conditioning and enough hairspray in it that it wouldn't move if Hurricane George hit it.12] People with Kleenex, plants, knitted blankets, stuffed animals, or lacey things in their cars rear window. I should be allowed to pull over and shoot them.13] People on the bus who talk so loud your forced to hear about their pointless lives.14] Crappy parkers who park their car REALLY close to the painted line so that you have half a foot to get out.15] Those old cars (ie, Cadillacs, Lincoln Town Cars, etc...)usually white for some strange reason... with the acient driver who always drives WAY under the speed limit.16] People who write a cheque for a $2 bag of nachos at Safeway.17] Corvettes, Comaros and Firebirds. Come on, the 80s are OVER!18] A$$hole tailgaters.19] Idiots who think they can pedal a bike as fast as a car, so they ride in the middle of a traffic lane. You should be allowed to run them over, it looks like natural selection to me.20] Teenagers on television news reports expressing their opinions on something. If your under 18 I don't give a sh1t about what you have to say...21] The singer Brandy, Celine Dion, all the divas....22] Twits who wear a huge parka outside when its sunny and a mild 5-10 C. The same thing goes with the whole scarf thing.23] Muni busses that smell like urine. Which is most of them.24] Corporate Broadcasting logos in the corner of the channel your watching.25] Web pages that pop open other pages and windows and then disable your 'back' button.26] People who walk around with a huge 'portable' stereos blaring, sharing their music with everyone around them. Usually crap rap.27] Junk mail.28] Peice of sh1t cars that spew out huge noxious clouds behind them.29] People that throw out huge items on the curb expecting the garbage people to remove it. Like old dirty matresses. They don't of course, and it sits on the curb for weeks.30] Budweiser beer and the people who drink it. I'd rather suck the piss out of a pig... Its time to poison the bud.31] Drivers who turn onto the road RIGHT in front of you causing you to slam on the brakes, even though there is no one for hundereds of feet behind you.32] People who drive 3/4 in one lane and 1/4 in another... what the hell is that????33] Religous people who push their drivel on you when your walking down the street. Or come knocking on your door.34] Dead web page links and 'Document not found' errors.35] Racisist people and the crap they spew out.36] Those stupid add banners from Geocities on the Internet when you hit someones home page going through them...37] All country music.38] Minivans.39] People who spray paint their names on rocks, signs, trees etc, in national parks. Like I care that Bill graduated in 86.40] Small yappy 'feeder' dogs. Like little Yorkies, poodles, etc...41] People in the fast lane who drive just 2 km/hr faster than the guy in the 'slow' lane, dawdling along.42] Film crews making bad movies most people doent want to see blocking the streets and being annoying.43] Big fat bugs that splat on my windshield.44] Those really tight spandex cycling pants on men, they are usually sooooo tight, you can tell if they are cirumcised.45] Those really tight spandex cycling pants on 90% of the women. Big fat a$$es and *wiiiiiiiiiiiiiiiiiide* camel toes.46] Those really annoying commericals from Rogers Cable that tell you all about the 'evils' of satalite tv and how lucky you are to be getting cable for a mere $65 a month.47] Commercials that are SO bad on tv, you have to wonder about the sh1t for brains who thought them up. Like the Old Navy commericals, or the old as hell commercial for Sarah Lee, that is STILL ON THE AIR, 'let them eat cake' and 'But Patrick, I'm to old for life insurance.' Shoot them ALL!48] Losers that listen to totally cheezy radio stations and then slap dozens of their stupid stickers all over thier car.49] Lilith Fair. I say when they are all hugging, listening to the music, sharing tampons, and bitching about how evil men are, toss in a few hundered grenades while recording it on camera. Sell the video as a 'To Hot for TV' tape late at night.50] Cheap a$$ manufacturers of DVDs who list as 'features' chapters, interactive menues, and the time. These arent features. Thats like calling your computers keyboard a 'feature'. Lame a$$ marketing people.51] DVD manufactureres that sell their DVDs for $40 and up, just because they know people will pay for it. DVDs have actually become MORE expensive than when they first came out.52] Nintendo and everything about them.53] Old people who clog up the sidewalk walking super slow when you want to get somewhere.54] Looking at demo-reels at work that are so incredibly bad, that I just want to call them up and tell them to go f*ck their demo reel and to never EVER send another one out to anybody. EVER.55] Spiders. All spiders. Everyone of them.56] How on the Nintendo 64 game machine, half the damn titles for it are called 'miscvidgame 64'. Why not come up with a real name? Why is everyone just slapping a 64 on all the games?**********END LUPIN RANT******** I got these rants from dextrose

    --
    13 year old white supremacists are shitty web designers.
    1. Re:Messages can be found in games too by Sheetrock · · Score: 2, Funny
      Wow... no wonder Nintendo went to a disc format. If two more employees decide to bitch they're not going to have any place to put the game.

      It's cool to see a scener in game development, though that's where I figured most of them settled. I'm not surprised with his discontent towards the development process; with the amount of ingenuity and dedication that goes into (went into?) intros/demos it's got to be a shock to hit a corporate environment and have somebody tell you "It's good enough as it is" when you're working on your project and ship it out the door.

      --

      Try not. Do or do not, there is no try.
      -- Dr. Spock, stardate 2822-3.




    2. Re:Messages can be found in games too by willpost · · Score: 2, Informative

      Unfortunately, David Pridie, aka. Martial Artist, the programmer that wrote the first message, "passed away very suddenly on the morning of Friday, January 12, 2001. He died in his home, listening to music and playing a computer game. An attack of bronchial asthma was established as the cause, something which he had complained of the past week or so before. "

      "At the time he got himself and H2O in quite a bit of hot water with Nintendo. He figured it was his small piece of immortality"
      He was right

      http://www.pridie.org

    3. Re:Messages can be found in games too by Anonymous Coward · · Score: 0

      Bronchial asthma can be a real bitch when you're already tripping on 'shrooms.

      Wah.

    4. Re:Messages can be found in games too by Anonymous Coward · · Score: 0

      He was a great guy. We used to hang out when he'd come visit the area. (One time, Nintendo paid the bill to fly the 3 of them down from Canada to SGI's hq here in Silicon Valley to get a demo done for Spaceworld for the premiere of the N64. It was cool getting food and such on Nintendo's dime.)

      He also was the only person I know to get mugged at the first E3 in Atlanta. I think a major reason for that was he drank too much at the party.

      Great guy, it's really sad that he passed away.

    5. Re:Messages can be found in games too by Anonymous Coward · · Score: 0

      You know, I read his little goodbye EQ thing....It reminded me of that dumbass who OD'd on IRC. He probably got some bad shit and they called it "bronchial asthma" in the obituary to be nice.

  55. Re:You might have gotten hoaxed. by abirdman · · Score: 1

    >>Second, and most importantly, the size of the file is dependent on the size of the bytes within the file.

    The concept of "the size of the bytes" is such a incredible misapprehension of so much it's not clear where to even start. Bytes can have many values, but they're all the same size. Period. No matter how much you understand object code.

    Or is this a troll?

    --
    Everything I've ever learned the hard way was based on a statistically invalid sample.
  56. Re:You might have gotten hoaxed. by Guilly · · Score: 1

    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'm surprised you didn't think one second that your grand knowledge of the scheme of things didn't include the knowledge required to understand this thing... you'd rather think everyone here is a fucktard and making up technically impossible stories?

    Oh and btw.. anyone who thinks they understand object code and states that bytes inflate and deflate should go take Elementary Computing Principles I.

  57. Re:You might have gotten hoaxed. by chrisseaton · · Score: 1

    I guess it's a bit like a word then. As the word is dependant on the processor architecture, the byte is dependant on the data being worked with.

  58. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    Cool. Where is a link to the C99 standard?

  59. The problem is if you have two copies by Midnight+Thunder · · Score: 2, Insightful

    This like any solution is not fool proof. The catch is if you have managed to get hold of both the orginal and the modified copy. A quick MD5 check will reveal that both are different and could lead someone to suspect that something has been done. Now which one is the modified version? You could do this using a statistical method, by finding out which occurrence appears more often on the net. So to achieve the trick correctly you need to make the modification to an executable that does not exist on the net.

    Another method to detecting an executable that contains hidden data is to work out whether the executable uses the most unusual method of implementing its assembly.

    Of course just like in the film 'A Beutiful Mind', you could just end up seeing encrypted data left right and center, whether or not it is really there.

    --
    Jumpstart the tartan drive.
    1. Re:The problem is if you have two copies by morcheeba · · Score: 1

      Another method to detecting an executable that contains hidden data is to work out whether the executable uses the most unusual method of implementing its assembly.

      You're very close with your second paragraph -- this is basically the correct answer, but I'll just clarify it a bit:

      Compilers usually mark the executable with their name. I know GCC does this; I'm pretty sure it's part of the ELF standard. Knowing this, you can tell what code would be generated by the compiler and/or linked-in libraries; any other code in these regions would indicate tampering. Two examples:

      1. Check all library functions, including startup/exit and DLL-load functions. If these functions are different, then you've found a steg. Of course, some of these functions (usually those not in pure assembly) will change with compiler versions, so there are multiple non-steg possibilites.

      2. Check the function start-up code. If, for example, a compiler adjusts the stack by subtracting a fixed value, then if you ever see it add the negative value here you found a steg. This is so simple, it's unlikely to change between compiler versions.

      You could also check the above two regions for self-consistancy. If the function-start code varies between functions, then maybe you've found the steg.

      The big exception here is when code from different compilers is linked together. This usually happens only when you've got a closed source library. Summary: "unusual" is easy to detect for a given compiler.

    2. Re:The problem is if you have two copies by Reziac · · Score: 1

      Way back when, there were file-infector viruses that took care to ensure that they didn't alter checksums, to avoid "file has changed" virus checks; couldn't advanced steno do the same thing?

      Or could it fake a match to "what if this .EXE has been run thru some popular recompiler" ??

      --
      ~REZ~ #43301. Who'd fake being me anyway?
    3. Re:The problem is if you have two copies by Reziac · · Score: 4, Funny

      "Of course just like in the film 'A Beutiful Mind', you could just end up seeing encrypted data left right and center, whether or not it is really there."

      On second thought, I have another idea: make a huge file that is nothing but stenographic data. Hide an executable in it. ;)

      Actually, for stuff like DeCSS, that may not be so farfetched. :/

      --
      ~REZ~ #43301. Who'd fake being me anyway?
    4. Re:The problem is if you have two copies by DigitalDaedalus · · Score: 1

      Getting a copy of the covermessage as well as the stegomessage generally means the scheme is smoked in any stego system.

      It's an extreme case of side information and there really isn't a whole lot you can do about it.

    5. Re:The problem is if you have two copies by peter · · Score: 2, Informative

      Not in this day and age, because everyone uses strong hashes. I suppose the error-detection code that they preserved was CRC-32, or an checksum (add up all the bytes). There is no known way to efficiently figure out how to change a file without changing its MD5 or SHA1 hash. Any cryptographically strong hash will make undetectable modification computationally infeasible.

      --
      #define X(x,y) x##y
      Peter Cordes ; e-mail: X(peter@cordes , .ca)
  60. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    a*b gives the same result as b*a.

    Does that mean:

    1*5 == 5*1 ?

  61. Personally... by Anonymous Coward · · Score: 0

    ... I do doubt that he understands object code

    1. Re:Personally... by Anonymous Coward · · Score: 0

      Me too. But don't fucking put the first word of your post in the subject, that's just annoying.

  62. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    Ok. But how do you tell what order they were in in the first place? Are you going to go through the whole file and align all of the multiplies to 0, then flip the proper ones to 1? If a compiler always does it one specific way, and you change it, it's going to be noticable. (Those are unrelated ideas.)

  63. other byte sizes did exist !!! by Anonymous Coward · · Score: 0

    Ripped off from
    http://www.cni.org/Hforums/cni-copyright/199 9-01/0 091.html ...

    16 bits 8 bits 2 Mini/Micro Intel,Moto,DEC,DG
    24 bits 6 bits 8 PDP?? DEC
    24 bits ?????? ? DSPs TI,Moto
    36 bits 6 bits 6 1100 Univac/Sperry/Unisys
    36 bits 6 bits 6 GCOS 8 GE/Honeywell/Bull
    36 bits 9 bits 4 1100/2200 Sperry/Unisys
    36 bits 9 bits 4 GCOS 8 Honeywell/Bull
    48 bits 6 bits 8 A/B series Burroughs/Unisys
    48 bits 8 bits 6 A/B series Burroughs/Unisys
    60 bits 6 bits 10 6000 CDC
    60 bits 7 bits 8 6000 CDC

  64. Re:RPN by Anonymous Coward · · Score: 0

    How stupid is this? I use a TI-89, and if I wanted to add 10 twos together, I'd just use my brain and say, "ten times two is twenty," then I'd use one of my cool assembly programs to do something Fourier related with the calc.

    Besides, it's common knowledge that to use an HP calculator, you have to program in either Forth or PostScript (stack based languages).

    (Q-B).(E+10).(D).

  65. Re:You might have gotten hoaxed. by MarvinMouse · · Score: 1

    Ummm... I am thinking you may have gotten your definitions a bit confused.

    On a intel processors

    Byte = 8 Bits.
    Word = 16 Bits.
    DoubleWord = 32 Bits.

    A ASCII char is stored in 1 byte of space
    A Unicode char is stored in 1 word of space
    and a lot of assembler commands are stored in 1 doubleword of space.

    Having coded a lot of assembler for motorola and intel processors, this is the language that was always used around me. A byte always meant just that 8 bits. While a word and double word mean 16 and 32 respectively.

    There is a term for a 64-bit one, but for the life of me I don't remember.

    --
    ~ kjrose
  66. Re:You might have gotten hoaxed. by grahamlee · · Score: 1

    You have to buy it from the ISO, AFAIK [though it's pretty cheap, 44 Swiss Francs]. Assuming that you're in America (which I have no reason to do whatsoever, but at least it's a start ;-) you can purchase it through The American National Standards Institute, you're looking for standard ISO 9899:1999, "Programming Languages -- C".

    It's pretty much a necessity to have a reference copy of this if you intend to be writing any cross-platform C code. While Kernighan+Ritchie only deals with platform-agnostic C code, they don't always tell you where the mistakes that they are avoiding lie.

  67. Wrong product by Mostly+a+lurker · · Score: 5, Funny
    ...the Declaration of Independence in a single copy of Microsoft Word

    Surely, a declaration of independence should be stored in a non Microsoft product.

  68. Whoopedoo .. by Anonymous Coward · · Score: 0

    .. you're a genius. Or, if you just read the article: "Hydan could also break programs that are self-modifying or employ other unconventional techniques".

    So, uh, "so fucking what?" How have you "outsmarted" it?

  69. We'll be right back... by Chocolate+Teapot · · Score: 1
    --
    Modest doubt is called the beacon of the wise. - William Shakespeare
  70. Re:You might have gotten hoaxed. by OneEyedApe · · Score: 1

    I think the term you are looking for is "quadword". I may be wrong, though.

    --
    Life sucks, but death doesn't put out at all....
    --Thomas J. Kopp
  71. Re:You might have gotten hoaxed. by Reziac · · Score: 1

    Thanks for the discussion ... IANAP, but I collect compilers and source as if I were [g] ...Now tell me if I'm imagining things, but didn't some really ancient system (like early mainframe days) define a byte as two bits?

    --
    ~REZ~ #43301. Who'd fake being me anyway?
  72. Re:You might have gotten hoaxed. by Reziac · · Score: 1

    In fact, it strikes me as not very different to something I did to a program some years ago. This little utility used a loader that called a bunch of annoying little advertising applets (and mind you, this was a DOS app!) and it complained if one simply did away with the ad applets.

    One day I took a notion to dig thru the loader, and noticed that the name of each applet was preceded by the same binary string. So I fired up my handy hex editor and typed zeros over the top of each such string. Voila, no more calling ad applets, and it still worked fine otherwise.

    Anyway, that's a real primitive example, but does demonstrate "tampering with an original" without the use of a virus.

    --
    ~REZ~ #43301. Who'd fake being me anyway?
  73. cat file.ogg /bin/ls by Anonymous Coward · · Score: 0

    ;p

  74. Re:You might have gotten hoaxed. by grahamlee · · Score: 1

    A code magpie :-)

    Most of the early IBM mainframes were pertty two-bit, yes. Actually the byte as in what IBM are going to call this lump of data varied from one to six bits according to that AC post earlier in the thread, until they decided on EBCDIC as a character coding when it became eight bits. It's likely that if they had some process that had three or four output levels (e.g. OK, garbage in input, run out of cards, printer on fire) then they would have referred to its output as a byte and used two bits to store it.

  75. I do this already! by zulux · · Score: 4, Funny


    I hide all sorts of stuff in my C comments.
    Nobody can detect them in my executables.
    HA! I'm so sneaky!

    --

    Moneyed corporations, non-working 'poor' and criminal prisoners are turning productive citizens into tax-slaves.

  76. Re:You might have gotten hoaxed. by njchick · · Score: 1
    Second, and most importantly, the size of the file is dependent on the size of the bytes within the file.
    Yeah, right! The bigger are the bytes, the longer is the file.
  77. Re:You might have gotten hoaxed. by Reziac · · Score: 1

    Yep, we like bright shiny things :)

    So I wasn't imaginging the two-bit byte after all! Must be something I recalled from my high school's IBM1620, which we abused with amateur Fortran incantations. One of 'em must have induced brain-burn (akin to screen burn :)

    --
    ~REZ~ #43301. Who'd fake being me anyway?
  78. I know why by twitter · · Score: 1
    It's a cure for Microsoft bloat. Microsoft has tried many things to make their file system work and their code fit on affordable machinery despite it's needlessly huge size. They've tried changing the file system itslelf, actually changing a few constants in their source code to make FAT into the 32 bit VFAT that is now most common. They even pulled out their old patented stand by NTFS, which they ordinarily reserved for "professional" use only. In their extreems, they even considered making the entire file system into a database but the database was just as swamped with M$ bloat and user ineficiencey and it worked even worse than before. Then it came to them.

    Redundancy was the problem and redundancy was the answer. Microsoft realized that their operating system was simply a 32 bit GUI bolted onto a 16 bit extention of an 8 bit OS. Their code, when viewed in this light was massivly redundant and users could fit their data inside the code itself! They could even fit code within code this way. So, in this way, the engineers have saved the company from the marketing department without confrontation.

    It's a joke, laugh.

    --

    Friends don't help friends install M$ junk.

  79. You might have gotten trolled by twitter · · Score: 2, Funny

    Ahhh! If my byte moved from 8 bits to 16 bits, did my nibble become 8 bits instead of 4? Did my bit beceome 2 bits? If my bits can double, I'm in trouble! - Head Explodes -

    --

    Friends don't help friends install M$ junk.

    1. Re:You might have gotten trolled by Dannon · · Score: 1

      Did my bit beceome 2 bits?

      Nah, the barber's just having a promotion, shave and a haircut for half price.

      --
      Good judgment comes from experience.
      Experience comes from bad judgment.
  80. This is new?! by Anonymous Coward · · Score: 0

    Those guys of SecurityFocus must be really stupid, since cavity virus have been around for ages.

    1. Re:This is new?! by peter · · Score: 1

      > Those guys of SecurityFocus must be really stupid, since cavity virus have been around for ages.

      ignorant != stupid

      --
      #define X(x,y) x##y
      Peter Cordes ; e-mail: X(peter@cordes , .ca)
    2. Re:This is new?! by Anonymous Coward · · Score: 0

      > ignorant != stupid

      stupid == security oriented guy who doesn't research security related attacks (ie. viruses)

  81. UTF-16 in the Java language by yerricde · · Score: 2, Informative

    There is no "byte" data type in C

    There are distinct "byte" and "char" data types in the Java programming language. The "byte" is 8-bit as expected in PC-type and RISC architectures, but because the Java programming language's native character encoding is UTF-16 Unicode, "char" is 16-bit.

    --
    Will I retire or break 10K?
  82. great. by Mondain98 · · Score: 1

    Is your friend normally in the habit of writing trojans and giving them to the public?

  83. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    x86 has 2 registers: ADD AX, BX. You don't get to ADD AX, BX, CX in x86.

  84. I am working on a 36 bits machine. by aepervius · · Score: 1

    A word is 36 bits aned a "byte" is 9 bits which leads to a lot of fun for FTP'ing. So much for the 8 bits being the standard.

    --
    C. Sagan : A demon haunted world:
    http://www.amazon.com/gp/product/0345409469/
    visit randi.org
  85. Hydan works. by jinglz · · Score: 2, Interesting
    From the intel instruction set manual:
    "The SUB instruction ... sets the CF flags to indicate an overflow in the unsigned result".

    Which means that the CF stays the same for both instructions since their results are the same.
    ADD EAX, 3 ; eax = eax + 3
    Is the same as:
    SUB EAX, -3 ; eax = eax - (-3)
    So, "Hydan" works.
    -j
    1. Re:Hydan works. by Ninja+Programmer · · Score: 1
      • From the intel instruction set manual:
        "The SUB instruction ... sets the CF flags to indicate an overflow in the unsigned result".
        Which means that the CF stays the same for both instructions since their results are the same.
      Dude, this is a verbatim session with debug.com:

      • c:\>debug
        -a
        104C:0100 xor ax,ax
        104C:0102 sub ax, -3
        104C:0105 int 3
        104C:0106 xor ax, ax
        104C:0108 add ax, 3
        104C:010B int 3
        104C:010C
        -g

        AX=0003 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
        DS=104C ES=104C SS=104C CS=104C IP=0105 NV UP EI PL NZ AC PE CY
        104C:0105 CC INT 3
        -rip
        IP 0105
        :106
        -g

        AX=0003 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
        DS=104C ES=104C SS=104C CS=104C IP=010B NV UP EI PL NZ NA PE NC
        104C:010B CC INT 3
        -

      Notice the "CY" and "NC"'s in the two different runs. Just because Intel has defined "overflow" circularly, or in an opposite sense than you might be thinking about for subtraction doesn't mean we can't deduce what is really going by simply running the code for ourselves.
  86. same size doesn't mean same crc by Anonymous Coward · · Score: 0


    The same size executable, and it still works doesn't mean the CRC is the same. The executable will have a different footprint and will be seen by any virus scanner nowadays.

  87. stick to simple methods by wattersa · · Score: 1

    "two sticks, a dash and a cake with a stick down"

    -- 9/11 hijacker Mohammed Atta notifying Ramzi Bin-al-shibh by telephone of the date of the attacks. If I wanted to get a message to someone, using a riddle over the phone is a simple, low-tech solution which worked for them.

  88. Oh my god... I know this guy! by Anonymous Coward · · Score: 0
    Some many years ago, I used to run a PC trainer and docs group, by the name of ITU, later Fairlight trainers and docs. Our main coder, the guy who wrote all of our trainers was the quite impressive Martial Artist, a damn fine programmer. The fact that I would stumble across him again in a Slashdot posting of comments hidden in a game ROM seems a bit bizarre...

    .NFO file from one of our releases here

  89. Re:Ninnle messages! by Anonymous Coward · · Score: 0

    I agree. Ninnle is the end-all be-all of Linux distributions. For if we should be without Ninnle, what would the purpose of our existence be? Another question: If Ninnle is so great, then why do bad things happen to good distributions? Hmm. I may have to take a mountain retreat to get in touch with my Ninnilian side. Until then, continue to Ninnle.

  90. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    I'm sorry, but the word byte is a contraction of "by eight". A byte is 8 bits by definition. You're just wrong, period.

  91. If you consider COMPRESSED files, there is a prob by RockyJSquirel · · Score: 1

    Sheetrock's posting makes no sense unless you he's talking about compressed files. On my windows 2000 machine I keep lots of directories compressed, so if I ran this program over my files, they'd get bigger in actual disk space in compressed size because the amount of redundancy would be less.

    Most people have their browsers set to only show the uncompressed size of files even if they have disk compression turned on, so they'd never notice the difference.

  92. Old News by teslatug · · Score: 1

    Microsoft has been doing this for ages

    ;)

  93. For closed source, sure by Zog · · Score: 1

    That would apply a lot more if open-source didn't exist. For example, I've done some hacking on Bind in the past, and still have the modified binaries, but have long since lost the sources, so there's no easy way to see what a clean version would look like - without the steganographic data. It would also be pretty simple to apply this to development snapshots.

  94. Re:You might have gotten hoaxed. by gte910h · · Score: 1

    IIRC, word refers to the standard size piece of information on the processor. So 8086 are 16 bit chips and have a 16 bit word, and pentiums are a 32 bit chip and have a 32 bit word.

    --
    Want to see every step I took to start my company? http://www.rowdylabs.com/blogs/pitchtothegods
  95. Re:You might have gotten hoaxed. by Ninja+Programmer · · Score: 1

    I was unaware that IDA went to that kind of depth in its latest versions. I am familliar with their product but have an old version.

    Indeed, xor eax, eax, is hard coded into most modern x86 CPUs as a "CLR EAX", but one notable exception is the AMD K6. Because of the issue with artificial dependency chains, it is actually sometimes faster to perform a MOV EAX, 0 for that processor. Furthermore, it is well known that the P6 has branch target alignment issues, so using differently sized instructions can help you align your branch targets -- and in the case of MOV EAX, 0 versus XOR EAX, EAX they are equivalent in terms of performance, only differing in the opcode space they use.

  96. Re:You might have gotten hoaxed. by Poro · · Score: 1
    I'm surprised the editors didn't review this before approving it for posting.

    And I am surprised that you didn't read the article before commenting on it...

  97. Goverment Action? by Anonymous Coward · · Score: 1, Funny

    Does this mean the US goverment will ban the distribution of binary executables and will only allow distribution in sourcecode form?

  98. Re:You might have gotten hoaxed. by grahamlee · · Score: 1

    A byte is a bite of information. However, the word bite can easily be misspelt bit, while byte cannot. The byte is not eight bits by definition, and you blatantly did not read the reference I gave to the correct definition of byte, nor any of the other fine references available. You're not only wrong, but ignorant and I claim my five pounds.

  99. Everyone: Add fodder to your hard drive! by Anonymous Coward · · Score: 0

    It's easy, and it's fun! Just run the following command:

    dd if=/dev/random of=/tmp/encrypted-terrorist-plans.txt.encrypted bs=1024k count=5

    If everyone does this on all their network connected machines, it will keep big brother busy. And it'll show those damn courts who's boss when you CAN'T give them the password.

  100. So let me get this straight... by Ieshan · · Score: 1

    PUSH A000
    POP ES

    Were you trying to embed a message about children's lollipops?

  101. Re:If you consider COMPRESSED files, there is a pr by Anonymous Coward · · Score: 0

    And when you edit or execute the file the filesystem decompresses it to a useable state. So really your arguement and the one your replying to are still fucking bull shit uninformed uneducated garbage. Shut the fuck up and go home.

  102. Definition of byte by Anonymous Coward · · Score: 0
    From the Free Online Dictionary of Computing:

    byte:
    These usages are now obsolete...
    ...The move to an 8-bit byte happened in late 1956, and this size was later adopted and promulgated as a standard by the System/360 operating system (announced April 1964).

    The point of a language is to communicate. Virtually everyone uses the word byte to mean eight bits. If you purchased 4 gigabytes of RAM, only to discover the vender redefined byte to mean one bit, you'd be hopping mad.

    1. Re:Definition of byte by grahamlee · · Score: 1

      As it happens I'm usually pissed off when I buy a 40Gig hard drive, only to find that they meant 4*10^9 octets.

  103. What might have tipped them off... by Skwirl · · Score: 3, Funny

    The picture had a caption that said, "Everytime you masturbate, God kills a kitten... and a plane full of infidels."

  104. Been done many years ago.. by zcat_NZ · · Score: 0, Redundant

    About 15 YEARS ago, I was reading the documentation for the A86 assembler. The author warned that any non-trivial amount of code compiled with his assembler could be identified and proven in court from the compiler's unique 'footprint'.

    Same concept as this except that it was added by the assembler itself, hiding a simple pattern to identify the compiler, and I think it was a bit more subtle than this example.

    Just in case anyone thought this was a new idea...

    --
    455fe10422ca29c4933f95052b792ab2
    1. Re:Been done many years ago.. by Anonymous Coward · · Score: 0

      A quick google search for "A86 footprint" finds this documentation, dated 1995.

      That's not quite 15 years ago.

  105. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    according to important emails that I have been privileged to receive, for a modest amount of money I can get pills that will add 3 inches overnight to my byte !

  106. Re:You might have gotten hoaxed. by prowley · · Score: 1

    Are you new here?

  107. Re:You might have gotten hoaxed. by cryptor3 · · Score: 2, Interesting

    Furthermore, there might be cases where it doesn't matter if the program works. So the program crashes or has logical errors. Does that make you 'guilty' of having hidden data in your file?

    It'll be a strange day in legal history when the _user_ gets arrested/blamed/indicted because his computer crashes.

  108. Encryption and Such by tuxatl · · Score: 1

    Hmm, The comment on stenography is just plain daft. It no more reasonable to claim stenography be 100% undetectable than it would be to claim that an encryption technique must be uncrackable. We have two main techniques available to us throughout history when it comes to transferring information in privacy. One such set of techniques is encryption i.e. the message is in plain view but encoded and stenography in which the message is plainly coded but in some sense hidden.

  109. Re:You might have gotten hoaxed. by Anonymous Coward · · Score: 0

    Actually Unicode characters can vary from 2-5 bytes as I recall. It depends on the encoding.

  110. Violating EULA by pixelcort · · Score: 1

    Don't many EULAs say that you can't alter the binary without prior arangments with the company? You could be charged with dissasembling or reverse-engineering the binary.

    --
    http://pixelcort.com/
  111. or maybe by Anonymous Coward · · Score: 0

    you're a FUCKING idiot who can't even spell FAHRENHEIT!!!

  112. yeah right by Anonymous Coward · · Score: 0

    you're so full of shit. you're probably one of those dipshit americans of 4th or 5th generation german or french decent that refuses to let go of your "heritage" by putting on this facade of being european. stupid dipshit.

  113. Re:You might have gotten hoaxed. by LionMage · · Score: 1
    I'm sorry, but the word byte is a contraction of by eight. A byte is 8 bits by definition. You're just wrong, period.

    Although I agree that the commonly accepted definition of byte is 8-bits (and a nybble is 4-bits), your derivation of byte as a contraction of by eight is apocryphal. The words byte and nybble were adopted from the Old English forms of the words bite and nibble, and refer to chunks of data in 8 and 4 bit sizes, respectively.

  114. How do you define a byte? by LionMage · · Score: 1

    Referring to a language specification (such as the ISO C99 spec) or the Jargon File doesn't really work when you're defining words in common use. Although historically the byte has varied in size (as many other posters have pointed out), the commonly accepted definition among laymen and most computer scientists alike is that a byte consists of eight bits of data, and a nybble consists of four bits.

    If you open any dictionary such as the OED or Webster's, you'll find such a definition.

    To disprove the validity of using a language specification as a proof of how big a data type is defined to be, one only needs to pick up another language specification. I do much of my programming in Java, and in Java, the byte data type is defined to always be a signed, eight-bit number. (In many C implementations, byte is equivalent to an unsigned char; in other C implementations, byte is equivalent to char, and can be signed or unsigned.) In Java, a char is a unicode character, sixteen bits in size, and not at all equivalent to a byte.

    In general computer science classes, a byte is treated as an eight-bit entity. It was taught this way at MIT. A nybble was similarly taught to always be a four-bit entity. Then again, at MIT, the CS professors emphasized the distinction between computer science concepts in general and implementation details of languages in specific. Since I have built discrete component computers for the infamous MIT 6.003 course, which rely on ALU chips that process data in discrete nybble (four-bit) sized chunks, I have a pretty solid grasp of what the common parlance is.

    The fact that C tries to redefine a byte to be some data size that's processor dependent is interesting, but does not agree with common use among most computer professionals or laymen. Therefore, the more common use should be considered the correct one, regardless of whether you personally agree with this position. That's how dictionaries get written -- consensus and common use.

    Back when I was learning C, there was no "byte" data type, only char.

    "But now consider a computer that can address eight-bit-wide areas of store, but my OS uses 16-bit Unicode. The byte is now 16 bits, as that's the smallest chunk of memory that can hold a single char." This quote makes no sense. A char does not define a byte, nor does the operating system's choice of how to represent characters internally.

    Clearly, in the world of Platonic ideals, there's an entity called a byte that is invariant and unchanging. And then there are crappy implementations of languages and operating systems in the real world, as well as some really questionable fluff in language specifications. Sorry, but I don't buy argument by redefinition. And the later posts that follow up, appealing to the Jargon File and other storehouses of historical trivia, do not in any way reflect common usage, which again should be the arbiter of how language is defined and used. It's nice to know that old IBM machines represented a byte as anywhere from one to six bits, but today, a byte is an octet of data, and that's that.

    Get over it and move on. Find a more fruitful battle to fight.

    1. Re:How do you define a byte? by grahamlee · · Score: 1

      The part of this post I found the most interesting, was after having written a full screen (although this is, of course, an implementation-dependent quantity) of text explaining how we should never rely on written definitions of words, but should instead rely on the dictionary definition[1] (which is, umm....), you followed up with this tour de force:

      Get over it and move on. Find a more fruitful battle to fight.

      This would presumably be further fuel for the adage do as I say, but not as I do.

      BTW there's no such thing as a byte data type in C. The C spec does, however, specify the byte as a unit of store.

      More BTWage: to disprove the validity of a dictionary in defining the use of a word, one merely needs to look in another dictionary. For instance, two dictionaries spell the word meaning to prefer over other alternatives as favour and as favor. One dictionary calls artificial flying machines airplanes, another aeroplanes, a further Flugzeugs and yet another avions.

      I think the moral here is probably that I should avoid countering one joke with another flippant comment around here. And possibly that as long is one is sensible in clearing ambiguities of definition, one should not be challenged over one's use of a word. For instance I clearly stated that I was using the C definition of a byte, only to be replied to by either ignoramuses or bigots who couldn't believe that their "one true byte" was only one possible definition. Not including you in that statement, BTW.

      [1]Which is something I refuse to do in certain cases, as this would require me to acknowledge the existence of leverage as a transitive verb. Which it most blatantly isn't. it is and always will be a noun.

  115. Re:You might have gotten hoaxed. by LionMage · · Score: 1

    The C standard in no way, shape, or form defines reality outside itself.

    The C specification does not force general computer science concepts to conform to itself. Indeed, the reverse SHOULD be true.

  116. Re:You might have gotten hoaxed. by LionMage · · Score: 1

    "But the punchline is strengthened; the byte is defined in multiple sources as the size of a character variable. One use of this form of the word byte has been shown to predate the incorrect definition of a byte as strictly equal to an octet. Case rests."
    This logical fallacy is commonly referred to as argument by appeal to false authority. Your argument doesn't change the fact that most common people, as well as computer science text books, refer to a byte as an octet of data, regardless of whatever historical definitions may or may not have been applied. This is the evolution of language, much as you might not like it.

    Neither the Jargon File nor the C specification is a sufficient source of authority to redefine the byte as you see fit.

    Furthermore, if a byte's definition is so fluid, what does this say about other units of data width, such as the nybble? (Granted, the nybble is archaic, but those of us who used it remember.)

  117. Steganography by DanAnderson26 · · Score: 1

    Hmmm....Think about it....Usenet...

    30GB a day of grainy porn...

    Why again do the terrorists need encryption?

    http://www.fourmilab.ch/stego/

    Dan

  118. Re:You might have gotten hoaxed. by grahamlee · · Score: 1
    Neither the Jargon File nor the C specification is a sufficient source of authority to redefine the byte as you see fit.

    IYHO. IMHO, the C standard is sufficient, and the independent corroboration from a well-researched source like the jargon file confirms the definition. We'll just have to agree to disagree. BTW if the definition I quoted was a "redefinition", then so is the eight-bit byte. The original use of the word byte by IBM programmers referred to the size of whatever information chunk they were considering.

    Furthermore, if a byte's definition is so fluid, what does this say about other units of data width, such as the nybble?

    It leaves them as arbitrary as they always were. It's obvious to anyone who's ever programmed cross-platform (or bought a hard drive) that the only unit of data guaranteed to be the same everywhere is the bit. For instance I wouldn't rely on the eight-bit byte when using a serial port for communication, because it could require sending two chunks of data, if the DTE and DCE were configured for seven bits + chuvmey.

  119. Last Post! by alpg · · Score: 0

    The most advantageous, pre-eminent thing thou canst do is not to exhibit
    nor display thyself within the limits of our galaxy, but rather depart
    instantaneously whence thou even now standest and flee to yet another rotten
    planet in the universe, if thou canst have the good fortune to find one.
    -- Carlyle

    - this post brought to you by the Automated Last Post Generator...