[ - Intro - Explications - L'outil expliqué - Liens - Notes de fin - ] |
[ - Tutoriaux : Variable d'enregistrement ~ Winrar 3.0b7 ~ Notepad - ] |
Ce tut boucle les protections
basiques. Après la fonction d'enregistrement, le test eax,eax, voici
la variable d'enregistrement. Winrar servira par la suite comme logiciels
d'application.
Au lancement, le Nag suivant apparait.
"button"
"class_lg"
"Cour
n"
"Enregistrement"
"Ok"
"Payez
1000 Euros contre ce superbe "
"PROGRAMME
ENREGISTRE"
"PROGRAMME
NON ENREGISTRE"
"RANGE"
"Register"
"RGN"
"RGN"
Cliquons donc sur "PROGRAMME ENREGISTRE" et on tombe sur :
:00401132 8B45BC
mov eax, dword ptr [ebp-44]
:00401135 C9
leave
:00401136 C21000
ret 0010
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004010F6(C)
|
:00401139 6A40
push 00000040
* Possible StringData Ref from Data Obj ->"Cour n"
|
:0040113B 6809304000
push 00403009
* Possible StringData Ref from Data Obj ->"PROGRAMME ENREGISTRE"
|
:00401140 683B304000
push 0040303B
On voit qu'un saut conditionnel nous renvoit sur notre fenêtre "PROGRAMME ENREGISTRE". Allons donc dessus.
:004010E3 6A00 push 00000000
* Reference To: USER32.CreateWindowExA, Ord:0058h
|
:004010E5 E808020000
Call 004012F2
:004010EA A3BC304000
mov dword ptr [004030BC], eax
:004010EF 803D9730400000
cmp byte ptr [00403097], 00
:004010F6 7541
jne 00401139 <=== ICI notre saut
:004010F8 6A01
push 00000001
Donc
on voit que l'on a un "compare" avec un byte ptr [00403097] et le registre
eax qui conditionne notre saut.
[00403097]
fait référence au contenu de la zone mémoire en 403097
et byte ptr que nous comparons dans cette zone, juste une DATA contenue
dans un byte.
:004010EA A3BC304000
mov dword ptr [004030BC], eax
:004010EF 803D9730400000
cmp byte ptr [00403097], 00
:004010F6 7541
jne 00401139
Bref, si [00403097] = 00,
on ne fait pas le saut et si [00403097] = 01, on fait notre saut.
La chose intéressantye
serait de mettre [00403097] à 01. ( NB: dans le cas de ce "crackme",
si vous changez "jne" en "je", cela marchera aussi mais le mieux est de
donner ce que le programme veut. Si un autre test est fait sur [00403097],
il sera toujours à 00, donc ça sera mauvais. )
Donc, recherchons dans le
listing du désassemblage "[00403097]". Cliquons dans "Search" et
"Find text" puis tapons "[00403097]".
....................................................................................................
:00401029C6059730400000
mov byte ptr [00403097], 00 <=== le voilà !!
................................................................................................
:004010EF 803D9730400000
cmp byte ptr [00403097], 00 <=== notre compare
....................................................................................................
Donc on trouve juste 2 cas
mais celui en 401029 et celui que nous cherchions.
Il faut donc que on ait
: mov byte ptr [00403097], 01 à
la place de mov byte ptr [00403097], 00.
Donc
:00401029 C6059730400001 mov byte ptr [00403097], 01
On relance et on obtient :
Et voilà, ça
marche ! Plus de Nag et le programme est "ENREGISTRE".