* Flags
Just use
https://www.dcode.fr/maritime-signals-code
* c0rrupt
This turned out to be surprisingly tricky. The PNG format consists of
a header followed by chunks. Each chunk consists of 4 length bytes, 4
identifier bytes, as many bytes as specified by the length and 4
checksum bytes. Depending on the identifier of the chunk data is
interpreted accordingly, the spec explains the common ones:
http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html
The task is to open the file in a hex editor (try =r2= if you dare)
and edit the identifiers, lengths and contents until the file opens
correctly. Checksums don't need to be adjusted as most viewers will
treat incorrect ones as warning, but feel free to fix them nonetheless
*after* you're done fixing everything else with
http://schaik.com/png/pngcsum.html
One issue I ran into is assuming the PNG file has a single IDAT
chunk and interpreted everything after the identifier bytes as
content, then adjusted the length accordingly. This is wrong, there
are several consecutive IDAT chunks and each of them needs its length
adjusted to span only that much.
If everything went right, you'll get a noisy image spelling out the
flag as =picoCTF{c0rrupt10n_1847995}=. If not, apply the following
radiff2 patch with =r2 -q -w -i mystery.r2patch mystery=:
#+BEGIN_QUOTE
wx 50 @ 0x00000001
wx 47 @ 0x00000003
wx 1a0a @ 0x00000006
wx 4948 @ 0x0000000c
wx 00 @ 0x00000046
wx 0ec4 @ 0x00000048
wx 0ec4 @ 0x0000004c
wx 0000 @ 0x00000053
wx 49 @ 0x00000057
wx 41 @ 0x00000059
#+END_QUOTE
* m00nwalk
http://www.techedupteacher.com/how-to-make-an-sstv-puzzle/ explains
how the transmission can be decoded. I've downloaded the suggested
decoder, ran it in WINE and tried figuring out a way to load up the
audio file. It turns out the program processes everything looking
like a microphone instead, so I ended up with the following
contraption:
- Upload the audio file on a web server
- Download the audio file to my smartphone
- Play back the audio file on my smartphone, holding it towards my
laptop's built-in microphone
- Make sure the sound is picked up by the program
Eventually I ended up with the following:
[[file:m00nwalk.png]]
Note that using the save button creates a watermarked copy, with the
watermark obscuring half of the flag, hence the screenshot.
* m00nwalk 2
Using the same trick a few more pictures can be decoded from the
additional audio files. They hint at steganography being used with
the passphrase =hidden_stegosaurus=. Use =steghide= with it on the
main audio file and you can extract a text file containing the flag:
#+BEGIN_QUOTE
picoCTF{the_answer_lies_hidden_in_plain_sight}
#+END_QUOTE
* mus1c
Just use the online interpreter on
https://codewithrockstar.com/online
and it will print a bunch of numbers:
#+BEGIN_QUOTE
114
114
114
111
99
107
110
114
110
48
49
49
51
114
#+END_QUOTE
These are ASCII for "rrrocknrn0113r" which happens to be the flag.
* 1_wanna_b3_a_r0ck5tar
Unlike the previous exercise this one cannot be solved just by using
the online demo on the official website and some analysis of the code
is required. I've used
https://github.com/marcinruszkiewicz/kaiser-ruby to compile the code
to Ruby:
#+BEGIN_SRC ruby
@rocknroll = true
@silence = false
@a_guitar = 19
@tommy = 44
@music = 160
print '> '
__input = $stdin.gets.chomp
@the_music = Float(__input) rescue __input
if @the_music == @a_guitar
puts ("Keep on rocking!").to_s
print '> '
__input = $stdin.gets.chomp
@the_rhythm = Float(__input) rescue __input
if @the_rhythm - @music == nil
@tommy = 66
puts (@tommy).to_s
@music = 79
@jamming = 78
puts (@music).to_s
puts (@jamming).to_s
@tommy = 74
puts (@tommy).to_s
@tommy = 79
puts (@tommy).to_s
@rock = 86
puts (@rock).to_s
@tommy = 73
puts (@tommy).to_s
break
puts ("Bring on the rock!").to_s
else
break
end
end
#+END_SRC
After ignoring the nonsensical =break= statements and fixing the
second comparison, it's possible to just execute the code. Enter the
two expected numbers when prompted and the the code will print the
following numbers:
#+BEGIN_QUOTE
66
79
78
74
79
86
73
#+END_QUOTE
Once again it's ASCII, but for "BONJOVI".