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:
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
On obtient la fenetre suivante (ressource stings in module Winzip32):
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.
On presse OK et on obtiens cinq references à cette string --> on mets un breakpoint
sur les 5 references:
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:
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
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".
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
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é
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.
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é:
.
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