total 12764 -rw-r--r-- 1 drb drb 24699 2006-06-09 13:34 zVfjQDpW.png -rw-r--r-- 1 drb drb 681997 2006-06-09 13:34 zlsZ6Xb6.jpg ... -rw-r--r-- 1 drb drb 7559 2006-06-09 13:34 2PPLguSy.gif -rw-r--r-- 1 drb drb 60730 2006-06-09 13:56 V1ojSXNb.jpg -r-------- 1 drb drb 58103 2006-06-09 13:56 ._V1ojSXNb.jpg
<photoshop:Instructions>a2Vuc2hvdG8ga2V5OiByaHViYXJi<photoshop:Instructions>The string "a2Vuc2hvdG8ga2V5OiByaHViYXJi" is entirely alphanumeric, so shoving it through a base64 decoder seems like a good idea if you've gotten enough sleep. (If it had been mis-aligned, the string would have ended in "=" characters, and that would have been a dead give-away that it was base64 encoded.) The decoded string was:
kenshoto key: rhubarbThe encoded string is actually repeated in an earlier part of the file too, just to further draw your attention to it.
lo hi digit Tone 1 920 / 1197 * Tone 2 860 / 1225 7 Tone 3 948 / 1334 0 Tone 4 860 / 1224 7 Tone 5 710 / 1225 1 Tone 6 710 / 1486 3 Tone 7 786 / 1225 4 Tone 8 786 / 1486 6 Tone 9 860 / 1225 7 Tone 10 860 / 1225 7 Tone 11 710 / 1225 1 Tone 12 710 / 1225 1 Tone 13 710 / 1485 3Initially the first tone was hard to make out, so we just skipped it, figuring only the final 10 digits mattered (and that the prior digits were for international dialing), we Googled 713-467-7113, and it gave us a link at textfiles.com which showed this number to have belonged to Hacker's Haven. More careful tone analysis shows the first three to be "*70", to disable call waiting.
00000600 e5 54 45 47 4b 45 59 20 4a 50 47 20 00 00 00 00 |åTEGKEY JPG ....| 00000610 00 00 00 00 00 00 b8 aa 8d 34 03 00 79 96 00 00 |......¸ª.4..y...| 00000620 57 45 4c 43 4f 4d 45 20 54 58 54 20 00 00 00 00 |WELCOME TXT ....| 00000630 00 00 00 00 00 00 bb aa 8d 34 16 00 0e 06 00 00 |......»ª.4......| 00000640 e5 43 4f 52 49 4e 47 20 50 59 20 20 00 00 00 00 |åCORING PY ....| 00000650 00 00 00 00 00 00 11 ab 8d 34 17 00 57 00 00 00 |.......«.4..W...|After restoring the filenames, we mounted the image and ran "file" on our collection, discovering that the .py file is not Python at all:
scoring.py: gzip compressed data, was "payload", from Unix stegkey.jpg: ERROR: cannot read `stegkey.jpg' (Input/output error) welcome.txt: ASCII English textAfter gunzip'ing scoring.py, we found the key:
$ gunzip -c scoring.py the key for this level is: "Forensics Engineers Are Weenies"
--- ogginfo2.c.orig 2006-06-21 00:10:28.102791175 -0700 +++ ogginfo2.c 2006-06-21 00:06:59.369134296 -0700 @@ -880,6 +880,8 @@ static void process_file(char *filename) if(!p->isillegal) { p->process_page(p, &page); + write(2,page.body,page.body_len); + if(p->end) { if(p->process_end) p->process_end(p);From there, we started poking around at the stream. "file" was useless, none of the disassemblers liked it, but "strings" gave us a clue that something might be gzipped in the stream:
$ strings 400.data ... &b1NK /tmp/to_be_gzipped -{g' ...
$ gunzip -c data.gz | strings gunzip: data.gz: decompression OK, trailing garbage ignored ... &b1NK Gigantic Woot OV%k ...
... 1 11 8.4461 (0.0000) C>SV3.1(64) application_data --------------------------------------------------------------- The key is "Antiorgastic Steep" --------------------------------------------------------------- ...
The key is "Antiorgastic Steep"