Holy shit that was intricate.
So we had the first letter, the third letter, two letters of unknown position, and one mystery letter.
That means... there were ((26x2)+10) x 6 = 372 bruteforce possibilities, that's not too bad.
Did anyone do it?
Comment has been collapsed.
Yes TheRealKotA popped up in the final GA, but I asked him to not take it. Will post later, into the "map" thread, just reorganizing my BWlists is boring (as promised to you yesterday, the Sleeping Dogs DE will go another round as a whitelist GA for all solvers)
Comment has been collapsed.
2,284 Comments - Last post 3 minutes ago by Axelflox
16,599 Comments - Last post 19 minutes ago by HomieOhmie
534 Comments - Last post 37 minutes ago by Hawkingmeister
258 Comments - Last post 50 minutes ago by RobbyRatpoison
212 Comments - Last post 56 minutes ago by sensualshakti
39 Comments - Last post 1 hour ago by sensualshakti
168 Comments - Last post 1 hour ago by CalamityUP
190 Comments - Last post 1 second ago by XiaoLong
288 Comments - Last post 59 seconds ago by Myklex
2,843 Comments - Last post 9 minutes ago by ozo2003
40 Comments - Last post 10 minutes ago by AmikoNovich
51 Comments - Last post 35 minutes ago by Vasharal
29,260 Comments - Last post 57 minutes ago by MikeWithAnI
161 Comments - Last post 1 hour ago by TinaG
EDIT 14/07/2015: good news puzzlers. The JavaScript version of the code (a.html) is hosted at folk.uio.no/gergelyc/a.html
Interesting detail is that the open file dialog usually accepts URL-s, like http://i.imgur.com/DI2rhgH.png, directly
EDIT 29/09/2016: I do not know if xlate works any more, but it is down at this very moment. http://www.unit-conversion.info/texttools/convert-text-to-binary/ provides some of its functionality - in particular I like that it is client-side code and it does the conversion in real-time
Steganography must be the art of drawing a proper Stegosaurus, see below. Some other definitions may say that it is about concealing the presence of some message and/or its transmission.
Like hiding the binary number 101 in a picture of a harmless potato, which picture is also available below. Indeed it suffered a lot: all of the lowest bits of its colour channels have been zeroed, then 3 pixels were chosen to store the 101. The lowest bit of their red channel was toggled to 1, and the lowest bit of their blue channel holds the actual data 1,0,1. These pixels are a bit hard to find, especially since out of the 3 base colours (red, green, blue) the human vision is most sensitive to the green one, which is not used here.
But this is why we have computers. Did you know that most probably you have tools for creating programs for Windows, even if you never really wanted them? The .Net framework what many games install/update when starting up the first time, comes with not just the so called runtime, but also with compilers for two or more programming languages. C# and Visual Basic.NET are always among them.
And, if .Net is capable enough for creating games, it can actually help us finding those 3 pixel values.
Here is a small C# code for solving this problem:
There are 8 bits in a byte, I just felt appropriate putting this comment here.
If programming is not something familiar, that probably will not change now, but here comes a short description. I put this code into
decode.cs
, so the program is going to be decode.exe by default. It is a command line program, executable from that fancy cmd window. For example asdecode.exe potato.png
(after building it, see the next paragraph). The line with the Uri thing tries to get that argument, 'potato.png'. It will die in an unpleasant way if there is no argument passed, so it is better to pass one. The BitmapImage line tries to load the image, 'potato.png', it will die if there is any problem with the file (like it does not exist, it is not an image, it is broken, it is unreadable, etc.).The rest will not die: w and h will keep the resolution of the image, this potato is a 620x372 image. Having a "BitmapImage" is nice, but at the beginning some bytes were modified, so accessing bytes would be even better. byte[] is a lot of bytes, as there are w*h pixels in the image and 4 bytes represent a pixel (R-G-B colors and a transparency byte, Alpha), w*h*4 bytes are requested.
CopyPixels is the way to actually get the bytes from the image. The so called "for loop" visits each pixel (yet again, there are w*h of them) once, and the "if" checks if the red pixel has an 1 as its lowest bit, and "Writes" to the "Console" the lowest bit of the blue component if necessary.
The C# compiler is called
csc.exe
, but it is not present in the path by default, so it has to be invoked with specifying its exact location. What is almost sure is that you have a c:\Windows folder, and c:\Windows\Microsoft.NET\Framework contains some .Net versions. v3.5 is typically present (I think it is simply part of Windows 7/8), so in the example I am calling the compiler asc:\Windows\Microsoft.NET\Framework\v3.5\csc.exe decode.cs -reference:PresentationCore.dll,WindowsBase.dll
, this command is executed from the folder where decode.cs resides. The compiler needs the name of the source file (decode.cs here), and because handling of images is not part of the default offering, the -references parameter is needed to add the necessary libraries.If everything goes well, decode.exe appears, and ready for testing. For example with the potato image from imgur.
The last image shows how compilation and test run are expected to happen.
Solutions
There was a GA code in the command line window. The folder name C:\ak8dk is a GA for Borderlands 2: Creature Slaughterdome.
Running the code (or the JavaScript variant in the Steganosaurus post) on the asdfmovie screenshot (Stegosaurus) gives a long binary code which can be decoded to some text leading to Contrast, noLVL. I assumed the use of the xlate page, but anything else could work as well. Somehow it (xlate) is down today, but it was operational for most of the time during the puzzle was running.
The potato really brings 101, the command line screenshot just some pun message, and the puzzle results image (in an other thread) gives a letter.
There is a Borderlands 2: Psycho Pack, LVL1 encoded in the comments of the source code.
While it is still there, originally it was more readable:
Uri uri=new Uri(args[0],UriKind.Relative); //
if No Command line parameter is Supplied, this will dieBitmapImage image=new BitmapImage(uri); //
this Will Die Too if the image Has any problemsint w=image.PixelWidth; //
store The width Of the image, Just A simple numberint h=image.PixelHeight; //
store The height of The image, just A simple numberbyte[] pixels=new byte[w*h*4]; //
four Bytes per Pixel, GBRA (green, Blue, red, alpha)image.CopyPixels(pixels,w*4,0); //
get pixel data from image objectfor(int i=0;i<w*h;i++) //
loop through all pixels (not bytes, so w*h only)...
The 5 lines containing capital letters in the comments were encoding the GA code. Only the first 8 words count, as the "There are 8 bits in a byte, I just felt appropriate putting this comment here." remark tried to point it out. Lower case word=0, upper case=1.
Yes, 5 or 6 days later I salted the other comment positions with random upper case letters, just a few minutes before the JavaScript decoder (linked above) was posted. That time I did not really want anyone to find the Psycho Pack and subsequently the Sleeping Dogs: Definitive Edition.
Comment has been collapsed.