Annexe 1. Installation MASM32 et WinAsm Studio

Installation MASM32

Vous devez tout d'abord télécharger les packs MASM32 et WinAsm (Les liens sont indiqués sur la page d'introduction).
Décompressez masm32v11r.zip et lancez l'éxecutable: INSTALL.EXE, il vous sera demandé ensuite de spécifier l'endroit où vous souhaitez faire l'installation.

Si vous sélectionnez C:\, le répertoire d'installation sera donc C:\masm32\.
Tous les utilitaires et les exemples de programmes fournis avec Masm32, sont prévus pour être installés directement à la racine de la partition C:\.


1


Le programme d'installation ouvrira ensuite une fenêtre en mode console (MsDos), vous proposant de construire les bibliothèques MASM.
Pour lancer l'installation, il vous suffira simplement de presser une touche.
Soyez patient! Cela ne prendra que quelques minutes:


1


Une fois le processus d'installation terminé, appuyez sur une touche quelconque, vous devriez voir une fenêtre s'ouvrir avec le message: "installation success".

Hutch ayant assemblé le pack MASM32, vous conseille fortement que les bibliothèques soient toujours construites depuis votre propre système, plutôt qu'elles soient copiées d'ailleurs.
Cette recommandation est importante et à prendre en considération, dans le but d'éviter toute corruption de fichiers essentiels.


Installation WinAsm Studio


1. Installez-le en le dézippant directement sur C:\Program Files\WinAsm Studio


2. Exécutez WinAsm et allez ensuite dans Tools>Options>Files&Paths et vérifiez tous les chemins d'accès, (Le fichier d'aide doit pointer sur WIN32.HLP et le chemin d'accès des projets vers le répertoire de votre code source):

1



3. Un débogueur et un éditeur de ressources peuvent être configurés sous l'onglet: Miscellaneous


1


Quand un projet est ouvert dans WinAsm, vous avez la possibilité de le déboguer en ouvrant Olly par le raccourcis Ctrl+F9. Olly chargera alors l'exécutable du projet en cours.

En revanche pour que cela fonctionne parfaitement, il faut impérativement que les deux checkbox "Use quotes for file name" et également l'autre soient cochées comme sur l'image au dessus.

4. Dans l'onglet 'General', prenez mes paramètres comme référence:


1


5. Un fichier d'aide (WinAsm.chm) est disponible sur le site, il faut le placer dans C:\Program Files\WinAsm Studio\Help.

6. Tools Manager (dans le menu Tool), vous permet d'ajouter des raccourcis pour vos utilitaires favoris dans le menu Tools.
Il y a des outils très utiles dans le répertoire d'installation de masm32 qui valent vraiment la peine d'être ajoutés:
- en particulier MNEMONIX.EXE (qui convertira n'importe quel opcode hex donné en son mnemonic plus significatif).

1



et:
- LIBLIST.EXE (qui vous dira dans quelle DLL réside n'importe quelle API).

J'ai également ajouté des raccourcis pour Table Extractor, RGN Creator et plusieurs fichiers d'aide.


1


1


7. Add-Ins Manager vous permet d'utiliser les Add-Ins disponibles sur le site Web WinAsm.
En particulier, l'Assistant Nouveau Projet qui est une grande amélioration sur la fonctionnalité existante. Pour utiliser un Add-Ins, copiez simplement la DLL dans le répertoire C:\Program Files\WinAsm Studio\AddIns directory,
lancez WinAsm, ouvrez Add-Ins-Manager dans (menu Add-Ins) et configurez-le comme vous le souhaitez.

Je recommande également de consulter le Quick Help System et le fichier d'aide: H2 Context Help add-ins.

QHS ouvre un encadré contenant une définition du mot sous le curseur dans la fenêtre de l'éditeur de code. Les définitions de chaque mot sont stockées en tant que fichiers .rtf séparés dans le répertoire C:\Program Files\WinAsm Studio\Help\QHS\.
Vous pouvez de ce fait facilement ajouter à ce qu'il y a déjà, en écrivant vos propres définitions de mots.

H2 Context Help add-in est excellent si vous installez la Plate-forme SDK. Il requière le logiciel freeware H2 programmé par Rob Chandler et disponible ici : http//helpware.net/mshelp2/h2viewer.htm ça affichera le fichier d'aide MSDN pour le mot sous le curseur dans WinAsm, en appuyant sur F1. Si vous avez l'ancien fichier Win32.hlp configuré comme ci-dessus, il est toujours disponible sous le menu d'aide dans WinAsm.


Diagnostic des erreurs


Dans le cas où la signalisation des erreurs de syntaxe WinAsm ne fonctionne pas, il est alors fort probable que les chemins d'accès soient mal configurés (voir ci-dessus).

Le message d'erreur ci-dessous peut arriver avec masm, si le code source est sur une partition différente du dossier d'installation masm :

fatal error A1000: cannot open file : \masm32\include\windows.inc

Cela peut être évité en précédant les instructions Include et includelib dans le code source par leur chemin d'accès complet, par exemple:
"include C:\masm32\include\windows.inc"
plutôt que:
"include windows.inc".
Cependant, si les chemins sont correctement configurés comme ci-dessus, WinAsm doit passer automatiquement les bons chemins d'accès à l'assembleur et à l'éditeur de liens pour éviter cela.


Personnalisation de l'installation de MASM32


Le pack MASM32 contient la version 6.14 de ml.exe (l'assembleur) et la version 5.12 de link.exe (le lieur) ainsi que d'autres binaires. Le package peut être "mis à jour" en écrasant les fichiers dans C:\masm32\bin\ avec les fichiers de la version 7.10 provenant de Visual Studio 2003. Cela comprend les éléments suivants :

cvtres.exe
dumpbin.exe
editbin.exe
lib.exe
link.exe
ml.exe
nmake.exe
rc.exe
msdis140.dll
msobj71.dll
mspdb71.dll
rcdll.dll

Cette version est considérablement plus rapide lors de l'assemblage et de la liaison de grands projets, et c'est probablement la meilleure version. Des versions plus récentes sont disponibles, mais malheureusement, elles sont infectées par des surcharges de .NET.

Selon votre configuration, vous pouvez rencontrer une erreur après la mise à niveau vers les outils v7.10 lorsque le lieur est utilisé : "Cette application n'a pas pu démarrer car MSVCR71.dll est introuvable". Cela fait partie de la bibliothèque d'exécution C de M$ Visual et si vous ne l'avez pas, vous pouvez télécharger gratuitement la DLL à partir de nombreux sites web - il suffit de faire une recherche sur Google.

Les fichiers PE produits à l'aide des outils de développement de M$ contiennent des octets supplémentaires de "code indésirable" dans l'en-tête DOS. Ceux-ci sont insérés par le lieur Link.exe au moment de la compilation. Dans tous les cas, le DWORD avant-dernier est "Rich". Ces données ne sont pas présentes dans les fichiers produits par d'autres lieurs (par exemple Borland, GCC, fasm, golink, polink, etc.). Ce comportement est observé dans toutes les versions de M$ Link.exe à partir de la version 5.12.8078, qui fait partie du package MASM32, jusqu'à la version 7.10.3077 incluse dans les derniers packages Visual C++.

TLes données incluent des codes cryptés qui identifient les composants utilisés pour compiler le fichier PE. On dit que cela a conduit à la poursuite d'un créateur de virus, car cela a permis à M$ de prouver que le virus avait été compilé sur son PC.

Le DWORD après "Rich"=(la section marquée par "Rich" dans les fichiers PE) est une clé générée par le lieur, qui se répète plusieurs fois dans les données indésirables. Lorsque nous compilons un programme, le compilateur place la chaîne "@comp.id", suivie d'un numéro d'identification de compilateur de taille DWORD, dans notre fichier obj. Lorsque nous lions notre fichier obj, le lieur extrait le numéro comp.id et effectue un XOR avec la clé, puis l'écrit dans les "données indésirables" en tant que deuxième DWORD avant "Rich".

Les variables "@comp.id" sont codées en dur.
ML.EXE Ver.6.14.8444 -> comp.id is 1220FC (You can search: FC2012)
ML.EXE Ver.7.00.9466 -> comp.id is 4024FA (search: FA2440)
ML.EXE Ver.7.10.2179 -> comp.id is 0F0883 (search: 83080F)
ML.EXE Ver.7.10.3077-> comp.id is 0F0C05 (search: 050C0F)
Compilateur d'optimisation C++ version 12.00.8804 pour 80x86 -> comp.id est 0B2306.

Le premier DWORD avant "Rich" est la clé XORée avec une constante codée en dur 536E6144h. Si nous recherchons "@comp.id" dans notre fichier objet et substituons le DWORD qui le suit par des zéros, nous verrons que le deuxième DWORD avant "Rich" est égal à la clé (DWORD après "Rich").

Voici un exemple d'un programme simple de type "hello world" codé en MASM32 et ouvert dans l'éditeur hexadécimal. Les octets supplémentaires sont mis en évidence :



1


Heureusement, il est possible de patcher le linker pour arrêter ce comportement. Il existe un utilitaire appelé SignFinder.exe par Asterix (inclus ici) qui vous permet de trouver rapidement le code à patcher dans n'importe quelle version de Link.exe. En utilisant la version 5.12.8078 de MASM32 comme exemple :



1


Ouvrez Link.exe dans Olly et appuyez sur Ctrl+G. Entrez 0044510C (l'adresse obtenue à partir de SignFinder ci-dessus + l'ImageBase de Link.exe qui est 400000). Ensuite, mettez en surbrillance l'instruction "add" comme indiqué, faites un clic droit et sélectionnez "binary>fill with NOPs" :



1


Cela devrait ressembler à ceci :



1


Enfin, faites à nouveau un clic droit et sélectionnez "Copy to executable>All modifications". Ensuite, cliquez sur "Copy all" et faites un clic droit dans la nouvelle fenêtre qui s'ouvre, puis sélectionnez "Save file" pour enregistrer le fichier. Les autres versions de Link.exe ont la même séquence de code à des emplacements différents, qui est patchée de la même manière.

Si nous utilisons le linker patché pour recompiler le même programme exemple, nous constatons que les octets supplémentaires ont disparu :



1



Les seules autres différences entre les deux fichiers sont bien sûr e_lfanew (le décalage du PE header), TimeDateStamp et SizeOfHeaders (qui est effectivement le décalage de la première section). Consultez mon tutoriel sur les fichiers PE pour plus d'informations à ce sujet.


Assemblage avec une extension de shell.


Cette astuce vous permettra d'assembler des fichiers .asm à partir du menu clic droit dans l'explorateur, ce qui peut vous faire gagner du temps pour de petits travaux rapides ;-)

Tout d'abord, copiez et collez ce script dans votre éditeur de texte, enregistrez-le sous le nom "assemble.bat" et placez-le dans le répertoire "C:\masm32\bin" :



@if not exist %1.rc goto NoResource

rc /foRes.res %1.rc
cvtres /machine:ix86 /out:Res.obj Res.res
del Res.res
@if errorlevel 1 pause

ml /c /coff /Fo%1.obj %1
@if errorlevel 1 pause
link /SUBSYSTEM:WINDOWS %1.obj res.obj
@if errorlevel 1 pause
del %1.obj
del res.obj

@goto Exit

:NoResource
ml /c /coff /Fo%1.obj %1
@if errorlevel 1 pause
link /SUBSYSTEM:WINDOWS %1.obj
@if errorlevel 1 pause
del %1.obj

:Exit


Maintenant, définissez la variable d'environnement PATH pour inclure MASM. Pour Windows XP, faites un clic droit sur "Poste de travail" et sélectionnez "Propriétés". Cliquez sur l'onglet "Avancé" puis sur le bouton "Variables d'environnement". Mettez en surbrillance PATH dans la partie inférieure et cliquez sur "Modifier". Ajoutez "C:\masm32\bin;" à la fin de la variable PATH. Elle devrait ressembler à quelque chose comme ça :

%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
C:\masm32\bin;

Enfin, dans l'explorateur Windows, allez dans Outils > Options des dossiers > Types de fichiers. Cliquez sur "Nouveau" et saisissez ".asm" dans la zone "Extension de fichier". Maintenant, cliquez sur "Avancé" et saisissez "Module d'assemblage" dans la première zone de saisie. Cliquez sur "Nouveau" et saisissez "Assembler" dans la zone "Action". Enfin, cliquez sur "Parcourir" et accédez à assemble.bat dans la zone "Application".

Maintenant, si vous faites un clic droit sur n'importe quel fichier .asm dans l'explorateur Windows, vous devriez avoir l'option "Assemble". Le fichier batch compilera également et liera un script de ressources s'il est présent.

 


Copyright (C)- xtx Team (2021)

XHTML valide 1.1 CSS Valide !