DEV Community

wakawakathedev
wakawakathedev

Posted on

My journey to solving the first codearkive puzzle that won me 10k TNBC.

Backstory

I remember the first code cipher that I encountered was the GCHQ Christmas puzzle of 2015. The following puzzle is a nonogram.

Nonogram

As a fairly new programmer at the time, I remember becoming fairly obsessed at trying to solve the puzzle during a tech meetup (remember still having those?).

During that evening, I realised that the nonogram revealed a QR code (by solving one of the sections). Which lead me down a path of looking up the format of a QR Code. Interestingly enough, QR codes are quite robust, and without solving the entire nonogram, by scanning a partial QR code, you can still retrieve the embedded information.

There's an exhilaration diving from one concept, to another, and learning something along the way.

This feeling has stuck with me ever since.

Since that 2015 Christmas puzzle, I would often look at forums and solutions to see how each stage of the puzzle was constructed. By analyzing discovering the solutions and the discussions around them, I came to two conclusions:

  1. I'm not getting into cryptography as a career (it's a really deep rabbit hole... the GCHQ puzzle had something like 10 stages)
  2. Even the best cryptographers talk with one another.

A short intro to thenewboston blockchain community.

thenewboston is a blockchain platform for everyone. We are an open source community developing decentralized apps with the goal of helping the whole world move into the cryptocurrency era.

Bucky Roberts (Prolific O.G. Youtuber) emerged back in Nov 2020 with a new community project, which is how I got introduced to the discord server Intro

The start of the journey

So what's the above got to do with My journey of the last 24 hours to solve codearkive puzzle that got me 10k TNBC?

Well, this article will outline my thoughts throughout codearkive puzzle_one created by @niekon .

At 5:41am UTC, thenewboston discord was presented with a message in the #code-breaking channel.

Niekon:

Hello @everyone .
I hope everyone is well and doing good.
I also hope you were anticipating what this channel is for. So, here it is:

I have devised a code-breaking competition for everyone in the TNB community,
and the reward for solving it is a total of 10,000 TNBC.

Here's the link: https://codearkive.pythonanywhere.com/

In order to take part in this competition, all you need to do is be a community member of TNB.
Please make sure you go through the rules before starting:
http://codearkive.pythonanywhere.com/rules/

The competition aims to be a healthy one and wishes to promote active discussions among the members of the community, educate you, as well as to invite people who are interested in code-breaking, cryptocurrencies or programming.

This will give us a chance to promote our digital currency to communities outside the general ones.

As the rules say, you can attempt this competition individually or in groups,
and I personally promote that the entire community come together to try and reach the end.

If the competition becomes a success,
I may organize more in the future.

Some Background:
Recently, I completed a year with the TNB community,
and in order to celebrate that,
I wanted to do a giveaway.
I had originally decided to give away 2k coins, but the general idea of doing a simple giveaway was not good enough.
That was when a crazy idea occurred to me.
How about I give everyone a chance to win the giveaway prize?
This is how I ended up organizing this event.
When I discussed it with Bucky, he liked my idea,
and was generous enough to add another 8k coins to the prize pool.
However, he does not know a thing about what I am doing, which means he will also be taking part in the competition.
I hope you like this approach and will actively take part in promoting TNB and solving the puzzle.

The competition will be open until the end of August,

but I am sure you guys will be able to solve it within a day or two.

I am looking forward to it.

With that, best wishes to everyone.

I will see you at the end!


Here begins the challenge

When navigating to the site

Site

Clicking on the getting started takes us to the following.

CodeArkive Puzzle-one

Here - we were given the quotation and question...

"I am the bard who penned it down"... "Who am I?"

To the right, it appears to be a grid of random letters.

Step 1 - Viewing the puzzle.

My first instinct was google "I am the bard who penned it down". I tried William Shakespeare as a guess to which the creator responded

Response

... Hmm - worth a try.

From there I tried submitting the form to see what the server response might be.

I tried filling in the answer as "bob" and trying inspect the network. The response seemed to be server-side rendered (and there was a JSON object being returned, so nothing to inspect there).


The next thought was to collect all the letters from the grid and count the occurrences of each letter.

which lead me to

All Letters

I tried googling famous bards and tried to cross-reference to the letters in the grid, but the closest bard that might be it could've been Taliesin, but it didn't use all the letters.

...🤔

At this point, I used the inspector and saw this interesting HTML comment.

<!-- https://imgur.com/TlsUFFl -->

Web Inspector


Step 2: Early win...

From there you're taken to

Clue-one

There you're presented with a message of Very Good and bunch of binary numbers.

01101001 01101101
01100111 01110101
01110010 00101111
00111001 01101101 
01011010 01110100 
00110001 01101111 
01010101
Enter fullscreen mode Exit fullscreen mode

I used those numbers and converted it to ASCII.

which gives us imgur/9mZt1oU


Step 3: Feeling lucky

Typing imgur/9mZt1oU gives me a google search, so navigating to imgur.com/9mZt1oU gives us the following image.

Step 3

At this point, I thought felt that if I were to type everything, I'd go a bit frustrated, so I saved the image and uploaded it to a get characters from image google search.

After massaging the output (as the service bundled some of the numbers together).

I get the following:

01000100 01101001 01100100
00100000 01111001 01101111
01110101 00100000 01100001
01100011 01110100 01110101
01100001 01101100 01101100
01111001 00100000 01110100
01101000 01101001 01101110
01101011 00100000 01101001
01110100 00100000 01110111
01101111 01110101 01101100
01100100 00100000 01100010
01100101 00100000 01110100
01101000 01101001 01110011
00100000 01100101 01100001
01110011 01111001 00111111
Enter fullscreen mode Exit fullscreen mode

From here I perform the same as before and convert the above binary to ascii.

Which gives Did you actually think it would be this easy?


Step 4: Confused

Confused, I thought that this was a clue or perhaps it was a taunt. I initially thought about that the image might've contained a clue, perhaps it contained embedded data. Which led me down Steganography.

I tried to install CryptoSteganography on my local machine but I don't typically use python for my day to day - so I reached out to the creator whether I should invest an hour or two debugging the installation.

To which they replied

You are thinking out of the box, but I couldn't go that far

People in the community are not all coders

Ok - hmmm, perhaps the above library wasn't necessary.
It was about this instance that I started talking about the process.

I tried the following google searches:

  • How to embed data into .png
  • png comments

I opened the image https://i.imgur.com/9mZt1oU.png as a text file. Skimming through the file, it didn't seem obvious that there was any information.

It was getting to (hour = H) H+3 and I started noticing in the channel that people were replying with Apple Emojis. 🍎. I thought that might've been a clue and saw that the text file had ascii  and thought that might've been a clue. I stared at the jumbled text file for the next couple of hours.

I thought about adjusting the image (hue/contrast/brightness) to perhaps see if there was a watermark hidden in image itself... Close but no cigar.

Adjusting Hue

Adjusting Hue

It was getting late and was trying to think of creative ideas.


Step 5: the following morning.

The breakthrough was that the realisation that there was dead-ends 🤦🏻‍♂️.

I noticed in the channel a discussion

Tyler:

the last line in the first image is name = "dcodeMe" id , then a string of ascii numbers that come back as unlstd_yt/fR1rf5
no idea what this is though
thought it might be some unlisted youtube video

FilterUnfiltered:

yes it is. It leads to a 2 minute fire video
which has a hidden image and morse code in it
yet to figure out what is meant by the morse code

hussu:

morse code? where?

I looked at the svg on the puzzle page

There at the last section of svg is

<path xmlns="http://www.w3.org/2000/svg" name="dcodeME" id="117 110 108 115 116 100 095 121 116 047 102 082 049 114 102 053 101 099 122 083 119"/>
Enter fullscreen mode Exit fullscreen mode

This section i skipped as hussu has already found the unlisted video

Youtube Video

Step 6: Getting somewhere.

There was discussion about morsecode in the video. I'm not familiar with morsecode, but wanted to identify what the sounds were within the video.

I added . and - just to separate the sounds.

-..
-.
-.-
-..-
..--
-.
--
.-..
Enter fullscreen mode Exit fullscreen mode

If I converted the above morsecode, I got DNKXÜNML from this convertor.

I had a hunch that perhaps my conversion of morse code was incorrect, so I inverted the morse code to the following

.--
.-
.-.
.--.
--..
.-
..
-.--
Enter fullscreen mode Exit fullscreen mode

This yielded the following text WARPZAIY.

At this moment I wasn't sure what these two keys meant.


Step 7: Blaise de Vigenère

KakashiHat4ke:

What does this "Blaise de Vigenère" guy has to do with the morse code?
He makes a cameo at 1:09

Cameo

At this time:
There was also talk about converting the morse to binary by KakashiHat4ke

100 10 101 1001 0011 10 11 0100
Enter fullscreen mode Exit fullscreen mode

If you joined the binary you can get three eight-digit binaries

10010101 10010011 10110100
Enter fullscreen mode Exit fullscreen mode

Converting these binaries to decimal yields 149 147 180

I tried converting to ascii, but that doesn't give me anything to work,
converting to decimal and doing a lookup?

The first search result I found was
https://theasciicode.com.ar/extended-ascii-code/letter-o-grave-accent-lowercase-ascii-code-149.html

149: ò
147: ô
180: ┤
Enter fullscreen mode Exit fullscreen mode

This didn't seem right to me, so ended up trying to look elsewhere.

Step 8: Hussu's hint

Hussu:

we might need to decrypt the message somewhere usnig the autoclave-cipher algorithm
https://www.dcode.fr/autoclave-cipher
theory: the old guy in fire video developed this algorithm
When you reach the end, you will be able to tell what the square is. Niekon

I tried using the letters in the original square

e t f d j 
t p c k n
v a d s a 
r n a m t
k e l s u
Enter fullscreen mode Exit fullscreen mode

and pasted DNKXÜNML as the keyword and it yielded

b g v g p
g d r j h
a u o m x
a e t m z
w s o s q
Enter fullscreen mode Exit fullscreen mode

This seemed wrong to me. (there's no obvious clue from this).


I tried WARPZAIY as the keyword,

i t o o k
t h e c u
h m t z t
n l g f h
r f s f j
Enter fullscreen mode Exit fullscreen mode

This seemed agonisingly close, but not quite...


I looked up the Blaise de Vigenère

So it turns out the algorithm that he's famous for is the Vigenère cipher

Vigenère cipher
The method of encryption known as the "Vigenère cipher" was misattributed to Blaise de Vigenère in the 19th century and was in fact first described by Giovan Battista Bellaso in his 1553 book La cifra del. Sig. Giovan Battista Bellaso.(published in 1553[citation needed] Vigenère created a different, stronger autokey cipher in (1586). It differs from Bellaso's in several ways:

Bellaso used a "reciprocal table" of five alphabets; Vigenère used ten;
Bellaso's cipher was based on the first letter of the word; Vigenère used a letter agreed upon before communication.
Enter fullscreen mode Exit fullscreen mode

So it means that the hint https://www.dcode.fr/autoclave-cipher is incorrect...
We need the https://www.dcode.fr/vigenere-cipher


Step 9: Vigenere Cipher

using the letters

etfdjtpcknvadsarnamtkelzu
Enter fullscreen mode Exit fullscreen mode

it seems that if I try automatic detection - this yields a bunch of different ideas -
By using the passphrase WARPZAIY

it yields itooktheonelesstraveledby

...which made me think of The road not taken - which googled would result in The Road Not Taken

... which is written by poet Robert Frost.

When I submitted Robert Frost,

@Niekon asked me, "What does the square say @wakawaka?",
to which the answer is itooktheonelesstraveledby.


Conclusion:

It was a wild 30+ hours, and I've got to hand it to @niekon for creating such a wonderful and thought-out puzzle.

I'd like to conclude with some passing thoughts.

If you're thinking of participating in a brain-teaser/cipher cracking challenge, please take the following approaches.

  1. Document everything! (Your thoughts, theories...
    This becomes your memory storage as you investigate avenues.
    . )

  2. Google is your friend. (There's lots I don't know from heart, I don't know morse code, binary... I'd rather focus on making connections than trying to decipher an algorithm off the top of my head.)

  3. Be open about your theories you've tried. (I know as a competition, there's the drive to keep everything secret, but it helps to read and listen to what people are saying. If I didn't know early on that there were deadends, I'd still be at that deadend.)

  4. Take breaks, lots of breaks (When you're on a roll, adrenaline will be start to flow as you jump from one idea to another. It's important to take a break, like a walk, or perhaps distracting yourself with cooking, such that your subconscious mind can decide clearly in on how to proceed. For me if I hadn't slept properly, I wouldn't have been able to pick up on the clues from the discord server)

  5. Acknowledge and share the glory. (One thing I want to say is that, winning the prize money isn't the purpose of the journey, it's the fact that reaching that destination was aided by others openly discussing different theories. It's due to @hussu010 , @KakashiHat4ke and @Tyler talking with each other that I was able to eliminate alot of distractions.)

Thanks again to @hussu010 / @KakashiHat4ke and @Tyler for their input and for @Niekon for creating the puzzle. Thanks to @Bucky for starting TNBC and for contributing to the prize pool and to all the people who participated.

Ok that's all from me now, now its time for me to get some rest. Thanks all! 👋🏼.

Latest comments (2)

Collapse
 
jamessspanggg profile image
James Pang

Great sharing and congrats on winning!

Some comments may only be visible to logged-in visitors. Sign in to view all comments.