TP Analyse de Shellcode - Partie 1 : Protection logicielle
Partie 1 : Protection logicielle
Etape A :
Un programmeur a décidé de protéger son application à l'aide d'une
validation de type License. Son application est disponible dans le
répertoire exe1.
1. A l'aide de l'outil OllyDbg, retrouvez le numéro de license en
consultant simplement le code assembleur de l'application.
Ouverture de l'exécutable dans OllyDbg
Lancer OllyDbg
File → Open → Sélectionner [Link]
Le désassembleur affiche automatiquement le code à partir du
point d'entrée (Entry Point)
Recherche des chaînes référencées
Clic droit dans la fenêtre du code assembleur
Sélectionner Search for → All referenced text strings
Une nouvelle fenêtre s'ouvre listant toutes les chaînes de
caractères utilisées dans le programme
2. Que peut-on dire de ce type de vérification ?
Etape B :
Notre programmeur ne se décourage pas. Il a compris que laisser la clé
de license en clair dans le code réduit la sécurité de son application. Il
a donc décidé de la protéger d'une autre manière. Son application est
disponible dans le répertoire exe2.
1. Modifiez l'application pour que son programme ne vérifie plus la
clé de license (L'instruction nop, qui n'effectue aucune opération,
pourra vous aider)
À l'aide d'OllyDbg, j'ai analysé le code assembleur de l'application et
identifié la séquence critique de vérification :
Compréhension du mécanisme
L'application effectue les opérations suivantes :
1. Récupération de l'entrée utilisateur via GetWindowTextA
2. Traitement de cette entrée par une fonction à l'adresse
0x004011E9 (probablement une fonction de hachage)
3. Comparaison du résultat (stocké dans EAX) avec une valeur de
référence (stockée dans EBX, chargée depuis 0x40202A)
4. Saut conditionnel : si les valeurs sont différentes (JNZ), le
programme affiche "Mauvais mot de passe"
Technique de Bypass Appliquée : Neutralisation par NOP
2.1 Principe
L'instruction NOP (No Operation, code opcode 0x90) est une
instruction qui ne réalise aucune opération. Le processeur l'exécute
simplement et passe à l'instruction suivante.
En remplaçant l'instruction de saut conditionnel JNZ par des NOP, on
supprime la bifurcation vers le message d'erreur, forçant ainsi le
programme à continuer son exécution normale vers le message de
succès.
2.2 Procédure de modification
Étape 1 : Localisation de l'instruction cible
Adresse : 0x004011BD
Instruction originale : JNZ SHORT exe2.004011D4
Étape 2 : Modification dans OllyDbg
1. Sélection de la ligne 004011BD
2. Pression de la touche Espace pour ouvrir l'éditeur d'assembleur
3. Remplacement de l'instruction JNZ SHORT exe2.004011D4 par
NOP
4. Répétition de l'opération pour obtenir 2 instructions NOP
consécutives (2 octets)
5. Validation de la modification
Étape 3 : Sauvegarde du binaire modifié
1. Clic droit dans la fenêtre de code → Copy to executable → All
modifications
2. Dans la nouvelle fenêtre : Clic droit → Save file
3. Enregistrement sous le nom exe2_pa.exe
4. Tests et Validation
2. Comment feriez-vous pour retrouver la clé ?
3. Que penser de cette protection ? Comment l'améliorer ?