Cours n°14

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

- Le cracke-me (40 Ko)



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