A partir de la version "Update 4" de WINDEV (220071), le framework 32 bits (\Programmes\Framework\Win32x86) a été enrichi de 5 nouveaux modules : wdtst_nonx.exe, wdtst_User_nonx.exe, wdtst_Privilège_nonx.exe, wdtst_Admin_nonx.exe et wdexe_nonx.exe.

 

Afin de comprendre le rôle de ces modules, il faut d'abord détailler :

  • comment sont lancés les tests "Go" depuis l'éditeur,
  • comment sont créés les exécutables,
  • le rôle du flag de compilation "NX" (No eXécute) ...

 

Tests "Go" et exécutable :

Le dossier du framework contient les exécutables suivants nécessaires aux tests "Go" et à la création de l'exécutable.

  • wdtst.exe est l'exécutable servant à tester les éléments (fenêtres, états, requêtes...) d'un projet, ou le projet complet lorsque l'on fait "Go" dans l'éditeur, sans manifeste Windows,
  • à l'identique wdtst_User.exe, wdtst_Prévilège.exe et wdtst_Admin.exe correspondent aux exécutables lancés lorsque l'on fait un test, mais avec un manifeste utilisateur, utilisateur avec privilège ou administrateur,
  • wdexe.exe est l'exécutable servant de base à la création des exécutables 32 bits issus des projets. Lors de la création de l'exécutable d'une application, c'est ce module wdexe.EXE qui est "personnalisé" (nom, information de version, signature, configuration de l'utilisation du framework...) avec les informations données dans l'assistant de création de l'exécutable.

 

Flag de compilation "NX" (No eXécute) :

Les exécutables et DLL 32 bits pour Windows peuvent être compilés avec l'option "NX" (No eXécute). C'est maintenant vivement recommandé pour accroître la sécurité, c'est obligatoire par exemple pour faire certifier une application par Microsoft. En effet, une application compilée sans cette option peut permettre à son auteur d'exécuter un code qu'il a placé à un emplacement spécifique de la mémoire. Cette technique a été utilisée par des applications malveillantes, ce qui explique qu'elle soit maintenant interdite. De nombreux sites traitent dans le détail ce sujet et les failles associées (wiki, vulnérabilités de type "Stack-based overflow").


Les exécutables wdexe.exe et wdtst*.exe de WINDEV 22 ont tous l'option "NX". Donc par défaut, tous les tests sont lancés avec un exécutable compilé avec le flag "NX", mais surtout les exécutables compilés et déployés profitent également du flag "NX". A noter que cette nouveauté de WINDEV 22 n'est pas comptabilisée dans les nouveautés annoncées !


Le rôle des nouveaux modules wdtst_nonx* et wdexe_nonx.exe se dévoile maintenant : il s'agit des modules pour tester ou créer l'exécutable sans le flag "NX", donc comme dans les versions de WINDEV antérieures à la 22. Par exemple il est ainsi possible de renommer dans le dossier du framework wdexe.exe en wdexe_nx.exe, pour ensuite renommer wdexe_nonx.exe en wdexe.exe, et le prochain exécutable créé depuis WINDEV n'aura pas le flag "NX". C'est moins sûr et déconseillé, c'est pour cette raison que cette possibilité n'est accessible que "manuellement" par copie de fichiers plutôt que par une option de compilation du projet, ou une simple case à cocher dans l'assistant de création de l'exécutable.

 

Une question reste en suspend, pourquoi laisser cette possibilité de créer un exécutable sans le flag NX, donc moins sûr … C'est comme bien souvent, pour vérifier l'expression "il faut une exception pour confirmer la règle" ! Aujourd'hui tous les exécutables ou DLL doivent avoir le flag NX. Donc pour toutes les applications WINDEV 22, le fait d'avoir le flag NX par défaut ne pose aucune difficulté, sauf dans un cas exceptionnel : si l'exécutable utilise une DLL tierce (Activex, pilote ODBC d'accès à une base, ...), qui elle n'a pas le flag NX et qui exécute du code en mémoire via ce qui peut être une faille de sécurité : l'application sera stoppée par Windows en faute de protection générale (GPF). Dans ce cas précis deux solutions :

  • solliciter l'éditeur de la DLL afin d'avoir une version actualisée de la DLL avec le flag NX : solution vivement recommandée,
  • créer l'exécutable à partir de wdexe_nonx.EXE, donc sans l'option NX : solution à n'utiliser que si l'on ne trouve pas de mise à jour de la DLL. Mais dans ce cas, prévoir à moyen terme une alternative à l'utilisation de la DLL. Car avec la sécurité sans cesse accrue des systèmes, il est assez probable qu'un jour les exécutables sans le flag NX ne puissent plus être exécutés.

 

Mise à jour 12/2/2018 :

A partir de la version "Update 1" de WINDEV 23 (230042J), la possibilité de créer un exécutable à partir de WDExe_Nonx.EXE est intégrée à la description de la configuration courante. Il n'est donc plus nécessaire de copier/renommer les fichiers dans le dossier \Framework\Win32x86\. Il suffit de cocher "Désactiver la prévention d'exécution des données" dans le volet "Général" de la description de la configuration :


A noter que l'option est au niveau de la configuration du projet et non pas de la description du projet lui-même. Cela permet avec un même projet, de créer si besoin un exécutable avec l'option, l'autre sans grâce à la génération multiple.

 

 

< Retour

Publier un commentaire : 
Votre adresse email ne sera pas publiée