ARG:Clever Clever: Difference between revisions

From Heartbound Wiki
w>Steets
(Revert vandalism.)
 
m (1 revision imported: Importing ARG pages)
(No difference)

Revision as of 14:52, 5 October 2024

Clever Clever was reached by solving Stopwatch, which led us to the page https://www.gopiratesoftware.com/games/Heartbound/TheLightBeckons/TheTruthWillBeRevealed.

The page is called "Clever Clever" and it is completely dark. Its source code contains the following:

<body>
    <!-- -2 | ����H -->
    <!-- -1 | ŠˆŽ‚¤ -->
    <!-- +1 | ""# ) -->
    <!-- +2 | ����� -->
    <!-- WELL?: -->
</body>

Decoding

The text has some invalid characters, but the numbers give a clue on how to decode the characters: the values refer to the bit shift operation.

First, we need to convert the characters to their values on the ASCII table. You can do it online on this page. Or you can instead use Python, and call the function ord() on each character. The result will be:

Characters Decimal Binary
����H 20 16 28 4 72 00010100 00010000 00011100 00000100 01001000
ŠˆŽ‚¤ 138 136 142 130 164 10001010 10001000 10001110 10000010 10100100
""# ) 34 34 35 32 41 00100010 00100010 00100011 00100000 00101001
����� 17 17 17 16 20 00010001 00010001 00010001 00010000 00010100

The bit shift operation acts on the binary representation of an integer, it moves by a given amount the binary digits (bits) to either the left or the right. If a bit is moved to after the end of a value, the bit just disappear. If it is moved from the end of a value, it is considered zero. Typically a left bit shift is represented by the operator << , and a right bit shift by >> . For example:

  • Right shift by 1: 00010100 >> 1 = 00001010
  • Left shift by 2: 00010100 << 2 = 01010000

Note that it only makes sense to shift a value by a positive integer. A negative shift is typically undefined, but we might extrapolate things and consider it as shifting to the other direction. In our clues, the numbers to the left of the characters mean the amount to shift: a negative value -X means a shift to the right by X, while a positive value +X means a shift to the left by X.

Each of the character values in a line need to be shifted by the specified amount. The calculator on your computer or phone can probably do bit shifting, but you might need to change the calculator type to "programmer" in order to see the buttons for the bit shift operations. Or you can just use Python, remembering that the operators are << and >> . Either way, the results should be:

Characters Decimal Binary
����� 5 4 7 1 18 00000101 00000100 00000111 00000001 00010010
EDGAR 69 68 71 65 82 01000101 01000100 01000111 01000001 01010010
DDF@R 68 68 70 64 82 01000100 01000100 01000110 01000000 01010010
DDD@P 68 68 68 64 80 01000100 01000100 01000100 01000000 01010000

Note that we converted the results back to ASCII characters. You can do that online using this page, or in Python using the method .decode("ascii") of a bytes object.

The characters of the first line remain non-printable, however their decimal values can be converted using their English alphabet positions (A=1, B=2, ..., Z=26), which gives us the word EDGAR, that is the same word the decoded ASCII characters of the second line gives us. The meanings of the third and fourth line (DDF@R and DDD@P) are currently unknown (as of the writig of this page).

Python code

Before we move on with the puzzle, for reference's sake, here is the Python code that does all the aforementioned operations:

ciphertext = ("����H", "ŠˆŽ‚¤", "\"\"# )", "�����")
values = tuple( tuple(ord(char) for char in word) for word in ciphertext )
shift = (-2, -1, 1, 2)

for sft,val in zip(shift, values):
    # Convert the ciphertext to unsigned integer
    num = int.from_bytes(bytes(val), "big")
   
    # Bit shift the integer
    if sft < 0:
        num >>= -sft
    else:
        num <<= sft
   
    # Convert the integer back to bytes
    raw_bytes = num.to_bytes(5, "big")
    print(" ".join(bin(n)[2:].rjust(8, "0") for n in raw_bytes))
    print(tuple(raw_bytes))

    try:
        print(raw_bytes.decode("ascii"))
    except UnicodeDecodeError:
        print("FAIL")
   
    print()

Notice that the above code consider the 5 characters of each line as being all a single value, instead of 5 separate values. This does not make a difference in our case since the bits of value 1 never cross the byte boundaries.

Edgar

The name Edgar, in our case, appears to be a reference to the poet Edgar Allan Poe. In his short story The Gold-Bug he created a cipher, that when decoded gave the location of a treasure. That cipher does not appear to be of any use for us, but the idea of using a cipher combines with the theme of the ARG.

It is possible to ask OScar about Edgar, similarly as we already did back in the Ring Ring puzzle on Chapter 5. We need to connect using telnet to gopiratesoftware.com at port 666. If necessary, follow these steps to enable telnet on Windows (on Linux, it should be available by default). On the command line, connect using the command:

telnet gopiratesoftware.com 666

When he asks you a password, you can give any of the passwords you got at Tower Corp when playing Heartbound, including the word password itself. Then you can say EDGAR to him. This is how the interaction goes:

Welcome to Tower Corp!

Please Submit Password: password

Oh, it's you... :/
Got something to say to me, Newhire? ._.

Well?: EDGAR

Wait... who...? :?

TTKUTBAIPFYNTMLMAYANWWDTMDHBADYIHHFAIANOIADIAVOINIITTLGATWSOSIBAdwad
ISATROASTSAIHWMHGOGSHFYHTCTMFTTDWIWWIWOGCINGTWATCOGCINSOFTPWIATWSOSBAdwad

GET OFF MY NETWORK!!! D:

OScar gives us two ciphertexts ending with the lowercase characters dwad. The purpose of the uppercase characters is currently unknown, but dwad is the acronym for "A Dream Within a Dream", the name of a poem from Edgar Allan Poe:

A Dream Within a Dream
by Edgan Allan Poe

Take this kiss upon the brow!
And, in parting from you now,
Thus much let me avow —
You are not wrong, who deem
That my days have been a dream;
Yet if hope has flown away
In a night, or in a day,
In a vision, or in none,
Is it therefore the less gone?
All that we see or seem
Is but a dream within a dream.

I stand amid the roar
Of a surf-tormented shore,
And I hold within my hand
Grains of the golden sand —
How few! yet how they creep
Through my fingers to the deep,
While I weep — while I weep!
O God! Can I not grasp
Them with a tighter clasp?
O God! can I not save
One from the pitiless wave?
Is all that we see or seem
But a dream within a dream?

Also notice that if we get the first letters from each word of the poem, we get the strings that OScar gave us:

  • TTKUTBAIPFYNTMLMAYANWWDTMDHBADYIHHFAIANOIADIAVOINIITTLGATWSOSIBAdwad
  • ISATROASTSAIHWMHGOGSHFYHTCTMFTTDWIWWIWOGCINGTWATCOGCINSOFTPWIATWSOSBAdwad

This confirms that what we got is a reference to the poem. The solution is to add the term DreamWithinADream to the puzzle's URL, which brings us to the page: https://www.gopiratesoftware.com/games/Heartbound/TheLightBeckons/TheTruthWillBeRevealed/DreamWithinADream/.

Dream Within a Dream

The new page we got to is called "Spin Forever", and it is completely dark. Its source code has the comment , implying that the next puzzle is coming soon. Or is it?

There are still parts of the current puzzle that we do not know the purpose, that are the strings DDF@R and DDD@P. Maybe solving them leads to the actual answer, or maybe they are information needed for future steps.

The community is working hard on the puzzle! You can join the efforts or follow the latest developments on our Discord server. This page is going to be updated as soon new information becomes available, so please check back later.