Personnalisation d'un fichier de manifeste E

Personnalisez le manifeste EXE Windows pour contrôler les privilèges, activer la prise en charge DPI et renforcer la sécurité en modifiant le manifeste par défaut avec des outils de ressources. Apprenez à créer, modifier et signer des manifestes pour une exécution fiable et une gestion de confiance améliorée.

Personnalisation d’un fichier de manifeste EXE

Lorsque vous construisez un projet pour une plateforme cible Windows, RAD Studio inclut automatiquement un fichier de manifeste d’application. Vous pouvez utiliser le fichier de manifeste d’application par défaut comme base pour votre fichier de manifeste d’application personnalisé :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 <dependency>
   <dependentAssembly>
     <assemblyIdentity
       type="win32"
       name="Microsoft.Windows.Common-Controls"
       version="6.0.0.0"
       publicKeyToken="6595b64144ccf1df"
       language="*"
       processorArchitecture="*"/>
   </dependentAssembly>
 </dependency>
 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
   <security>
     <requestedPrivileges>
       <requestedExecutionLevel
         level="asInvoker"
         uiAccess="false"/>
       </requestedPrivileges>
   </security>
 </trustInfo>
</assembly>

Création d’un fichier de manifeste d’application personnalisé

Pour cela, vous avez besoin d’un programme de piratage/inspection des ressources qui vous permet de modifier le manifeste d’un fichier EXE.

Je utilise personnellement Angus Johnson’s Software depuis longtemps, car c’est simple et agréable à utiliser.

Image1

Modification du niveau d’élévation requis

Le manifeste d’application par défaut déclare le niveau d’élévation requis comme asInvoker. Cela signifie que votre application aura le même niveau d’élévation que son processus parent. Si vous souhaitez élever votre application au niveau d’administrateur de Windows, modifiez simplement la valeur de l’attribut level dans la balise requestedExecutionLevel de asInvoker à requireAdministrator.

Vous pouvez ajouter cela à la section TrustInfo, et à la balise <security> où vous ajouterez à la fois le Level et le uiAccess au niveau d’exécution requis :

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>
  • uiAccess

    • false — L’application n’a pas besoin de piloter l’entrée de l’interface utilisateur d’une autre fenêtre sur le bureau. Les applications qui ne fournissent pas d’accessibilité doivent définir ce drapeau sur false. Les applications qui sont requises pour piloter l’entrée vers d’autres fenêtres sur le bureau (clavier virtuel, par exemple) doivent définir cette valeur sur true.

    • true — L’application est autorisée à contourner les niveaux de protection de l’interface utilisateur pour piloter l’entrée vers des fenêtres à privilèges plus élevés sur le bureau. Ce paramètre ne doit être utilisé que pour les applications d’accessibilité de l’interface utilisateur.

  • Niveau : Ici, vous trouverez un tableau expliquant le niveau déclaré dans le manifeste d’application et son comportement

Table

**

Vous trouverez plus d’informations sur le site Web de Microsoft : /MANIFESTUAC (Intègre des informations UAC dans le manifeste)

Modification de la prise en charge du DPI

Pour créer une application DPI-aware, vous devez déclarer la prise en charge du DPI dans le manifeste de l’application. Par exemple, pour déclarer que votre application est DPI-aware par moniteur, ajoutez le code suivant avant la balise de fermeture </assembly> :

<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
   <asmv3:windowsSettings
        xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
     <dpiAware>True/PM</dpiAware>
   </asmv3:windowsSettings>
</asmv3:application>

Test des privilèges d’administration

Le code suivant peut servir de test rapide pour vérifier si votre application nécessite (et obtient correctement) les privilèges de niveau Administrateur. Déclarez le niveau d’élévation requis de votre application comme requireAdministrator et exécutez la procédure suivante :

C++ :

#include <System.Win.Registry.hpp>
#include <Winapi.Windows.hpp>

void __fastcall isAdmin(TObject *Sender){
    TRegistry *reg;
    bool openResult;
    reg = new TRegistry(KEY_READ);
    reg->RootKey = HKEY_LOCAL_MACHINE;
    reg->Access = KEY_WRITE;
    openResult = reg->OpenKey("Software\\MyCompanyName\\MyApplication\\" , true);
    if (openResult != true){
        MessageDlg("Impossible d'écrire dans le registre. Votre application n'a PAS les privilèges de niveau Administrateur.",
                    TMsgDlgType::mtError, mbOKCancel, 0);
    }else{
        MessageDlg("Écriture dans le registre autorisée. Votre application a les privilèges de niveau Administrateur.",
                    TMsgDlgType::mtInformation, mbOKCancel, 0);
    }
    reg->CloseKey();
    reg->Free;
}
  • L’application affiche l’un des messages suivants :

    • Impossible d’écrire dans le registre. Votre application n’a PAS les privilèges de niveau Administrateur.

    • Écriture dans le registre autorisée. Votre application a les privilèges de niveau Administrateur.

Ce test fonctionne car vous avez besoin de privilèges de niveau Administrateur pour écrire dans la section HKEY_LOCAL_MACHINE\Software du registre.
Le snippet ne modifie rien dans le registre, il ne demande que la permission d’écriture.

Assurez-vous de construire votre application et de l’exécuter en dehors de l’IDE, car l’IDE déboguera l’application avec les privilèges d’administrateur par défaut (sans respecter votre manifeste d’application).

© 2021 - Sofiane Hamlaooui - Faire du monde un endroit meilleur 🌎

Obtenir des analyses IA sur cet article

I just do cybersecurity stuff.

Discussion

Laisser un commentaire

Les commentaires des invités seront examinés avant d'apparaître sur le site.

Aucun commentaire pour le moment. Soyez le premier à commencer la discussion !

Suggestions ou signaler un bug ? Contactez-nous !