Nag d'un crackme en Visual Basic
Objectif
Enlever le Nag d'un crackme.
Niveau
Moyen
Ce qu'il vous faut
- Un
éditeur hexadécimal (voir "Outils >
Editeurs")
Introduction
On va s'attaquer à un crackme en Visual Basic. Mais on va
uniquement s'occuper de la partie Nag. Pour info le serial et le Word code sont
visibles dans les Text String Referenced avec OllyDbg (accessible en faisant
clic droit : Search For --> All Referenced Text Strings par exemple.
En voyant les outils nécessaires pour ce cours vous avez dû être surpris ! Car pour cette fois ci nous n'aurons besoin que d'un éditeur hexadécimal.
Vous avez pu voir qu'un vilain nag avec marqué "NAG" dessus (comme c'est original) apparaît au lancement du programme, avant même que la fenêtre principale ne s'affiche. Le Nag comporte un Timer de 5000ms qui une fois les 5s passées, ferme le nag pour ouvrir la fenêtre principale.
[Éditeur hexadécimal] 1 - 0 [Visual Basic]
On va donc étudier ce crackme avec l'éditeur hexadécimal. Le programme étant fait en Visual Basic 6 on va donc chercher dans l'éditeur : "VB5!" ! Logique non ? Cela marche pour les programmes faits avec Visual Basic 4,5 et 6. Et dans ces 3 cas il faudra chercher "VB5!". Et on tombe ici :
Voici les explications de tout cela : on a donc notre
"VB5!"
en bleu clair en haut. En dessous, en vert, c'est
l'en-tête de projet VB qui contient
l'adresse des en-têtes fenêtres qui est ici en
jaune. On va donc aller à l'en-tête des fenêtres. Ici on a
50|12|40|00
ce qui fait en bytes inversés (on lit à de droite à gauche en gardant des
"paquets" de deux chiffres) :
00|40|12|50.
On va donc aller à l'offset
1250h
(on ne s'occupe pas du 0040) qui se trouve juste en dessous.
En VB les programmes sont faits de plusieurs fenêtres appelées Form (une pour le
menu, une pour la fenêtre de serial, de code... et une pour le NAG !!!).
Pour les en-têtes des Form on a en rouge la signature,
c'est à dire le nombre de byte de l'en-tête. Normalement les en-têtes font 50h
bytes ce qui fait 80 en décimal (dans l'éditeur une ligne fait 16 bytes donc
16*5=80, l'en-tête s'étend sur 5 lignes donc).En Jaune on a
l'adresse de la Form, là où sont tout le contenu de
la form.
Et en rose/violet, le plus intéressant, c'est
l'attribut de la Form. C'est ça que nous allons
modifier.
Pour connaître quel Form appartient à quelle fenêtre on peut utiliser des
programmes comme VBEditor ou VBReformer. Mais sinon on peut aller voir ce qu'il
contienne dans l'éditeur hexa.
Pour trouver la bonne adresse de la Form il faut prendre l'offset donné et
rajouter 64h. Par exemple pour le premier dont l'adresse est noté B0|3E|40|00
donc à l'offset 3EB0 cela nous donne 3EB0+64=3F14 (la calculatrice Windows fait
les calculs en hexa en mode scientifique).
A l'offset 3F14 on voit "Form1" et "Serial Section". C'est donc la fenêtre du
Serial.
Donc on fait pareil avec les 5 autres adresses. Et à la fin on trouve que la
Form du NAG est la 3 et la fenêtre principal du crackme est la 4.
Form1 - Serial
Form2 - Name serial
Form3 - NAG
Form4 - Fenêtre Principal
Form5 - Word Code
Form6 - About
On va donc inverser les attributs de ces fenêtres pour que ce soit la fenêtre
principale qui s'ouvre au démarrage et non le nag.
L'attribut (en violet) du nag est
10|01 soit 0110h et la Form4 est
00|07 soit 0700h. Quand un attribut est xx10h
c'est que c'est la form qui se lance au démarrage. Les autres étant à xx00h
principalement.
On va donc mettre 0010h à la place de 0110h
(00|01 au lieu de 10|01) et
0710h à la place de 0700h (10|07 au lieu de 00|07).
En faisant ça, la fenêtre principale se lancera au démarrage du programme. ce ne
sera plus le Nag.
On enregistre, on teste et Bingo! ça marche !
Donc voici comment on peut modifier un programme fait en Visual Basic, sans utiliser désassembleur ou débuggeur.
Deamon le 06 décembre 2003