[Débutants] Tuto BabyCrackme#2

Mettez à disposition vos propres cours de cracking ou des cours que vous trouvez intéressant.

[Débutants] Tuto BabyCrackme#2

Messagepar brouzouf33 » 19 Avril 2012, 18:40

Bonjour,

Je me suis essayé à faire un petit tuto sur un crackme qui m'a bien plu: le BabyCrackme#2 de haiklr. On en parle ici:
viewtopic.php?f=13&t=10099

Je pense pas que vous y verrez d'inconvénient à ce que je le poste puisque ça fait un petit moment qu'il existe, d'autant plus qu'il y avait des demandes de tuto dans le post.

C'est mon premier tuto et il est à destination des débutants comme moi, donc j'espère qu'il sera assez clair pour ceux qui le liront.

hxxp://www.multiupload.nl/VH4I39J6BA

Bonne lecture!
brouzouf33
Apprenti
Apprenti
 
Messages: 57
Inscription: 01 Janvier 2012, 18:00

Re: [Débutants] Tuto BabyCrackme#2

Messagepar Todd » 20 Avril 2012, 00:02

Salut brouzouf33,

j'ai lu avec plaisir ton tutoriel :wink:, mais je t'avoue avoir eu une petite déception. :( Car j'ai trouvé dommage que tu n'analyses pas le travail d'haiklr comme cela aurait dû l'être. :roll:
Les parties 2, 3 et 4 sont, comme tu le signales, purement mathématiques ! :o Donc je m'attendais à ce que tu analyses ces fonctions comme tu l'as appris à "l'école" :roll: et que tu nous fasses la démonstration de leur résolution. 8)

La force brute est une solution pour résoudre des fonctions complexes, mais là l'auteur s'attendait probablement à ce que tu utilises le stylo et le papier que tu avais préparé. :wink:

Je n'ai pas le temps de reprendre ce défi, ni même de remettre au propre mes notes :oops:, mais voici ce qu'il fallait démontrer :

Préambule :
Code: Tout sélectionner
Le fichier nommé BC#2 doit contenir 20 caractères. Ces caractères seront identifiés ci-dessous de c0 à c19.

Partie1 :
Code: Tout sélectionner
c0 = ?
c1 = c0+1 = c0+1
c2 = c1+1 = c0+2
c3 = c2+1 = c0+3
c4 = c3+1 = c0+4

c0*c0 + c1*c1 + c2*c2 = c3*c3 + c4*c4
On arrive à la même conclusion :wink:, sauf qu'à partir de là que tu aurais dû résoudre l'équation. :roll:

Partie 2 :
Code: Tout sélectionner
c0² + c1² + c2² = c3² + c4²   => c0² =    c3² + c4²   - c1² - c2² = (c0+3)² + (c0+4)² - (c0+1)² - (c0+2)²
pour rappel (a+b)² = a² + 2ab + b²
c0² = (c0² + 2*3*c0 + 3²) + (c0² + 2*4*c0 + 4²) - (c0² + 2*1*c0 + 1²) - (c0² + 2*2*c0 + 2²)
c0² = c0² + 6*c0 + 9 + c0² + 8*c0 + 16 - c0² - 2*c0 - 1 - c0² - 4*c0 -4
c0² = c0²(1+1-1-1) + c0(6+8-2-4) + 9+16-1-4
c0² = 8*c0 + 20
c0² - 8*c0 - 20 = 0   C'est une équation du second degré de type [ ax² + bx + c = 0 ], alors on calcule le discriminant Delta= b² - 4ac
Delta = 8² - 4*1*(-20) =  144
Le discriminant est strictement positif, alors l'équation admet deux solutions x1= (-b - sqrt(Delta))/2a   et x2 = (-b + sqrt(Delta))/2a
c0 = (-(-20) - sqrt(144))/ (2*1) = 4   et   c0 = (-(-20) + sqrt(144))/ (2*1) = 16

c0=10d
c1=11d
c2=12d
c3=13d
c4=14d
Nota : sqrt = racine carré
J'obtiens le même résultat que toi mais par calcul ! 8)
A ceux qui l'ont noté, 4 et 16 ne donnent pas 10, alors voir explication ci-après. :wink:

Partie 3 :
c11 = c10 + 1
ECX = (c10 * c11) -1145h
EAX = c10 + c11
ECX doit être égal à EAX donc c10 + c11 = (c10 * c11) - 1145h
c10 = (c10 * c11) - 1145h - c11 = (c10*(c10+1)) - 4421 - (c10+1) = c10² + c10 - 4422 - c10
c10 = c10² - 4422
c10 - c10² = -4422

-c10² + c10 + 4422 = 0 C'est une équation du second degré de type [ ax² + bx + c = 0 ], alors on calcule le discriminant Delta= b² - 4ac
Delta = 10² - 4*(-1)*4422 = 17788
Le discriminant est strictement positif, alors l'équation admet deux solutions x1= (-b - sqrt(Delta))/2a et x2 = (-b + sqrt(Delta))/2a
c10 = (-10 - sqrt(17788))/ (2*(-1)) = 71,68 et c10 = (-10 + sqrt(17788))/ (2*(-1)) = -61,68

c10 = 67
c11 = 68
Là certains me diront là encore : pourquoi 67 ? :shock: T'as copié sur brouzouf ? :aie: Heyyyyy :shock: mais non ! :evil:
La théorie des Math, c'est beau, mais là on fait de l'informatique ! :roll: Alors deux solutions dans un même registre, c'est impossible ! :shock: Donc la vérité est entre les deux (71,68 - 61,68 = 10 et on a dit entre les deux, donc 5).
(71,68 - 5) = 67,68 et (61,68 + 5) = 66,68. De plus pour tenir dans un registre, le résultat est un entier, donc entre 66,68 et 67,68, il n'y a que 67. Et il suffit s'essayer la formule ci-dessus pour s'en convaincre : -c10² + c10 + 4422 = 0 avec c10 = 67. :wink: CQFD 8)
Idem pour la partie 2, entre 4 et 16, on a 10 ! :D

Partie 4 : A partir de là mes notes deviennent encore plus brouillon :oops:, alors je ne vous donne que la conclusion
Code: Tout sélectionner
Conclusion la racine carré de (((c12 * 0Ah) + c13) * ((c12 * 0Ah) + c13)) + (c13 * 0Ah) + c12 + 2 doit être un entier !
Pour s'en assurer, on élèvera le résultat au carré
(10a + b)(10a + b) + 10b + a + 2
(10a + b)² + 10b + a + 2
(10a)² + 2*10ab + b² + 10b + a +2

c12 = 3
c13 = 7
Tu ne sembles pas avoir trouvé cette combinaison :?, mais pourtant... :roll:
Voilà finalement, seulement c00, c01, c02, c03, c04, c10, c11, c12 et c13 sont utiles. Les autres n'ont aucunes importances. :wink:

Voir le traitement d'équations mathématiques en assembleur était l'intérêt de l'exercice. :wink:
Bon travail quand même. 8)

Todd
Avatar de l’utilisateur
Todd
Modérateur
Modérateur
 
Messages: 1795
Inscription: 19 Avril 2009, 12:11

Re: [Débutants] Tuto BabyCrackme#2

Messagepar brouzouf33 » 20 Avril 2012, 06:30

Merci d'avoir lu Todd :D

Todd a écrit:Donc je m'attendais à ce que tu analyses ces fonctions comme tu l'as appris à "l'école" :roll: et que tu nous fasses la démonstration de leur résolution. 8)

En fait si je ne l'ai pas fais c'est tout simplement que... je ne savais pas faire! Ca fait un bon moment que je n'ai plus fais de math et même à l'époque ce n'était pas ce qui m'intéressait le plus... Je comptais le résoudre comme ça mais au bout de 10 minutes j'étais toujours au dessus de ma feuille et les bons conseils de google n'ont rien donnés... Je suis donc parti sur un petit programme pour la première vérification et j'ai donc fait naturellement de même pour les deux suivants.


Todd a écrit:c12 = 3
c13 = 7

Tu ne sembles pas avoir trouvé cette combinaison :?, mais pourtant... :roll:

Si si j'ai bien trouvé cette solution aussi. Là certains me diront là encore : 3 et7? :shock: T'as copié sur Todd ? :aie: Heyyyyy :shock: mais non ! :evil:
Mon programme les trouve bien mais comme il ya trop de valeurs à afficher elles apparaissent à l'écran au début puis disparaissent rapidement (suffit de remonter avec la petite scrollbar de la console).


Merci pour tes précisions et Gloire à toi Todd, car ta réponse m'a donné la façon de faire pour résoudre ces équations avec crayon + papier :D
Dernière édition par brouzouf33 le 21 Avril 2012, 08:33, édité 3 fois.
brouzouf33
Apprenti
Apprenti
 
Messages: 57
Inscription: 01 Janvier 2012, 18:00

Re: [Débutants] Tuto BabyCrackme#2

Messagepar Todd » 20 Avril 2012, 23:08

brouzouf33 a écrit:ta réponse m'a donné la façon de faire pour résoudre ces équations
Au final, quand on arrive à simplifier ces quelques lignes d'assembleur et à en déduire l'équation associée, on se rend compte qu'on a qu'à appliquer la bonne formule pour résoudre le problème. :wink:

Peut-être vas-tu maintenant te lancer sur Baby Crackme #1 ? :roll:
Bizarrement je l'ai trouvé plus dur à keygener, car il ne semble pas y avoir de réelles "cohérences mathématiques" :?, il y a juste des conditions à respecter sans vraiment de logique ! :o Mon keygen ne tient compte que de mes observations, mais j'aimerai qu'on me démontre que je suis passé à côté d'un algorithme que je n'aurai pas identifié ! :wink:

Todd
Avatar de l’utilisateur
Todd
Modérateur
Modérateur
 
Messages: 1795
Inscription: 19 Avril 2009, 12:11


Retourner vers Tutoriels

Qui est en ligne

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