Nouveaux Concepts: Variables et constantes MessageBox
|
Traditionnellement, les tutoriels de programmation commencent par une application qui affiche le message "Hello World" dans une console. L'équivalent de cela dans l'interface graphique de Windows est la fonction MessageBox. Démarrez WinAsm, ouvrez un nouveau projet .exe et collez le code messagebox.asm :
Cliquez sur "Go All", enregistrez les fichiers du projet et du code ASM
et vous devriez voir ceci :
Maintenant, nous allons analyser les nouvelles parties. Header & Fichiers Librairie windows.inc est un fichier d'inclusion principal qui définit
tous les types de données Windows, les appels de fonction, les structures de données et les identifiants des constantes,
afin que vous puissiez les référencer par leur nom dans votre code. À noter ici que windows.inc définit
NULL et MB_OK afin qu'ils puissent être utilisés par leur nom pour rendre le code plus lisible. user32.inc
et user32.lib sont nécessaires pour invoquer MessageBox. Variables Nous avons défini 2 chaînes de texte terminées par zéro appelées
MsgBoxCaption et MsgBoxText. Elles seront affichées par la boîte de dialogue. Les variables et les constantes sont toutes déclarées de la même manière
en commençant par l'identifiant (nom), la taille et ensuite la valeur. Comme les chaînes de caractères varient en taille,
elles sont définies comme un octet mais terminées par zéro. Voici quelques exemples :
Code Programme La nouvelle instruction invoque la fonction MessageBox
qui prend 4 paramètres, comme nous pouvons le voir dans Win32.hlp :
Notre code transmet ces paramètres de la manière suivante : NULL - il n'y a pas de fenêtre parente. L'opérateur addr est utilisé pour transmettre l'adresse d'un label
ou d'un identifiant à une fonction. Consultez ici
pour des notes sur la syntaxe. AUTRES REMARQUES Le message lui-même peut être réparti sur plusieurs lignes en utilisant les codes
de retour chariot (13h) et saut de ligne (10h) pour insérer une nouvelle ligne. Le code suivant :
produira ceci :
Le dernier paramètre transmis à MessageBox contrôle le style
en termes (entre autres choses) des boutons qu'il contient :
et s'il affiche une icône : et quel bouton est sélectionné par défaut : Les constantes qui contrôlent ces éléments sont définies dans
le fichier windows.inc, qui peut également être ouvert dans WinAsm comme indiqué : Une sélection de ces constantes est également définie dans
C:\Program Files\WinAsm Studio\API\MasmApiConst.vaa, ce qui les rend accessibles depuis le menu contextuel
d'autocomplétion de WinAsm. Utilisez les touches fléchées et Entrée pour sélectionner dans la liste contextuelle.
Plusieurs constantes peuvent être combinées en un paramètre pour une fonction en les séparant par "or" ou "+".
Par exemple, en modifiant le code comme suit : invoke MessageBox, 0, addr MsgBoxText,
addr MsgBoxCaption, MB_YESNO +
MB_ICONASTERISK
+ MB_DEFBUTTON2 produira ceci :
Nous pouvons voir dans windows.inc que certains des identifiants sont des doublons et aussi de quelles caractéristiques est composée la boîte de dialogue par défaut utilisée par le système (qui sont égales à zéro). Les paramètres et les constantes pour d'autres fonctions de l'API sont implémentés de la même manière.
Si nous ouvrons notre programme de boîte de dialogue
(la version originale) dans OllyDbg, nous voyons un désassemblage du code qui
a été placé dans notre exécutable :
C'est une bonne habitude à prendre pour apprendre et monter en compétences en débogage
et voir le code réel produit par MASM. Les instructions invoke utilisées par l'assembleur et qui existent
uniquement pour la commodité du programmeur ont été remplacées par la séquence traditionnelle PUSH/CALL.
Les lignes en jaune représentent une table de renvoi de saut contenant des pointeurs vers la table des adresses d
'importation pour les 2 appels API que nous avons effectués et qui sont ajoutés par le linker. Olly peut également charger notre code source et l'afficher de manière
synchronisée avec le désassemblage. Pour cela, masm doit être configuré pour produire une version de débogage
de notre application. Cela peut être réalisé avec WinAsm. Dans le menu "Make", sélectionnez "Set Active Build"
et choisissez "Debug Version". Maintenant, cliquez à nouveau sur "Go All" et vous verrez quelques fichiers
supplémentaires dans le dossier du projet avec les extensions .ilk et .pdb. Cette fois, si nous chargeons notre exécutable dans Olly, nous obtiendrons
légèrement plus d'informations dans la fenêtre de désassemblage (comme les noms de nos variables),
mais aussi si nous cliquons sur la barre d'en-tête de la colonne "Comment" (voir le curseur de la souris
dans la capture d'écran ci-dessous), elle affichera le code source correspondant aux instructions de la colonne
de désassemblage. De plus, si nous sélectionnons "Source files" dans le menu "View" d'Olly et double-cliquons
sur notre fichier asm, tout le code source apparaîtra dans une nouvelle fenêtre. Cela peut rester en premier plan
via le menu clic droit et affichera l'instruction en cours d'exécution actuellement mise en évidence par une barre noire : Cela peut rendre le débogage de vos propres applications plus rapide et plus facile,
mais rappelez-vous que le Reverse engineering consiste à modifier des exécutables sans le code source et en général,
vous aurez beaucoup de chance si vous commencez à déboguer une application et que vous constatez qu'il s'agit d'une version
de débogage plutôt que d'une version finale. |
Copyright (C)- xtx Team (2021)