Codificações, shift cipher, hashes brutos e criação de imagens usando python PIL. Solução de problemas com o r0ot-mi Cryto. Parte 1

imagem

Este artigo contém soluções para tarefas de codificação ASCII e de codificação UU destinadas à codificação, Hash Message Digest 5 e Hash SHA-2 - para encontrar a imagem inversa do hash, cifra Shift - cifra shift e Pixel Madness - para compor a imagem.

Informações Organizacionais
Especialmente para aqueles que desejam aprender algo novo e se desenvolver em qualquer uma das áreas de segurança da informação e da informática, escreverei e falarei sobre as seguintes categorias:

  • PWN;
  • criptografia (criptografia);
  • tecnologias de rede (rede);
  • reverso (engenharia reversa);
  • esteganografia (estegano);
  • pesquisa e exploração de vulnerabilidades na WEB.

Além disso, compartilharei minha experiência em análise forense de computadores, análise de malware e firmware, ataques a redes sem fio e redes locais, realização de protestos e explorações por escrito.

Para que você possa descobrir sobre novos artigos, software e outras informações, criei um canal no Telegram e um grupo para discutir quaisquer questões no campo da CID. Além disso, considerarei pessoalmente seus pedidos, perguntas, sugestões e recomendações pessoais e responderei a todos .

Todas as informações são fornecidas apenas para fins educacionais. O autor deste documento não se responsabiliza por nenhum dano causado a alguém como resultado do uso dos conhecimentos e métodos obtidos como resultado do estudo deste documento.

Codificação - ASCII


Vamos começar com o primeiro trabalho - Encoding-ASCII.

imagem

Passamos para a tarefa em si. Vemos uma sequência de 16 caracteres. A primeira suposição é um hexadecimal regular (todos os caracteres são apresentados na 16ª forma).

imagem

s = "4C6520666C6167206465206365206368616C6C656E6765206573743A203261633337363438316165353436636436383964356239313237356433323465" s.decode("hex") 

imagem

Nós obtemos a resposta e seguimos em frente.

Codificação - UU


imagem

Passamos para a tarefa em si. Mesmo apesar da dica no nome da tarefa, é fácil distinguir arquivos no UUE (codificação para transferência de arquivos contendo dados que não são de texto) - eles começam na linha:

 Begin_--_- 

imagem

 s = '''begin 644 root-me_challenge_uudeview B5F5R>2!S:6UP;&4@.RD*4$%34R`](%5,5%)!4TE-4$Q%"@`` ` end''' f = open('./uu.enc', 'w') f.write(s) f.close() import uu uu.decode('uu.enc', 'uu.dec') ans = open('uu.dec', 'r').read() 

imagem

Entregamos a bandeira.

Hash - Resumo da mensagem 5


imagem

Somos solicitados a encontrar o protótipo para o hash md5. Isso pode ser feito facilmente usando este site (https://md5decrypt.net/). Mas nós, para fins de treinamento, é claro, usamos hashcat. Para fazer isso, use os seguintes parâmetros e códigos:

  • -a 0 - pesquisa no dicionário;
  • -m 0 - tipo de hash MD5;
  • File.hash - um arquivo com um hash;
  • rockyou.txt - nosso dicionário;
  • --force - ignora erros.

imagem

Prosseguimos para a próxima tarefa.

Hash - SHA-2


imagem

Como resposta, você precisa fornecer o hash SHA1 a partir da imagem inversa desse hash. O fato é que esse é um personagem extra.

imagem

Exclua. Para determinar o algoritmo de hash, usamos o programa hashid.

imagem

Dos algoritmos apresentados, o SHA-256 mais provável. O Hashcat mostrou como resolver essa tarefa usando o hashcat, agora faremos isso usando este
site .

imagem

Resta tirar SHA-1 dessa linha.

 from hashlib import * sha1('4dM1n').hexdigest() 

imagem

Cifra de mudança


imagem

Bem, com o algoritmo de criptografia, eles nos ajudam. Na mesma cifra de César, apenas a mudança não ocorre no intervalo de zero ao comprimento do alfabeto, mas de acordo com todos os 256 valores possíveis de um byte. Escreveremos um programa que primeiro desloque cada caractere por 1, depois por 2, etc. até 255.

 s = open('ch7.bin', 'r').read() for x in range(255): “”.join( chr((ord(y) + x)%256 ) ) for y in s) 

imagem

Entre as linhas, encontramos a que contém a resposta.

imagem

Loucura de pixel


imagem

Nós recebemos várias expressões e, no final, eles dizem que 0 é branco e 1 é preto. Muito provavelmente, o resultado deve ser uma imagem. Suponho que na expressão você não precise se multiplicar, mas repetir o número necessário de vezes que um determinado caractere.

Você pode executar rapidamente uma expressão usando a função eval, mas primeiro você precisa alterar o formato 0x1 para '0' * 1.

 s = ''''0x3+1x1+0x1+0x1+0x7+1x2+0x15+1x1+0x8+1x1+0x8+1x1+0x1+1x1+0x1+1x1+0x1+1x1+0x1+1x1+0x3+1x1+0x1+1x1+0x3+1x1+0x1+1x4+0x2+1x1+0x25 '0x2+1x1+0x4+1x1+0x4+1x3+0x1+1x2+0x2+1x8+0x11+1x4+0x1+1x3+0x6+1x2+0x4+1x1+0x4+1x2+0x7+1x4+0x4+1x2+0x7+1x2+0x3+1x2+0x3 '0x3+1x1+0x2+1x1+0x2+1x1+0x11+1x2+0x2+1x3+0x7+1x1+0x4+1x2+0x2+1x2+0x7+1x1+0x6+1x1+0x2+1x1+0x4+1x3+0x1+1x1+0x4+1x1+0x2+1x1+0x2+1x1+0x3+1x1+0x2+1x3+0x2+1x2+0x3 '1x1+0x2+1x1+0x4+1x1+0x2+1x1+0x1+1x1+0x2+1x1+0x2+1x1+0x1+1x2+0x2+1x2+0x1+1x2+0x3+1x1+0x3+1x1+0x2+1x2+0x1+1x3+0x3+1x1+0x2+1x1+0x4+1x2+0x1+1x1+0x4+1x1+0x3+1x2+0x12+1x2+0x1+1x1+0x3+1x7+0x3 '0x3+1x1+0x7+1x1+0x1+1x1+0x4+1x1+0x2+1x2+0x2+1x2+0x4+1x1+0x2+1x1+0x1+1x2+0x1+1x8+0x1+1x1+0x4+1x1+0x5+1x1+0x3+1x2+0x2+1x1+0x1+1x2+0x2+1x1+0x3+1x2+0x9+1x1+0x1+1x2+0x2+1x3+0x2+1x1 '0x7+1x1+0x4+1x1+0x4+1x1+0x1+1x1+0x1+1x7+0x3+1x1+0x1+1x2+0x3+1x1+0x1+1x6+0x1+1x1+0x3+1x1+0x2+1x1+0x14+1x2+0x8+1x1+0x10+1x2+0x3+1x2+0x1+1x1+0x1 '0x6+1x5+0x4+1x1+0x7+1x1+0x2+1x1+0x3+1x2+0x4+1x1+0x8+1x1+0x3+1x2+0x1+1x2+0x3+1x1+0x8+1x1+0x2+1x2+0x1+1x1+0x3+1x7+0x5+1x2+0x2+1x1+0x2+1x2+0x3 '0x1+1x1+0x2+1x1+0x1+1x2+0x5+1x1+0x6+1x2+0x3+1x1+0x2+1x1+0x1+1x2+0x20+1x8+0x1+1x1+0x1+1x1+0x4+1x2+0x3+1x1+0x2+1x2+0x3+1x2+0x7+1x2+0x3+1x2+0x4 '0x2+1x1+0x3+1x5+0x5+1x2+0x7+1x1+0x4+1x2+0x2+1x1+0x2+1x2+0x1+1x1+0x3+1x1+0x6+1x2+0x2+1x2+0x3+1x2+0x2+1x3+0x1+1x1+0x6+1x3+0x3+1x5+0x3+1x1+0x4+1x1+0x5 '0x4+1x2+0x3+1x2+0x3+1x1+0x5+1x2+0x2+1x1+0x1+1x1+0x1+1x1+0x1+1x2+0x9+1x1+0x3+1x1+0x2+1x1+0x1+1x1+0x2+1x1+0x1+1x2+0x2+1x1+0x2+1x1+0x1+1x1+0x4+1x3+0x1+1x1+0x2+1x2+0x3+1x2+0x3+1x1+0x5+1x1+0x4+1x1+0x2 '0x6+1x5+0x4+1x1+0x1+1x1+0x2+1x2+0x6+1x1+0x1+1x7+0x4+1x3+0x3+1x1+0x4+1x1+0x2+1x2+0x4+1x1+0x6+1x1+0x6+1x8+0x3+1x1+0x5+1x1+0x7 '0x2+1x1+0x3+1x6+0x4+1x1+0x1+1x3+0x4+1x1+0x2+1x2+0x4+1x1+0x5+1x1+0x2+1x1+0x3+1x2+0x3+1x1+0x2+1x3+0x1+1x1+0x2+1x2+0x3+1x3+0x2+1x3+0x9+1x1+0x4+1x2+0x7+1x2''' s = s.replace("x", "'*").replace("+","+'") examp = s.split('\n') bits = [eval(i) for i in examp] print(bits) 

imagem

Agora crie uma imagem usando a biblioteca PIL. Vamos adicionar o código a seguir, editá-lo e abrir a imagem resultante.

 from PIL import Image width, height = len(bits[0]), len(bits) pic = Image.new('RGB', (width, height)) pix = pic.load() for i in range(height): for j in range(width): pix[j,i] = ( bits[i][j]=='0' and (255,255,255) or (0,0,0) ) pic.save('pixel.png') 

imagem

Aumentei o zoom na imagem e li a palavra SOLUÇÃO. De fato, há mais stegs do que criptas. Este artigo será interessante, provavelmente, apenas para iniciantes.

Mais e mais complicado ... Você pode se juntar a nós no Telegram . Lá, você pode propor seus próprios tópicos e votar na escolha de tópicos para os seguintes artigos.

Source: https://habr.com/ru/post/pt472628/


All Articles