Encodages, chiffrement par décalage, hachages bruts et création d'images à l'aide de Python PIL. Résolution de problèmes avec r0ot-mi Cryto. Partie 1

image

Cet article contient des solutions de tâches d'encodage ASCII et d'encodage UU visant à l'encodage, Hash Message Digest 5 et Hash SHA-2 - pour trouver l'image inverse du hachage, Shift cipher - shift cipher et Pixel Madness - pour composer l'image.

Information organisationnelle
Surtout pour ceux qui veulent apprendre quelque chose de nouveau et se développer dans l'un des domaines de l'information et de la sécurité informatique, j'écrirai et parlerai des catégories suivantes:

  • PWN;
  • cryptographie (Crypto);
  • technologies de réseau (réseau);
  • reverse (Reverse Engineering);
  • stéganographie (Stegano);
  • recherche et exploitation des vulnérabilités WEB.

En plus de cela, je partagerai mon expérience en criminalistique informatique, analyse de logiciels malveillants et micrologiciels, attaques sur les réseaux sans fil et les réseaux locaux, réalisation de pentests et écriture d'exploits.

Afin que vous puissiez vous renseigner sur les nouveaux articles, logiciels et autres informations, j'ai créé une chaîne dans Telegram et un groupe pour discuter de tout problème dans le domaine de l'ICD. Aussi, je considérerai personnellement vos demandes, questions, suggestions et recommandations personnelles et répondrai à tout le monde .

Toutes les informations sont fournies à des fins éducatives uniquement. L'auteur de ce document n'assume aucune responsabilité pour tout dommage causé à quelqu'un du fait de l'utilisation des connaissances et des méthodes obtenues à la suite de l'étude de ce document.

Encodage - ASCII


Commençons par le tout premier travail - Encodage-ASCII.

image

Nous passons à la tâche elle-même. Nous voyons une séquence de 16e caractères. La toute première hypothèse est un hexagone régulier (tous les personnages sont présentés sous la 16e forme).

image

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

image

Nous obtenons la réponse et passons à autre chose.

Encodage - UU


image

Nous passons à la tâche elle-même. Même malgré l'indication dans le nom de la tâche, il est facile de distinguer les fichiers dans UUE (encodage pour le transfert de fichiers contenant des données non textuelles) - ils commencent à partir de la ligne:

 Begin_--_- 

image

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

image

Nous remettons le drapeau.

Hash - Message Digest 5


image

On nous demande de trouver le prototype du hachage md5. Cela peut être facilement fait en utilisant ce site (https://md5decrypt.net/). Mais à des fins de formation, nous utilisons bien sûr le hashcat. Pour ce faire, utilisez les paramètres et codes suivants:

  • -a 0 - recherche dans le dictionnaire;
  • -m 0 - type de hachage MD5;
  • File.hash - un fichier avec un hachage;
  • rockyou.txt - notre dictionnaire;
  • --force - ignore les erreurs.

image

Nous passons à la tâche suivante.

Hachage - SHA-2


image

Comme réponse, vous devez donner le hachage SHA1 à partir de l'image inverse de ce hachage. Le fait est que c'est un personnage supplémentaire.

image

Supprimez-le. Afin de déterminer l'algorithme de hachage, nous utilisons le programme de hachage.

image

Parmi les algorithmes présentés, le SHA-256 le plus probable. Hashcat a montré comment résoudre une telle tâche en utilisant hashcat, maintenant nous allons le faire en utilisant ceci
site .

image

Il reste à prendre SHA-1 de cette ligne.

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

image

Décaler le chiffre


image

Eh bien, avec l'algorithme de chiffrement, ils nous aident. Le même chiffre César, seul le décalage ne se produit pas dans la plage de zéro à la longueur de l'alphabet, mais selon toutes les 256 valeurs possibles d'un octet. Nous allons écrire un programme qui décale d'abord chaque caractère de 1, puis de 2, etc. jusqu'à 255.

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

image

Parmi les lignes, nous trouvons celle qui contient la réponse.

image

La folie des pixels


image

On nous donne plusieurs expressions, et à la fin ils disent que 0 est blanc et 1 est noir. Le résultat devrait très probablement être une image. Je suppose que dans l'expression, vous n'avez pas besoin de multiplier, mais de répéter le nombre de fois requis un certain caractère.

Vous pouvez exécuter rapidement une expression à l'aide de la fonction eval, mais vous devez d'abord changer le format 0x1 en «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) 

image

Créez maintenant une image à l'aide de la bibliothèque PIL. Ajoutons le code suivant, modifions-le et ouvrons l'image résultante.

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

image

J'ai zoomé sur l'image, j'ai lu le mot SOLUTION. En fait, il y a plus de stegs que de cryptes. Cet article ne sera intéressant, très probablement, que pour les débutants.

De plus en plus compliqué ... Vous pouvez nous rejoindre sur Telegram . Là, vous pouvez proposer vos propres sujets et voter sur le choix des sujets pour les articles suivants.

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


All Articles