Codificaciones, cifrado de turno, hashes brutas y creación de imágenes con PIL python. Resolución de problemas con r0ot-mi Cryto. Parte 1

imagen

Este artículo contiene soluciones de tareas de codificación ASCII y codificación UU destinadas a la codificación, Hash Message Digest 5 y Hash SHA-2, para encontrar la imagen inversa del hash, Shift Cipher, shift Cipher y Pixel Madness, para componer la imagen.

Información organizacional
Especialmente para aquellos que desean aprender algo nuevo y desarrollarse en cualquiera de las áreas de información y seguridad informática, escribiré y hablaré sobre las siguientes categorías:

  • PWN;
  • criptografía (criptografía);
  • tecnologías de red (Red);
  • inversa (ingeniería inversa);
  • esteganografía (Stegano);
  • búsqueda y explotación de vulnerabilidades WEB.

Además de esto, compartiré mi experiencia en informática forense, análisis de malware y firmware, ataques a redes inalámbricas y redes de área local, realización de pentests y escritura de exploits.

Para que pueda conocer nuevos artículos, software y otra información, creé un canal en Telegram y un grupo para discutir cualquier problema en el campo de ICD. Además, consideraré personalmente sus solicitudes personales, preguntas, sugerencias y recomendaciones personalmente y responderé a todos .

Toda la información se proporciona solo con fines educativos. El autor de este documento no tiene ninguna responsabilidad por los daños causados ​​a alguien como resultado del uso de los conocimientos y métodos obtenidos como resultado de estudiar este documento.

Codificación - ASCII


Comencemos con el primer trabajo: codificación-ASCII.

imagen

Pasamos a la tarea misma. Vemos una secuencia de 16 caracteres. La primera suposición es un hexadecimal regular (todos los caracteres se presentan en la 16ª forma).

imagen

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

imagen

Obtenemos la respuesta y seguimos adelante.

Codificación - UU


imagen

Pasamos a la tarea misma. Incluso a pesar de la sugerencia en el nombre de la tarea, es fácil distinguir archivos en UUE (codificación para transferir archivos que contienen datos que no son de texto): comienzan desde la línea:

 Begin_--_- 

imagen

 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() 

imagen

Entregamos la bandera.

Hash - Resumen de mensaje 5


imagen

Se nos pide que encontremos el prototipo para el hash md5. Esto se puede hacer fácilmente usando este sitio (https://md5decrypt.net/). Pero nosotros, para fines de capacitación, por supuesto, usamos hashcat. Para hacer esto, use los siguientes parámetros y códigos:

  • -a 0: busca en el diccionario;
  • -m 0 - tipo hash MD5;
  • File.hash: un archivo con un hash;
  • rockyou.txt - nuestro diccionario;
  • --force - ignora los errores.

imagen

Pasamos a la siguiente tarea.

Hash - SHA-2


imagen

Como respuesta, debe proporcionar el hash SHA1 de la imagen inversa de este hash. El hecho es que este es un personaje extra.

imagen

Eliminarlo Para determinar el algoritmo de hash, utilizamos el programa hashid.

imagen

De los algoritmos presentados, el más probable SHA-256. Hashcat mostró cómo resolver tal tarea usando hashcat, ahora lo haremos usando esto
sitio .

imagen

Queda por tomar SHA-1 de esta línea.

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

imagen

Cifrado de cambio


imagen

Bueno, con el algoritmo de cifrado, nos ayudan. El mismo Caesar Cipher, solo el cambio no ocurre en el rango de cero a la longitud del alfabeto, sino de acuerdo con todos los 256 valores posibles de un byte. Escribiremos un programa que primero cambie cada carácter por 1, luego por 2, etc. hasta 255.

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

imagen

Entre las líneas encontramos la que contiene la respuesta.

imagen

Pixel Madness


imagen

Se nos dan varias expresiones, y al final dicen que 0 es blanco y 1 es negro. Lo más probable es que el resultado sea una imagen. Supongo que en la expresión no necesitas multiplicar, sino repetir el número requerido de veces un cierto carácter.

Puede ejecutar rápidamente una expresión usando la función eval, pero primero debe cambiar el formato 0x1 a '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) 

imagen

Ahora cree una imagen usando la biblioteca PIL. Agreguemos el siguiente código, edítelo y abra la imagen 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') 

imagen

Acerqué la imagen, leí la palabra SOLUCIÓN. De hecho, hay más estrategias que criptas. Este artículo será interesante, muy probablemente, solo para principiantes.

Más y más complicado ... Puedes unirte a nosotros en Telegram . Allí puede proponer sus propios temas y votar sobre la elección de los temas para los siguientes artículos.

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


All Articles