Comment fonctionne le XOR?

Tout sur les langages de programmation.

Comment fonctionne le XOR?

Messagepar brouzouf33 » 11 Avril 2012, 14:59

Bonjour,

J'ai un problème dans la compréhension du fonctionnement d'un XOR dans un keygenme.
Pour calculer le serial, il prend la somme de la valeur décimale de chaque lettre du nom entré puis fais un XOR 5678 sur cette somme.
Exemple avec comme nom "brouzouf":
somme de chaque lettre: 636
puis après le XOR 5678: 21508

Ensuite, pour comparer avec le serial entré, il prend la valeur décimale de chaque lettre, y retranche 30 et l'ajoute a la précédente valeur qui a été multiplié par 10 (voiçi le code ASM pour mieux me faire comprendre)

Code: Tout sélectionner
004013DE    8B7424 04         MOV ESI,DWORD PTR SS:[ESP+4]  <-- met le serial entré dans ESI
004013E2    B0 0A                MOV AL,0A                                  <-- met 10 dans AL
004013E4    8A1E                 MOV BL,BYTE PTR DS:[ESI]           <-- met chaque caractère du sérial à tour de rôle dans BL
004013E6    84DB                 TEST BL,BL                                  <-- regarde si on a fini
004013E8    74 0B                JE SHORT 004013F5                     <-- si oui on saute
004013EA    80EB 30             SUB BL,30                      <-- enleve 30 à la valeur décimale du caractère contenu dans BL
004013ED    0FAFF8              IMUL EDI,EAX                              <-- EDI * EAX (donc EDI * 10)
004013F0    03FB                  ADD EDI,EBX                               <-- EDI + EBX (donc EDI + BL)
004013F2    46                      INC ESI                                       <-- incrémente ESI
004013F3    EB ED                 JMP SHORT 004013E2                  <-- on recommence
004013F5    81F7 34120000   XOR EDI,00001234                       <-- quand on a fini XOR avec 1234


exemple avec "12345" comme sérial entré: XOR 12345, 1234 = 8717
exemple avec "azert" comme sérial entré: XOR 570028, 1234 = 565400

Pour déterminer si le serial entré est le bon, il le compare ensuite au sérial calculé.
Dans le cas de "brouzouf" et "12345" il compare donc 8701 et 21508.

Ce que je ne comprends pas c'est comment cela se fait qu'une comparaison puisse se faire entre A (le nom entré) et B (le sérial entré) alors qu'elles ont subi un XOR différent.
En testant au pif, j'ai trouvé que pour obtenir un bon sérial pour mon nom il fallait ajouter un XOR 1234 au calcul du sérial fait sur le nom entré. Donc pour "brouzouf": XOR 21508, 1234...

Quelqu'un peut-il m'expliquer ça?

Merci!
Dernière édition par brouzouf33 le 14 Avril 2012, 10:13, édité 1 fois.
brouzouf33
Apprenti
Apprenti
 
Messages: 57
Inscription: 01 Janvier 2012, 18:00

Re: Comment fonctionne le XOR?

Messagepar etherlord » 11 Avril 2012, 15:45

Après lecture rapide (peut être pas saisi ton problème) :

Soit A,B et C

A XOR B = C

donc

B XOR C = A et C XOR A = B

Après j'imagine que l'implémentation est un tant soit peu plus subtile que ça....

etherlord
etherlord
Triumvirat
Triumvirat
 
Messages: 2489
Inscription: 22 Mars 2004, 16:12

Re: Comment fonctionne le XOR?

Messagepar Bango » 13 Avril 2012, 11:27

Mais qu'est ce qu'il y a dans EDI ? La somme des chars?

T'as pas un lien du crackMe ?
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1537
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: Comment fonctionne le XOR?

Messagepar brouzouf33 » 14 Avril 2012, 10:12

Merci etherlord, je vois mieux maintenant comment fonctionne un XOR... mais ça ne résout pas le problème...

Mais qu'est ce qu'il y a dans EDI ?

Avant cette routine, EDI est mis à 0. Puis à chaque tour, EDI est multiplié par 10 puis est augmenté de la valeur décimale du caractère sur lequel on travaille.

Voiçi un lien du crackme, désolé de pas l'avoir mis avant:
hxxp://www.multiupload.nl/635G6D9HUW

EDIT:
J'ai oublié de préciser que le nom entré était mis en majuscule avant de calculer son sérial associé...
brouzouf33
Apprenti
Apprenti
 
Messages: 57
Inscription: 01 Janvier 2012, 18:00

Re: Comment fonctionne le XOR?

Messagepar Bango » 14 Avril 2012, 15:53

Ben c'est simple, le résultat de la routine sur le name est xoré avec 5678 puis c'est comparé avec le résultat de la routine sur le serial xoré avec 1234
Donc il faut que tu xor par 1234 le résultat de la routine sur ton name (une fois xoré par 5678), et que la routine sur ton serial donne le même résultat ;) A toi de trouver comment inverser cette routine.
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1537
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: Comment fonctionne le XOR?

Messagepar dionosis » 14 Avril 2012, 18:46

Salut,

Ca t'a déjà été très bien expliqué mais je vais te présenter ça en base 10 et avec des additions, ça sera peut être plus clair pour toi :
A = Calcul sur le nom
N = A + 5678
B = Calcul sur le serial
S = B + 1234
Après quoi si N==S alors GoodBoy.

Donc si (S - 5678) == A alors on est bon.
Ici j'utilise une soustraction (-) pour inverser l'addition (+), mais il faut savoir que le ou exclusif (^) s'inverse avec un autre ou exclusif :
A + B = C donc A = C - B
A ^ B = C donc A = C ^ B

Le calcul B sur le serial se contente de transformer la représentation d'un nombre en base 10 sous forme de chaine vers sa valeur numérique.

Spoiler (désolé, obligé de poster un lien comme les balises BBCode 'f', 'spoiler' et 'hide' sont désactivées) :
hxxp://pastebin.com/Fj0qUu5E

++
Avatar de l’utilisateur
dionosis
Maître des ténèbres
Maître des ténèbres
 
Messages: 507
Inscription: 09 Octobre 2009, 21:43

Re: Comment fonctionne le XOR?

Messagepar brouzouf33 » 15 Avril 2012, 11:27

Donc si (S - 5678) == A alors on est bon.

Aaaah! Dionosis tu es mon Dieu! 4 jours que je me creuse les méninges et que je tourne en rond et grâce à cette petite phrase j'ai retrouvé le sourire!

ça sera peut être plus clair pour toi

Ca m'apprendra à avoir la flemme de poser à l'écrit un truc aussi bête :?

Allez pour féter ça je vais boire un ptit canon de rouge à ta santé!

Merci pour vos réponses!
brouzouf33
Apprenti
Apprenti
 
Messages: 57
Inscription: 01 Janvier 2012, 18:00

Re: Comment fonctionne le XOR?

Messagepar dionosis » 15 Avril 2012, 16:39

Salut,

Content d'avoir pu t'éclairer ! :D

++
Avatar de l’utilisateur
dionosis
Maître des ténèbres
Maître des ténèbres
 
Messages: 507
Inscription: 09 Octobre 2009, 21:43


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités