[ - Intro - Explications - L'outil expliqué - Liens - Notes de fin - ]
 
[ - Tutoriaux : Variable d'enregistrement ~ Winrar 3.0b7 ~ Notepad - ]
La variable d'enregistrement

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.
 

Le crack

Au lancement, le Nag suivant apparait.

Si vous cliquez sur "Ok", vous tombez sur une boîte de message qui vous précise :

Voilà, voilà...
Bon, le "challenge" ( enfin, faut pas pousser ! : ) est de changer ce message en "PROGRAMME ENREGISTRE" et de ne plus avoir le Nag-screen.
Passons sous W32Dasm. On a les String Data References suivantes :

"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".
 

Lise Grim 2002 / WiA