III] CRACKER LA ROUTINE DE VERIFICATION



1) un peu de théorie

On va cette fois ci essayer d'enregistrer Winzip. On va dans le menu Help,
Enter registration code. La on met loloko comme nom et 12345 comme code
On obtient ce message d'erreur:


loloko

La structure de verification est de ce type:
verification serial --> si serial faux va vers message d'erreur
On va donc essayer de remonter au saut qui nous a fait allez vers le message
d'erreur et l'inverser (en l'inversant, on a toute les chances que ca nous amène
vers le message de réussite)

2) la pratique

On cherche la phrase "Incomplete or incorrect information" dans ollydbg.
La première chose qu'on peut faire, c'est regarder si la phrase est presente dans
le texte qu'affiche ollydbg. On fait un clic droit dans la fenetre CPU (fenetre principale
avec les instructions en assembleur) et on selectionne "Search for" > "all reference
text strings". La phrase n'y est pas. On va donc chercher dans les strings ressources.
On clic sur le menu View, Executable Module Une fenetre s'affiche avec le nom de
plusieurs programme. On selectionne winzip32.exe (ligne1) on fait un clic droit et
on selectionne view ressource strings

loloko

On obtient la fenetre suivante (ressource stings in module Winzip32):

loloko

On tri les phrase avec un clic droit, Sort by String, et on recherche notre String.
La ligne est ici en gris. Il faut regarder la deuxième colonne (Index) et retenir le
numéro (28E) Maintenant, on va dans la fenetre CPU, on fait un clic droit et on
selectionne Search for puis All constants, et on rentre 28E en Hexadécimal.

loloko

On presse OK et on obtiens cinq references à cette string --> on mets un breakpoint
sur les 5 references:

strings

On s'enregistre dans winzip, menu Help, Enter Registration code, et on saisi comme nom
loloko et commme sérial 12345. On valide --> ollydbg breake sur un de nos 5 breakpoint:

origine call cracking

On execute pas à pas avec F8 --> le dernier call à l'adresse 40DDA2 se charge d'afficher
le message d'erreur. Juste au dessus de notre PUSH 28E, on a un CALL avec le symbole
">" juste devant. En se positionnant dessus avec la souris,  ça nous permet de savoir ce
qui nous a amené ici

Sur le bas de l'image, il est indiqué que trois sauts peuvent conduire à cette adresse
(Jumps from 0040DD34, 0040DD3D, 0040DD46)

Ce que cette ligne signifie, c'est que trois saut conditionnels peuvent nous faire arriver a
l'endroit du call. Effictivement, on obtient le message d'erreur pour trois raisons:
- le nom est vide
- le serial est vide
- le sérial n'est pas valide

On va rentrer comme nom loloko, comme code 12345 , mettre un breakpoint sur les trois
sauts (0040DD34, 0040DD3D, 0040DD46) et on va savoir de cette façon quel est le saut
qui nous amène réélement vers le message d'erreur. Le programme break en premier sur
40DD34 et ne saute pas, puis il break en40DD3D ne saute toujours pas, enfin break en
40DD46 et saute vers message d'erreur.

Ci dessous, on voit à l'avance que le programme va sauter grace à l'indication
"Jump is taken" en 40DD46.Quand le prog ne saute pas, il marque "Jump is not taken".

trois sauts winzip 9.0 cracking

clic droit sur la fenetre de dump, goto > expression et on tape 4E6574
On obtient notre nom "loloko" et un peu plus loin a l'adresse 4E65A0 notre faux serial.
winzip ne verifie que le premier byte du nom et du serial (le premier caractere). Si ce
premier caractere a comme code ASCII 00, le serial est vide. Ici le code ASCII du
premier caractere du nom est 64 ce qui correspond à la lettre l de loloko 

dump

Les deux premiers sauts ne sautent pas car le nom et le serial ne sont pas vides. Par
contre le troisieme saut saute vers le message d'erreur car le serial a été controlé
comme faux par le CALL juste avant. Pour cracker rapidement le programme, on va
inverser le saut (JNE à la place de JE). Un message nous dis qu'on va etre enregistré

loloko

On quitte Winzip, on le redemarre.... et on voit qu'on est toujours pas enregistré!!!!!!
A cette étape, le débutant en cracking abandonne... mais pas nous.....
On va reexaminer les instructions en assembleur.

Ce qui peut se produire, c'est que la routine de verification du serial soit appelée à
d'autre endroits que celui la. On peut vérifier ce qu'on pense en rentrant dans la routine
de verification. On selectionne le call de vérification (CALL 40D9AF de l'adresse
40DD3F) et on appuie sur la touche Entrée pour aller dans le CALL. On se retrouve
à l'interieur du call de verification

winzip 9.0 crack ollydebug

Sur la premiere ligne, on voit que la routine de vérification n'est pas appellé qu'une
seule fois par le programme, mais 5 fois (Local calls from 401067, 404814, 404F0D
, 40DD3F, 46095C). Elle est notamment appelée au lancement du programme pour
savoir si winzip doit afficher le nagscreen. Une solution possible, c'est de faire ce qu'on
a fait à l'adresse 40DD46 pour les 4 autres adresses, c'est a dire inverser le saut
conditionnel aprés le test sur al. Mais cette methode est un peu longue... Le plus simple
c'est de modifier directement la routine de vérification pour que al soit toujours différent
de 0. Au début de la routine de verification, on va mettre mov al, 1 pour mettre al à 1,
ensuite on quitte la routine de verification avec ret. On enregistre Voila le code modifié:

solution olly debug winzip.

III] creer un crack

Si on veut faire profiter le monde entier de son travail on peut créer un crack ou patch.
Un crack est un programme qui modifie l'executable (ici winzip32.exe) de facon à ce
que l'utilisateur soit enregistré. Il n'est pas nécessaire de savoir programmer, vous
pouvez creer un crack à partir du moment ou vous avez cracké winzip.

On va utiliser un petit freeware "patcher",qui a seulement besoin du fichier cracké et du
fichier original pour créer le crack. Indiquez l'emplacement des fichiers et cliquez sur patch

crack winzip 9.0


cours precedent                                                                                           cours suivant