Maison > développement back-end > C++ > le corps du texte

Comment puis-je exécuter un EXE en mémoire à l'aide de CreateProcess ?

Barbara Streisand
Libérer: 2024-11-02 14:15:02
original
883 Les gens l'ont consulté

How Can I Execute an In-Memory EXE using CreateProcess?

Exécuter un EXE en mémoire à l'aide de CreateProcess

Introduction :

Création d'un processus à partir de un tampon mémoire dans CreateProcess présente un défi unique. Cet article explore une méthode qui vous permet de le faire, éliminant le besoin d'écrire l'exécutable dans un fichier avant l'exécution.

Contexte :

Dans l'industrie du jeu, la distribution d'exécutables non chiffrés peut conduire au contournement des DRM. Pour répondre à ce problème, les développeurs de jeux envoient souvent des fichiers EXE chiffrés aux distributeurs qui les enveloppent avec un DRM propriétaire avant de les diffuser aux joueurs.

Création d'une solution de correctifs :

Quand un Si un crash se produit dans le fichier EXE, la distribution d'un correctif via les canaux DRM peut prendre des jours ou des semaines. Pour accélérer le processus de mise à jour des correctifs, les développeurs peuvent intégrer l'EXE d'origine dans un fichier de données crypté. Cela permet d'appliquer facilement des correctifs sans affecter le DRM.

Mise en œuvre :

La solution consiste à créer un processus à partir de l'EXE en mémoire à l'aide de CreateProcess avec CREATE_SUSPENDED. drapeau. Cet indicateur permet de modifier le processus suspendu avant son exécution.

Récupération des informations sur le processus :

En obtenant le contexte de thread du processus suspendu, vous pouvez accéder à l'environnement du processus Structure de bloc (PBE). Le PBE contient l'adresse de base de l'image, ce qui est crucial pour une manipulation ultérieure.

Chargement de l'EXE en mémoire :

Une fois que vous avez l'adresse de base, vous peut charger l'EXE en mémoire dans l'espace mémoire du processus suspendu à l'aide de WriteProcessMemory. Cependant, il peut être nécessaire d'ajuster l'alignement ou d'allouer de la mémoire supplémentaire en fonction des différences de taille et d'alignement.

Correction et exécution :

Pour terminer le processus, corrigez la base adresse de l'EXE en mémoire dans le PBE du processus suspendu et mettez à jour le contexte du thread avec le nouveau point d'entrée. Enfin, utilisez ResumeThread pour reprendre l'exécution du processus modifié à partir de l'EXE en mémoire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!