Siteswapping: solução do crypto puzzle

Arth
14 min readJan 28, 2020

Siteswapping é o puzzle criado por Lucas Abduch que mistura criptomoedas e malabarismo. O puzzle inicia em um vídeo postado no seu canal do YouTube:

Durante quase 4 minutos, o vídeo mostra uma sequência de clipes onde Lucas realiza malabares com bolas de cores variadas. Não é um formato que você encontraria em qualquer outro puzzle com criptomoedas, mas claramente será necessário decifrar essa sequência para obter o prêmio de 100.000 LBC e um Axie místico.

Nesse momento, podemos tentar resolver o código no vídeo diretamente, ou buscar mais informações sobre o contexto.

Como é explicado no vídeo, a solução final é composta de uma chave privada e ainda um arquivo default_wallet, logo o puzzle pode conter mais elementos e etapas além do que foi apresentado.

Entendendo mais sobre o projeto, fica evidente que temos um amplo escopo para explorar em suas mídias sociais, como Facebook, Instagram, Twitter e YouTube, além dos patrocinadores LBRY e Axie Infinity.

Começando pelos “arredores” do vídeo, vemos que a descrição nos convida a assistir o mesmo vídeo na plataforma LBRY. Além desta versão ser em inglês, podemos notar outras diferenças sutis. Alguns caracteres aparecem e desaparecem rapidamente no canto inferior esquerdo do vídeo:

Concatenando todos os caracteres, forma-se a string p/Bwwr6OWgMh2. Buscando este termo revela que ele é um link do Instagram para a seguinte postagem do Malabarize-se:

Podemos ver ainda que o post está marcado com algumas hashtags “estranhas”, como #hint e #whitesplit. Após verificar que a imagem está limpa de esteganografia básica, constatamos que ela possui 9 miniaturas de vídeos do mesmo canal do vídeo principal, mais especificamente, na playlist de vídeos-arte.

Na descrição de cada um dos 9 vídeos indicados, é possível notar um trecho curioso iniciado com “~”:

Embora já seja possível identificar que são fragmentos de texto rotacionado, voltemos ao vídeo principal no LBRY. Na descrição do vídeo, há um link que parece o que está presente na maioria dos outros vídeos para redirecionar à newsletter do canal, mas com uma pequena diferença:

Apesar de ser uma URL relativamente oculta, após ser encontrada foi bastante compartilhada. Ela leva a uma imagem publicada no spee.ch intitulada @firstdoorhint:1/psyloASAP.jpeg:

Dessa vez, a inspeção da imagem revela um arquivo .ZIP com outras duas imagens: redstroke.png e yellowstroke.png.

A logo idêntica no canto superior direito e as direções em uma matriz 3x3 evidenciam que essas imagens se encaixam perfeitamente com a grade de vídeos:

A partir disso, podemos concatenar os fragmentos de texto seguindo os caminhos indicados nas imagens vermelha e amarela. Mais ainda, faremos isso considerando o lado esquerdo do separador “|” para o caminho vermelho, e o lado direito para o amarelo nos 9 fragmentos, conforme a instrução das imagens:

TRDQ:khedhrzintqmdx (lado esquerdo, red stroke)
SDVVZRUG:78fkdudfwhuv,Vwhidq’vidyrulwhsxccoh (lado direito, yellow stroke)

O texto está cifrado. Podemos começar tentando convertê-lo com um método simples, como a cifra de César, utilizando uma ferramenta como essa:

Deciframos o texto do caminho vermelho rotacionando 1 posição para a direita no alfabeto (+1), enquanto no caminho amarelo a rotação é de 23 posições para a direita, ou o equivalente de 3 posições para a esquerda (-3), o que se relaciona com os valores 1 e 3 nas imagens vermelha e amarela, respectivamente.

O resultado são credenciais: um nome de usuário (lifeisajourney) e uma dica de senha (puzzle favorito do Stefan) com o número de caracteres. Devemos nos atentar ao fato de que aqui existem duas possibilidades plausíveis para o número de caracteres da senha: 78 caso seja o número original, ou 45 se o número também for rotacionado.

Voltando à imagem psyloASAP.jpeg que esconde o arquivo .ZIP, tentaremos encontrar algo relevante em relação ao seu nome ou conteúdo. Buscando a imagem no Google, descobrimos que ela está relacionada a cogumelos, mais especificamente, à psilocibina e o seu efeito no cérebro. Nos primeiros resultados encontramos um vídeo do YouTube junto de artigos e livro contendo a imagem original:

Embora inicialmente o vídeo possa não parecer relevante, percebemos que o nome do canal é AsapSCIENCE, o que se relaciona ao “ASAP” no nome da imagem. O único lugar que poderia ter algo escondido é a seção de comentários. Como o vídeo possui mais de 6 mil comentários, podemos utilizar esta ferramenta para encontrar alguma coisa postada pelo Lucas:

Os trechos em maiúsculo são looking inside e red plus. Enquanto a primeira pode se referir a “olhar dentro da imagem” para descobrir o arquivo .ZIP, ainda não sabemos ao certo o que poderia significar “red plus”. Sem outras trilhas viáveis para seguir, vamos dar nosso melhor para desvendar a parte principal do puzzle.

A primeira porta

Após dividir o vídeo principal de malabarismo em uma sequência de 49 clipes, precisamos entender como convertê-los para algo inteligível. A princípio, devido à ignorância, imaginamos que as variáveis são apenas as cores das bolas (branco, roxo, amarelo, vermelho, laranja e transparente) e a quantidade de bolas que pode variar entre 1, 3, 4 e 5.

Mas é muito mais complexo que isso: como o próprio nome do puzzle indica, para solucioná-lo nós devemos aprender siteswaps, também conhecido como notação de Cambridge, que descreve os padrões de malabares em relação ao tempo de lançamento, altura e a mão para a qual o arremesso é feito.

Essa etapa consiste de um trabalhoso processo manual de converter cada clipe para um valor numérico associado à sua possível notação de malabarismo. Após entender a lógica do siteswap, inicialmente podemos organizar um conjunto de notações possíveis de acordo com a nossa interpretação.

Em seguida, podemos refinar os resultados comparando os clipes com vídeos de tutoriais ou simuladores de siteswaps para cada notação específica.

Para ficar ainda melhor, ao baixar o arquivo .MP4 do LBRY e examiná-lo como um arquivo de texto, podemos encontrar uma série de metadados sobre o vídeo publicado, incluindo o nome dos clipes utilizados:

Cada clipe parece ter sido cortado e utilizado em momentos diferentes do vídeo. Apesar do formato relativamente ofuscado inviabilizar uma recuperação precisa dos tempos originais dos clipes, a exposição dos nomes já é bastante útil para determinar quais notações são válidas na nossa conversão:

531 522 534 53
53 534
6451 7531
6x4
5b cascade rev casc
mills mess 441
4b peito e millsmess
423
3b impro roxas
3b impro vermelhas
3b impro brancas
3b impro amarelas
1b amarela matrix
1 acri
2 acri

Podemos confirmar que apenas as bolas laranjas possuem uma notação “adequada”. Como o próprio nome dos clipes indica, as outras cores são improvisos, e a maioria ainda utiliza a mesma quantidade de 3 bolas (com exceção de “1b amarela matrix”), portanto a única característica relevante deve ser a cor. Isso também casa com o início do vídeo, que remete ao fato do laranja ter uma finalidade diferente das outras cores:

Resta a dúvida do que seriam as bolas transparentes, ou como apontado nos metadados, de acrílico. A bola de acrílico individual aparece em 3 momentos do vídeo, enquanto um par de bolas de acrílico surge ao final, antes da última sequência de bolas coloridas:

Podemos presumir que essa bola é algum tipo de marcador e também possui uma função distinta das outras bolas.

Finalmente, vamos transcrever o que temos:

Substituindo os laranjas pelo respectivo siteswap:

A essa altura, é necessário que você já tenha tido algumas “epifanias” observando os seguintes detalhes:

  • O padrão alternado do laranja com as outras cores;
  • O laranja sempre começa e termina todas as sequências;
  • Se as outras cores não podem ser convertidas para números, o que elas poderiam representar?
  • white split” e “red plus”? Por que “rotação negativa” no caminho do yellow stroke?

Cruzando todas as informações, deduzimos que as outras cores representam as operações matemáticas básicas (divisão, multiplicação, subtração e adição), onde os siteswaps do laranja são os operandos.

E o acrílico?

Aqui precisamos ter outra “epifania”:

  • Temos um usuário e uma dica de senha. Onde isso poderia ser inserido? A esteganografia só requer senha;
  • Na imagem postada no spee.ch, a URI menciona uma “primeira porta”;
  • Esse puzzle parece estar longe de terminar… ainda falta “aparecer” uma chave privada e um arquivo de carteira. Como seria possível obter “mais material” para prosseguir?
  • Dica no Discord: Lucas está gastando $5 para cada mês que não resolvemos o puzzle.

Se você está familiarizado com IPv4 e VPS, já deve ter entendido que a primeira porta é um IP. O acrílico é simplesmente o divisor de ponto de cada um dos 4 valores numéricos do IP (octetos), enquanto o último separador com 2 bolas de acrílico representa o símbolo de dois pontos “:”, que indica a porta do IP a ser utilizada.

Mesmo sabendo que a primeira porta é um IP, ainda poderia ser difícil encontrar e acessar o endereço correto. Primeiro devemos assumir que a precedência dos operadores é a ordem que eles aparecem. Por exemplo, para a sequência 441 – 4 + 3 / 4 a divisão deve ser executada por último, logo, para obter o mesmo resultado da expressão no computador ou na calculadora, é necessário usar parênteses.

Além disso, devemos substituir a notação 6x4 pelo resultado da multiplicação (24).

Havia 3 maneiras de determinar qual operador corresponde a cada cor.

A primeira estava logo no início do vídeo, mas provavelmente ninguém conseguiu notar isso, assim como eu também não tinha percebido:

A segunda forma é pelas dicas espalhadas ao longo do puzzle:

  • Branco: #whitesplit;
  • Vermelho: RED PLUS e +1 na cifra de César;
  • Amarelo: -3 na cifra de César;
  • Roxo: “x” no próprio nome, e dica no Discord (padrão aos 0:10 é um “X” desenhado no ar).

O último método é por força bruta. Permutando os operadores 4 a 4, temos 24 possibilidades:

Só existe uma combinação que resulta em valores inteiros, positivos e menores que 256.

Para completar, a dica mais poderosa que foi dada pelo Discord no começo de 2020: de que a porta do IP é a 22. Ela não apenas apontava para a solução de um IP, como consolidava uma das equações com 2 operadores (5 x 5 – 3 = 22), e ainda reforçava que o VPS provavelmente deveria ser acessado por meio de SSH, e não por uma página HTTP no navegador.

Senha da primeira porta

Depois de encontrarmos a primeira porta, podemos começar a testar senhas com base na dica obtida: puzzle favorito do Stefan, com 78 ou 45 caracteres, dependendo se a rotação da cifra também for aplicada no número.

A referência nos metadados, a menção nos agradecimentos do vídeo principal, ou uma pesquisa rápida indicam que se trata de Stefan Sing:

Pela quantidade de referências, também podemos constatar facilmente que Tangram, um dos principais shows do Stefan, é o seu “puzzle favorito”. Resta encontrar algo relacionado com um número válido de caracteres.

Vale notar que o vídeo principal contém exatamente 45 clipes com bolas coloridas (sem contar as de acrílico), mas é apenas uma infeliz coincidência.

No canal do Stefan, podemos encontrar um vídeo com sua apresentação de Tangram. Neste vídeo, vemos 2 comentários do Lucas, onde o mais recente parece fazer mais sentido em relação ao período de criação do puzzle e pode estar relacionado:

Com um pouco de “cogumelos”, descobrimos que ao remover os espaços e símbolos especiais, o texto resultante apresenta exatamente 45 caracteres:

PurepoetryReallynicetowatchitagainafter6years

Com esta senha, finalmente conseguimos entrar em lifeisajourney@95.179.186.110 por SSH!

Bem-vind@ à primeira porta.

Você não precisa de acesso root.
Tudo o que está aqui volta a ser como era antes de tempos em tempos.
Você não precisa se preocupar.
Tudo que você precisa está aqui e agora.

Boa sorte.

Segunda porta

Uma vez dentro da primeira porta, encontramos uma pasta denominada seconddoor com algumas imagens e um arquivo .RAR oculto (iniciado com “.”).

Após transferir os arquivos, podemos verificar que todas as imagens estão limpas de esteganografia. O arquivo .RAR está protegido por senha, inclusive com o cabeçalho criptografado, impossibilitando visualizar seu conteúdo. Podemos deduzir que o próximo passo é descobrir a senha, possivelmente utilizando o nome dos arquivos e o conteúdo das imagens como dica.

O nome #14mar2018 pode envolver 2 dicas ao mesmo tempo: a data e uma hashtag. Buscando sobre 14 de Março de 2018, o que salta aos olhos é a morte de 2 pessoas famosas: Stephen Hawking e Marielle Franco. O significado das imagens parece ser ambíguo: de um lado podem se referir às pessoas que faleceram, como um gesto de homenagem e um pedido de lembrança; por outro elas parecem estar conectadas a conteúdos de filosofia.

Aqui temos várias opções: podemos combinar as informações na senha, ou tentar trabalhar com cada informação de forma isolada. Parece razoável supor que a senha está relacionada apenas a Hawking, devido à imagem do espaço com os astros (remember.jpg). Ao mesmo tempo, Marielle é uma personagem bastante relevante no cenário político brasileiro, e podemos inclusive encontrar algumas menções suas nas mídias sociais do Lucas, excluindo a possibilidade de ser uma coincidência.

Seguindo a dica do nome do arquivo .RAR, podemos tentar encontrar hashtags similares relacionadas à Stephen ou Marielle utilizando este site. Enquanto Hawking não retorna muitos resultados, Marielle possui uma série de hashtags:

A segunda hashtag #mariellepresente abre o arquivo .RAR com sucesso.

Outra maneira de encontrar a senha seria visitando as postagens mais antigas nos perfis, afinal não há maneira mais efetiva de lembrar o que aconteceu naquele dia do que “voltando no tempo”.

Terceira porta

Dentro do arquivo .RAR encontramos uma mensagem de texto:

It's been a long time you don't come for a tea!
email me at "theonlyshortcakethatcanhealyou""firstfireant#"@protonmail.com
and tell me your favorite tea flavour,
I'll make sure to have everything organize once you arrive!

Esta parte do puzzle é claramente sobre Axie Infinity. Através do marketplace, podemos encontrar as respostas para formar o endereço do ProtonMail. Só existe um tipo de shortcake:

Existem apenas 27 Axies com a parte Fire Ant. Podemos ordená-los de acordo com o seu ID para descobrir o primeiro que veio ao jogo:

É o Axie “Lucky Seven” de ID #7. Assim, inicialmente, presumimos que o email é strawberry7@protonmail.com, mas não há resposta. Podemos enviar um email utilizando o ID dos outros 26 Axies para confirmar, e receberemos uma resposta automática para cada um avisando que o email não existe:

Porém, testando os emails strawberry6 e strawberry8 verificamos que eles também existem, logo, talvez precisamos tentar algumas variações mais específicas de strawberry7. E de fato, eventualmente recebemos uma resposta de strawberryshortcake7@protonmail.com:

Última Lua

Recebemos a imagem lastmoon.JPG, outro arquivo .RAR com senha e um texto em binário.

01101000 01101001 00000000 00000000 00000000
00110101 00101110 01000110 01000100 00110010
00110110 01000011 01000101 00110000 00110001
00110010 01000001 00110100 00110010 01000110
01000011 01000101 00110011 00110001 01110111
01101001 01100110 01100101 00100000 01111010
01100101 01110010 01101111 00100000 01111010
01101111 01101111 00110110 00110100 00110101
00110001 00101110 01000110 01000010 01000010
00110001 00110010 00110100 01000100 01000010
01000010 00110100 01000010 00110001 00110101
00110010 00111000 01000010 00110110 01111000
00110100 01100001 01100011 01101001 01100100
00100000 01100011 01110101 01110010 01110110
01100101 00100000 01101010 01110101 01100111
01100111 01101100 01101001 01101110 01100111
00110101 00110010 00110010 00101110 00110100
00110001 00111000 00110111 00111000 00110111
00110100 00110010 00110011 00110110 00110100
01000100 00110100 00110000 01000010 00110001
00110100 01100100 01100001 01101101 01110000
00100000 01101111 01100010 01100101 01111001
00100000 01100100 01101001 01100111 01101001
01110100 01100001 01101100 00110101 00110011
00110001 00101110 00110110 00110100 00110010
00110011 01000010 00111001 01000011 00110101
01000010 01000101 00111001 00110000 00110000
00110000 00110101 01000100 00110111 00110101
00110011 00110001 01110011 01101111 01110101
01110010 01100011 01100101 00100000 01101101
01100101 01100100 01101001 01100001 00100000
01110011 01100001 01110100 01101111 01110011

Convertendo os bytes para ASCII, obtemos:

hi 5.FD26CE012A42FCE31wife zero zoo6451.FBB124DBB4B1528B6x4acid curve juggling522.41878742364D40B14damp obey digital531.6423B9C5BE90005D7531source media satos

Podemos observar que o texto contém uma mistura de notações de malabarismo, partes de chave privada em hexadecimal, e palavras. Ficamos imediatamente tentados a juntar os fragmentos da chave privada, mas ela deve possuir 64 caracteres para formar uma sequência válida, e cada parte começando depois do ponto tem um pouco mais de 16 caracteres.

Olhando mais atentamente, percebemos que existe sempre outra notação de malabarismo separando uma parte de chave privada e uma parte com 3 palavras. Podemos identificar que o seguinte padrão é repetido 4 vezes em sequência:

[siteswap com ponto] [16 hex chars] [siteswap sem ponto] [3 palavras]
5. | FD26CE012A42FCE3 | 1 | wife zero zoo
6451. | FBB124DBB4B1528B | 6x4 | acid curve juggling
522. | 41878742364D40B1 | 4 | damp obey digital
531. | 6423B9C5BE90005D | 7531 | source media satos

As notações parecem familiares?

Todos estes siteswaps foram executados no vídeo principal… Porém, não nessa ordem.

As notações à esquerda do hexadecimal aparecem em sequência na segunda parte do IP:

6451.            5.               531.             522.
FBB124DBB4B1528B FD26CE012A42FCE3 6423B9C5BE90005D 41878742364D40B1

A chave privada FBB124DBB4B1528BFD26CE012A42FCE36423B9C5BE90005D41878742364D40B1 gera o endereço Ethereum contendo o prêmio do Axie!

Aplicando a mesma lógica para os conjuntos de palavras, as notações aparecem na primeira parte do IP até o início da segunda parte:

6x4                  4                  1              7531
acid curve juggling damp obey digital wife zero zoo source media satos

A sequência correta de palavras provavelmente é a senha do último arquivo .RAR, portanto já podemos começar a testar possíveis senhas. Se prestarmos atenção, a maioria das palavras fazem parte da BIP39 wordlist, com exceção de juggling e satos, apesar que a senha aceita “qualquer coisa”, mas satos provavelmente deve ser substituído por satoshi que é uma palavra válida, e lembrando que Satoshi também está nos agradecimentos do vídeo.

Seguindo a tradição do puzzle de evitar espaços, finalmente conseguimos abrir o último .RAR com a senha:

acidcurvejugglingdampobeydigitalwifezerozoosourcemediasatoshi

Dentro, o arquivo default_wallet permitindo acessar o último prêmio de 100.000 LBC!

Obrigado por ler até aqui! Agradeço imensamente ao Lucas por esse puzzle maravilhoso, foi um prazer indescritível ter participado disso!

Parabéns a todos que participaram e boa sorte na próxima! :)

--

--