• Home
  • About
    • Tulio Cruvinel Gomes | 0xNymerio photo

      Tulio Cruvinel Gomes | 0xNymerio

      Do you have Brio?

    • Learn More
    • Email
    • Twitter
    • LinkedIn
    • Github
    • CV
  • Posts
    • All Posts
    • All Tags
  • Projects

[CTF]-[ROOT-ME]-[CHALLENGES]-[CRYPTANALYSIS] - Shift Cipher

15 Mar 2022

Reading time ~1 minute

Enunciado

Index : keep on turning.

Shift Cipher

Nesse desafio foi fornecido o arquivo ch7.bin e ao olharmos seu conteúdo, recebemos um texto embaralhado. Pela quantidade de caracteres e pelos caracteres apresentados e baseado no nome do desafio, sabemos que é uma criptografia de mover o index a direita ou a esquerda, semelhante a cifra de cesar, mas ela não possuia esses outros tipos de caracteres quando foi elaborada (apenas a-zA-Z). A primeira vista, em vez de utilizar o alfabeto, aparenta ter utilizado a tabela ASCII como index, agora precisamos descobrir o valor de quantos caracteres foram movidos!

Texto Criptografado

Eu poderia ser maluco e mover manualmente até descobrir o valor ou realizar uma análise da cadeia dos caracteres e tentar encontrar um padrão para descobrir o valor atual da cifra, mas prefiro utilizar o Python pra realizar um brute force e manualmente inspecionar os resultados que façam sentido ao desafio.

Existem 8 bits em um byte de caractere, então adicionamos 1 bit a cada caractere para cada tentativa do bruteforce. Utilizei o código abaixo para: Carregar o arquivo e para cada caractere vamos adicionar o valor de 1 até 256, retornando o resultado em um array de bytes. Depois eu faço o decode de utilizando utf-8 apenas para facilitar a visualização, senão o bytesarray imprime ele mesmo em com o b” no inicio da string, o que nao é um problema, mas fica visualmente poluido pra nossa inspeção visual.

with open("ch7.bin","rb") as f:
    cifrado = f.read()
print(cifrado)

for i in range(256):
    a = (bytearray([(char+i) % 256 for char in cifrado]))
    print(a.decode('utf-8', 'ignore'))

Texto Criptografado

Precisamos mover o index em 246 ou -10, desafio bem elaborado, nada melhor que relembrar que o ASCII originalmente é 7-bits e estudar um pouco mais sobre temas como unicode/utf-8.



ctfrootmecryptanalysischallenge Share Tweet +1