Une solution pour
Le CrackMe de Tipiax
Dans le Zip Hccc2#
(par Morgatte)



Je lance le crack-me et j’entre un serial quelconque. Il me renvoie le message suivant :
‘Votre Sérial est faut, veuillez le retaper !’

Je cherche un bout de cette phrase dans les string data ref : je voit rien !
Je passe à : - Search  Find Text : Votre

Et je trouve ceci :
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401441(C)						<--- Adresse du saut qui nous
                                                             à amené ici
|							
:00401413 6A00			push 00000000		<--- Définit le type de MessageBox
                                                        (ici ce sera une avec uniquement 1
                                                        bouton OK car la valeur est 0,
* Possible StringData Ref from Data Obj ->"crackme"	pas de bouton Réessayer ou de
                                                        signe X ? ! i)
                                  |					
:00401415 68DD234300		push 004323DD		<--- Dit à quelle adresse est placé
                                                        le titre qui ici est
							‘crackme’
* Possible StringData Ref from Data Obj ->"Votre s"	
                                  |					
:0040141A 68B0234300		push 004323B0		<--- Dit à quelle adresse est placé
                                                        le contenu
:0040141F 6A00			push 00000000		‘Votre sérial est faux, veuillez le
                                                        retaper !’
							
* Reference To: USER32.MessageBoxA, Ord:0000h		
                                  |					
:00401421 E81C030300		Call 00431742		<--- Voilà les 4 push permettant de
                                                        déclarer une MessageBox étant déclaré,
                                                        on appelle l’ouverture
							De la MessageBoxA (la mauvaise)




Il nous faut donc revenir au saut qui nous a amené vers cette mauvaise boite de message.
C’est donc le saut qui se trouve à l’adresse 0041441 (car c’est lui la référence en haut)


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401411(U)
|
:0040143D 837DF400		cmp dword ptr [ebp-0C], 00000000
:00401441 74D0			je 00401413
:00401443 837DF401		cmp dword ptr [ebp-0C], 00000001
:00401447 74DF			je 00401428

Ce saut se fait donc puisqu’on va vers la mauvaise boite de message.
On pourait l’effacer par 2Nop mais le second saut avec une valeur contraire
de [ebp-0C] me fait penser qu’il y a une deuxième vérification. Puisque le premier saute pour
une valeur de 0, alors sûrement que le second ne saute pas puisque sa valeur est 1.
La solution c’est donc de mettre 2Nop pour le premier saut et forcer le second avec un Jmp.

Ou mieux !,  inverser la valeur de [ebp-0C] qui est de 0 pour la mauvaise boite de message.

On avait ça :
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401411(U)
|
:0040143D 837DF400		cmp dword ptr [ebp-0C], 00000000
:00401441 74D0			je 00401413
:00401443 837DF401		cmp dword ptr [ebp-0C], 00000001
:00401447 74DF			je 00401428

Je remplace par ça :
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401411(U)
|
:0040143D 837DF400		cmp dword ptr [ebp-0C], 00000001
:00401441 74D0			je 00401413
:00401443 837DF401		cmp dword ptr [ebp-0C], 00000000
:00401447 74DF			je 00401428

Et là, on est effectivement renvoyer vers la bonne boite de message ! ! !






Mais je pense qu’il y a encore beaucoup plus simple :

Puisque la finalité de ce crack-me est l’ouverture d’une boite de message avec
le bon message, on peut au lieu de forcer le logiciel à aller vers la bonne MessageBox, le
laisser aller comme tout à l’heure vers la mauvaise MessageBox mais remplir cette
MessageBox avec le bon texte.



Au niveau de la mauvaise MessageBox on avait ça :(je change de page)

----------------------------------------------------------------------------------------------
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401441(C)						<--- Adresse du saut qui nous à amené
                                                             ici
|							
:00401413 6A00			push 00000000		<--- Définit le type de MessageBox
                                                        (ici ce sera une avec uniquement
                                                        1 bouton OK car la valeur est 0,
* Possible StringData Ref from Data Obj ->"crackme"	pas de bouton Réessayer ou de
                                                        signe X ? ! i)
                                  |					
:00401415 68DD234300		push 004323DD		<--- Dit à quelle adresse est placé le
                                                        titre ici qui est
							‘crackme’
* Possible StringData Ref from Data Obj ->"Votre s"	
                                  |					
:0040141A 68B0234300		push 004323B0		<--- Dit à quelle adresse est placé le
                                                        contenu
:0040141F 6A00			push 00000000		‘Votre sérial est faux, veuillez le
                                                        retaper !’
							
* Reference To: USER32.MessageBoxA, Ord:0000h		
                                  |					
:00401421 E81C030300		Call 00431742		<--- Voilà les 4 push permettant de
                                                        déclarer une 
:0040143B EB0C		jmp 00401449		        MessageBox étant déclaré, on appelle
                                                        l’ouverture
							De la MessageBoxA (la mauvaise)



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401447(C)
|
:00401428 6A00			 push 00000000		<--- Toujours une MessageBox avec
                                                        1 seul bouton
							‘OK’
* Possible StringData Ref from Data Obj ->"crackme"	
                                  |					
:0040142A 6811244300		 push 00432411		<--- Dit à quelle adresse est placé
                                                        le titre (ici c’est donc le titre de
                                                        la bonne Boite)

* Possible StringData Ref from Data Obj ->"***!!! Bien jou"	
                                  |					
:0040142F 68E5234300		push 004323E5		<--- Dit à quelle adresse est placé
                                                        le contenu de la 
:00401434 6A00			push 00000000		bonne boite.
							
* Reference To: USER32.MessageBoxA, Ord:0000h		
                                  |					
:00401436 E807030300		Call 00431742		<--- appelle pour l’ouverture de
                                                        la MessageBox
:0040143B EB0C		jmp 00401449		        (Avec les bon messages puisqu’ils
                                                        viennent justes d’être déclarés avant
                                                        l’appel de la MessageBox)


Bon ben voilà, il n’y a qu’à :
à la ligne 00401415 remplacer le Push 004323DD par Push 00432411 pour accéder au bon titre.
Et à la ligne 0040141A replacer le Push 004323B0 Par le Push 004323E5 pour accèder au bon
contenu. (Et en faite, les deux titres étant les mêmes, il n’y a que le deuxième Push à
changer ! ! !)

J’ai essayé. Ça marche.



Ma vision de la solution du Crack-Me de Tipiax (Par Morgatte)