Programme d'une boîte de message simple


Nouveaux Concepts:

Variables et constantes
Utilisation d'Olly pour désassembler et déboguer votre code

Nouvelles fonctions API:

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 :

1

Cliquez sur "Go All", enregistrez les fichiers du projet et du code ASM et vous devriez voir ceci :

1

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 :

1

Code Programme

La nouvelle instruction invoque la fonction MessageBox qui prend 4 paramètres, comme nous pouvons le voir dans Win32.hlp :

1

Notre code transmet ces paramètres de la manière suivante :

NULL - il n'y a pas de fenêtre parente.
addr MsgBoxText - adresse de notre chaîne de texte.
addr MsgBoxCaption - adresse de notre titre.
MB_OK - l'un des styles prédéfinis.

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 :

1

produira ceci :

1

Le dernier paramètre transmis à MessageBox contrôle le style en termes (entre autres choses) des boutons qu'il contient :

1

et s'il affiche une icône :

1

et quel bouton est sélectionné par défaut :

1

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é :

1

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

1

produira ceci :

1

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 :

1

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 :

1

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)

XHTML valide 1.1 CSS Valide !