Ne voila t’il pas que, pour de sombres raisons, l’on m’a entrainé sur le chemin de Discord (ps.. je reste sur IRC) et de ses bots de tous poils. J’ai fait donc connaissance avec le bot “MatBot”.
https://discordbots.org/bot/265161580201771010
https://bots.discord.pw/bots/265161580201771010
En plus d’afficher des chats randoms il se propose de “chiffrer”…
Et là effectivement, ca donne envie de jouer avec dès que l’on se rend compte que “AAAAA” file toujours la même string chiffrée :)
Voici donc comment MatBot “Chiffre”.. si tenté qu’on puisse appeller cela chiffrer :).. Mais c’était sympas comme chall gratos, merci MatBot.
#!/usr/bin/env python3 # coding=utf-8 import sys import base64 # wp3CnsKcwp3CpMKEwqfCosKnw47DiA== key_a= [0x76, 0X7a, 0x71, 0x72, 0x76, 0xa5, 0x71, 0x74, 0x76, 0xa3, 0xa5, 0x79, 0x73, 0xa2, 0x72, 0xa6, 0xa3, 0Xa7, 0xa3, 0x7a, 0x73, 0x72, 0x73, 0xa3, 0x7a, 0xa6, 0x7a, 0x78, 0x7a, 0x79, 0xa5, 0X75] # Functions def getparam(count): """Retrieve the parameters appended """ if len(sys.argv) != count + 1: print('My command') print('To Use: %s ciphertext' % sys.argv[0]) sys.exit(1) else: return sys.argv[1] def main(): bsecret = getparam(1) secret = base64.urlsafe_b64decode(bsecret.encode('utf8')) # Decode B64 i = 0 delta = 0 fresult = [] for schar in secret: # For each bytes if schar == 0xc3: # Si c'est c3 on fera un shift moins grand delta = 0x40 if (schar != 0xc2) and (schar != 0xc3): # si c'est pas un char c2 c3 cchar = schar - (key_a[i] - 0x41) + delta # On shift le byte i = (i + 1) % (len(key_a)) # Rotation de l'index dans le tableau delta = 0 fresult.append(chr(cchar)) print(''.join(fresult)) if __name__ == '__main__': main()
Alors comment cela marche ?
Par exemple, la string “abcxyz” est chiffré en “wpbCm8KTwqnCrsOe”. c’est donc une string en base64… mais attention c’est la variante URL qui est utilisé (Avec des “_” et pas des “+” )
Cela donne pour “abcxyz” :
00000000 c2 96 c2 9b c2 93 c2 a9 c2 ae c3 9e |Â.Â.Â.©®Ã.|
Il y a des 0xc2 et 0xc3 qui parsement aléatoirement ca et là le texte. Dans cet exemple c’est entre chaque charactères mais ce n’est pas systématique (why ?? j’ai pas compris). Et le chiffrement est en fait un décalage de byte basé sur des valeurs d’un array de 32 bytes. (On décale un peu moins si c’est un 0xc3 qui est devant ).
Dans le python ici pour la clef, c’est la valeur du codage de “A” (0x41) directement qui est dans le code. Je fais la soustraction dans la loop feignant que je suis…
J’ai regardé ce que ca pondait comme clef de chiffrement en ascii… c’est 59015d035bd82a1ebfb9212b9e9798d4 .. Ca sent le md5 mais on sais pas de quoi :)
Et voila un chiffrement avec clef hardcodé fort étrange :)
$./uncryptit.py wwobCrlfCmsKhwoTClcKmwqnCgsOHwqfCoMKBwpTDisKCw4nDisKawqY= Qu'il est con ce chat $./uncryptit.py woHCqMKiwpbCosKEwpnCo8Kow5fDkVjClsOQwp3DlMOUwobDlcKiwqZRwpPDj8Kew5llV8KcwqfDksKnwprCnMKkwpbCqcOZwqJTwpbDhsONwqjCm8OUwpTDjsOQw43CgsKewp7CmsKmwo5Zw5jCnsKbWcKcw5NUwprCosKlwqTCosOTwpRTwqnDh8ORwqjCocOTUcOOw5DDicOLwp3Cm8KVwqfDkMKtwoXCrsKrWcKkw4XClsKkwqvClVHCmsOYUMKXwqTDjsOTwqrCl8KBwp7DhsOJw5TDg1nCk8KdwpvDk8Kuw4Zn Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. $./uncryptit.py wpbCpcKcwpbCr8KEwqPClMKhw5fDmFjCl8OVUcOHw5HDlMOQwp5Swp_Cp8OLwq3ChVo= allez salut et bonne nuit !
Voila voila… c’est pas otr quoi faites gaffe jeunes teenagers :)