21/10/02 

  WinHex 9.6

Niveau : +Newbie (comme moi)

Protection: Nagscreen+Serial+Enregistrement seulement des fichiers de -250Ko

Cible : WinHex

Version : 9.6

Toolz : Sice+(Wdasm)+Ida+Hiew

URL : http://www.winhex.com http://www.sf-soft.com

 

 

 

 


 

 

 

I-Introduction

Salut à vous aujourd'hui nous allons crackés un logiciel connu par tous Winhex un editeur hexadecimal.Pourquoi je le cracke parcz qu'il est sur la liste des exe sur mon bureau voilà c'est pour ça. Bon j'avoue que je faisais un petit rangement de mon bureau (mes dossiers etc..) et je suis tombé sur le tutorial d'un dénomé Xio qui avait cracké Winhex 9.4 puis sur un tutorial de Sulfur'x .Donc je les ai lu pour avoir une idée de la protection bon c'est vrai en lisant leur tutorial je savais deja ce que je devais faire.Les grandes modifications par rapport aux autres versions c'est qu'il n'ya aucune Strg datas interessantes pour nous mettre sur la bonne voie. Je crois que les textes des boites de dialogue sont cryptés et puis sont affichés grace à l'api SetWindowTextA.

 

II-Description du logiciel

WinHex est un editeur hexadécimal.

Un éditeur hexadécimal est capable d'afficher complètement les contenus de chaque type de fichier. Différent d'un éditeur de texte, un éditeur hexadécimal affiche les codes de contrôle (par exemple les caractères d'avance et de retour chariot) et les codes exécutables utilisant un nombre à deux chiffres du système hexadécimal.

 

III--Pour bien commencer

 

Achetez softIce ou windasm un bon editeur hexadecimal comme hiew , quelques connaisances en asm, avoir la bible de Win32 api reference merci Krosoft et l'envie d'apprendre à cracker .Voilà c'est tout.

 

IV-Analyse

On remarque bien un item de menu appelé "Enregistrement" on se dit alors si on n'est un register valide cet item de menu va disparaître .Donc il y'aura la presence d'un flag utilisateur mise en place par le programme.Alors c'est à nous de le chercher.Mais vous me direz comment faire ? eh bien tout simplement en cherchant dans notre bible des apis une fonction interessante en rapport avec les menus qui supprimerait les items des menus (ouuuuui nous sommes tres croyant chez les crackeurs).

J'ai une idée si vous n'avez aucune connaissances sur les apis on va chercher carrement l'item "enregistrement" grace à windasm .Et oui dans sa nouvelle version windasm nous propose une fonction qui me paraît pas mal intéressante sur les menus.Pour cela nous desassemblons le fichier winhex(no comment là dessus car dans mes autres tutz j'en parle deja assez dessus!!) pof c'est fait on clique sur la barre de menu sur l'icône "menu reference" :

 

et on trouve deux occurrences du mot "enregistrieren"en 44F26A et en 45153A (et oui c'est de l'allemand car le porogrammeur est allemand donc c'est normal) donc pour savoir laquelle de ces addresses est sollicitées en premiere on pose nos breakpoints à ces endroits (no comment sur la façon de faire car deja expliqué dans mes précedents tutz).on appuuie F9 et pop on break sur 45153A. si on regarde bien on voit l'api Deletemenu dans les environ nous sommes sur la bonne piste.Comme l'indique son nom deletemenu efface un item de menu:

(merci à Iczelions pour son travail et à morgatte pour sa traduction)

BOOL DeleteMenu(

HMENU hMenu, // handle du menu
UINT uPosition, // n°ID de l'Item du Menu ou bien son n° de position
UINT uFlags // flag attribué à un item
);



Paramètres

hMenu
Identifie le menu concerné.

uPosition
Spécifie l'Item (de ce menu) qui doit être supprimé, la signification de ce n° dépend de uFlags.

uFlags
Indique comment le paramètre uPosition est interprété. Ce paramètre doit être une des valeurs suivantes :

	Valeur 	Signification
	MF_BYCOMMAND 	Indique qu'uPosition représente le n°ID de l'Item (du menu). 
			MF_BYCOMMAND est le Flag par défaut si ni lui-même ni 
			MF_BYPOSITION n'ont étés spécifiés.
	MF_BYPOSITION 	Indique qu'uPosition donne la position zéro-basée de l'item. 
			(Zéro-basé signifie simplement que le premier Item du menu à 
			la position 0, le second Item possède la position 1 et ainsi de 
			suite...)


Valeurs en Retour

Si la fonction réussit, la valeur de retour est différente dezéro.
Si la fonction échoue, la valeur de retour est zéro. Pour obtenir l'information sur l'erreur étendue, appelez GetLastError.

Push 00 ß lorsque c'est 00 il prends par defaut le flag MF_BYCOMMAND
Push 7A
ß n° ID du menu

Push eax ß handle du menu

Call DeleteMenu

 

 

Donc on se dit qu'il doit avoir un test quelque part et si oui notre flag utilisateur va être testé .Biensur que oui regardez les lignes qui precèdent le mot "Registrieren" on voit une comparaison avec une memoire:

On remarque bien que notre Flag utilisateur est la memoire [45A7E7] .Pour s'enregistrer il faul avoir le flag 01 donc à ce moment on prends notre copain Sice et on le charge grace au loader de sice (no comment dans mes autres tutz j'explique comment faire cette manip) puis on pose notre breakpoint memory en acces en ecriture et en lecture soit un super bpm 45A7E7 RW et pop on arrive dans un passage secret dans les meandres du code de winhex.Mais Qui a eteint la lumiere pardis ? Car tout etait tout noir mais grâce à mon idée tout s'ettillait comme l'eau cristalline d'une fontaine de jouvance!!!

Et on break en 43FFA6 c'est notre 1er test et le seul qui determinera si on est un user valide car apres il en y'aura une serie de test sur cette memoire.

 

On aura tous compris pour avoir al ==1 il faudra changer le Setne en Sete qui est en fait son contraire (c'est comme les jumps).

Info: les instructon de Test, la fammille des Setcc

L'instrution SETcc (set if condition) positionne la destination à 1 si la condition est verifié et à 0 si elle ne l'est pas.Les différentes conditions sont les mêmes que pour l'instruction jcc (jump if condition code) et la taille de l'opérande de destination doit toujours être d'un octet.

(merci à Bernard Fabrot sur son livre qui regorge de merveilles)

Ici on ne verra que Setne et Sete

Cc Condition Exemple

-Setne / nz <> signé et non signé Setne al

( pas egal/ et different de zero)

-Sete /z = signé et non signé Sete al

(egal / zero)

 

Mais il y'en a d'autres qui me diront de changer le AL en 43FFA4 en 1 (mov byte ptr [EDX] ,01)mais non c'est pas comme ça la vie!! Si vous faites ça on aura droit à une méchante nag qui nous dit que le fichier est corrompu un mechant CRC ou Haschage un truc comme ça (au fait si je dis des bêtises dans mes tutz dites le moi car tout le monde fait une faute et de plus je n'ai pas l'arme absolu à tout je suis un newbie).

1er et le seul patch du programme

43FF99 0F95C0 setne al :

43FF99 0F94C0 sete al : modification à faire avec un editeur hexadecimal comme hiew. (il faut d'aller à l'offset 3F399 et de patcher!! ceci est indiqué par windasm il suffit de regarder tout en bas)

On remarque apres de nombreux appuie sur F5 l' @mem est sollicité plusieurs fois.On verifie plusieurs fois si on est un user valide ces addresse sont:

En -44006E

En-4400A3

En -45152F

En -433597

En -44EBE7 5apres la fermeture du programme regarde encore si on est enregistré.

Bon voilà je crois que je vous ai tout dit!!!!

 

 

Gteetz to

Iczelions , Morgatte , Xio , Sulfur'x , FFF , CRFF , Immortal Descendants , Christal , D@T@7

 

D@T@7 © 2002

 

Art. L. 122-6-2. Toute publicité ou notice d'utilisation relative aux moyens permettant la suppression ou la neutralisation de tout dispositif technique protégeant un logiciel doit mentionner que l'utilisation illicite de ces moyens est passible des sanctions prévues en cas de contrefaçon. Un décret en Conseil d'État fixera les conditions d'application du présent article. Cracker un programme et l'utiliser est illégal ( punie de deux ans d'emprisonnement et de 1.000.000F d'amende ) et irrespectueux du travail de l'auteur, nous sommes la pour apprendre pas pour détruire. Nul n'est censé ignorer la loi, vous êtes responsables de vos actes et nous ne pouvons pas être tenus responsable de la mauvaise utilisation des fichiers hébergé sur ce site.