Public hangout for Tech Learning Collective community members. Be mindful of the social rules but otherwise have fun!
vol.py
plugin commands give me meaningful output, as far as I can tell.
=
sign at the end. Here's the last bit of input from the Beginner 10.txt
file (Gitter won't let me post the whole thing) that they provided for the challenge:MmQgMmQgMmQgMmQgMmQgMjAgMmQgMmQgMmQgMmQgMmQgMjAgMmUgMmQgMmQgMmQgMmQgMjAgMmUgMmQgMmQgMmQgMmQgMjAggMmQgMmQgMmQgMmQgMjAgMmUgMmQgMmQgMmQgMmQgMjAgMmQgMmQgMmQgMmQgMmQgMjAgMmQgMmQgMmQgMmQgMmQgMjAgMmUgMmQgMmQgMmQgMmQ=
base64 --decode
and get a bunch of values like this:2d 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 20 2e 2d 2d 2d 2d 20 2e 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 20 2e 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 0a 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 20 2e 2d 2d 2d 2d 20 2e 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 20 2e 2d 2d 2d 2d 20 2e 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 0a 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 20 2e 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 0a
2d
, 2e
, and 20
. We can use CyberChef to make this easier than I did it, but I went with a command-line approach. In hex, 20
maps to the ASCII space character. So this means that having actual spaces in the input here isn't what we want, so first I got rid of the spaces by replacing them all with a percent sign:base64 --decode "Beginner 10.txt" | sed -e 's/^/%/' -e 's/ /%/g'
-e
to sed
means "execute this script" and then I provide two scripts: the first one simply prepends the %
to the very first location in the input and the next one replaces all the literal space characters with a percent sign. This gives me a URL-encoded string where the spaces are part of the encoded value, so now I have input like this:%2d%2d%2d%2d%2d%20%2d%2d%2d%2d%2d%20%2e%2d%2d%2d%2d%20%2e%2d%2d%2d%2d%20%2d%2d%2d%2d%2d%20%2d%2d%2d%2d%2d%20%2e%2d%2d%2d%2d%20%2d%2d%2d%2d%2d%0a%2d%2d%2d%2d%2d%20%2d%2d%2d%2d%2d%20%2e%2d%2d
urllib
:alias urldecode='python -c "import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1]))"'
urldecode $(base64 --decode "Beginner 10.txt" | sed -e 's/^/%/' -e 's/ /%/g')
and the result is a bunch of morse code, apparently:urldecode $(base64 --decode ~/Downloads/Beginner\ 10.txt | sed -e 's/^/%/' -e 's/ /%/g')
----- ----- .---- .---- ----- ----- .---- -----
----- ----- .---- .---- ----- .---- .---- -----
----- ----- .---- ----- ----- ----- ----- -----
----- ----- .---- .---- ----- .---- ----- .----
----- ----- .---- ----- ----- ----- ----- -----
----- ----- .---- .---- ----- ----- .---- -----
----- ----- .---- .---- ----- .---- .---- -----
----- ----- .---- ----- ----- ----- ----- -----
----- ----- .---- .---- .---- ----- ----- .----
----- ----- .---- ----- ----- ----- ----- -----
----- ----- .---- .---- ----- ----- .---- -----
----- ----- .---- .---- ----- .---- ----- .----
----- ----- .---- ----- ----- ----- ----- -----
----- ----- .---- .---- ----- ----- .---- -----
----- ----- .---- .---- ----- ----- .---- -----
----- ----- .---- ----- ----- ----- ----- -----
----- ----- .---- .---- ----- ----- .---- -----
----- ----- .---- .---- ----- .---- .---- -----
----- ----- .---- ----- ----- ----- ----- -----
----- ----- .---- .---- ----- ----- .---- -----
----- ----- .---- .---- ----- .---- ----- .----
----- ----- .---- ----- ----- ----- ----- -----
----- ----- .---- .---- ----- ----- .---- -----
----- ----- .---- .---- ----- .---- .---- -----
----- ----- .---- ----- ----- ----- ----- -----
----- ----- .---- .---- .---- ----- ----- .----
-----
is the numeral 0 and a .----
is the numeral 1.
Okay so now we just need to actually convert this to 0's and 1's so we can use it the way computers would expect, since computers don't really use Morse code, sooooooo sed
to the rescue again, with three simple substitution scripts.
First, replace the Morse code 0 with the numeral 0 gobally:
-e 's/-----/0/g'
Then do the same thing with a Morse code 1:
-e 's/.----/1/g'
and then get rid of the spaces so that we have a single "byte" per line:
-e 's/ //g'
So the full command is now:
urldecode $(base64 --decode ~/Downloads/Beginner\ 10.txt | sed -e 's/^/%/' -e 's/ /%/g') | sed -e 's/-----/0/g' -e 's/.----/1/g' -e 's/ //g'
urldecode $(base64 --decode ~/Downloads/Beginner\ 10.txt | sed -e 's/^/%/' -e 's/ /%/g') | sed -e 's/-----/0/g' -e 's/.----/1/g' -e 's/ //g'
00110010
00110110
00100000
00110101
00100000
00110010
00110110
00100000
00111001
00100000
00110010
00110101
00100000
00110010
00110010
00100000
00110010
00110110
00100000
00110010
00110101
00100000
00110010
00110110
00100000
00111001
26 5 26 9 25 22 26 25 26 9
and the repeated 26 (and that no number is higher) makes me sense it's an alphanumeric cipher.
If we say a is 1 and z is 26, then the decoded is zeziyvzyzi
if we say a is 26 and z is 1, then the decoded is avarbeabar
which seems like not complete gibberish.
rtcp{zeziyvzyzi}
or rtcp{avarbeabar}
work as flags.
rctp{a_phrase_spaced_like_so}
bc(1)
I get this for various output bases:echo "obase=16; ibase=2; 00110010" | bc
32
echo "obase=10; ibase=2; 00110010" | bc
50
echo "obase=08; ibase=2; 00110010" | bc
62
Also this:
for i in $(urldecode $(base64 --decode ~/Downloads/Beginner\ 10.txt | sed -e 's/^/%/' -e 's/ /%/g') | sed -e '-----/0/g' -e 's/.----/1/g' -e 's/ //g'); do printf "\x"$(echo "obase=16; ibase=2; $i" | bc) ; done
26 5 26 9 25 22 26 25 26 9
is the exact same output as from CyberChef, which proves that is in fact what it's doing. Unfortunately I don't know what these strings of numbers mean.
The people behind Covid Watch (https://www.covid-watch.org/about) are looking for help on Java development and/or help with containerizing their backend server:
https://github.com/Co-Epi/coepi-backend-aws
There's probably a lot more to do on that project, too, it seems cool!
"Reduce the spread of COVID-19 without increasing the spread of surveillance.
Covid Watch aims to empower people to protect their communities from COVID-19 without sacrificing their personal privacy."