Maison  >  Article  >  développement back-end  >  Pouvez-vous exécuter un EXE à partir d’une mémoire tampon à l’aide de CreateProcess ?

Pouvez-vous exécuter un EXE à partir d’une mémoire tampon à l’aide de CreateProcess ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 12:04:30117parcourir

Can You Run an EXE from a Memory Buffer Using CreateProcess?

Exécuter un EXE à partir d'un tampon mémoire à l'aide de CreateProcess

La fonction CreateProcess est couramment utilisée pour lancer un exécutable (EXE) stocké dans un fichier . Cependant, est-il possible d’exécuter un EXE directement à partir d’une mémoire tampon sans l’écrire dans un fichier ? Cette question se pose dans des scénarios tels que l'application de correctifs de jeu, où vous devrez peut-être mettre à jour un EXE encapsulé sans désactiver DRM.

Solution :

Oui, il est possible d'exécuter un EXE à partir d'une mémoire tampon à l'aide de CreateProcess avec les étapes suivantes :

  1. Suspendre la création du processus : Appelez CreateProcess avec l'indicateur CREATE_SUSPENDED pour suspendre le processus. Cela laisse le temps de modifier la mémoire du processus.
  2. Obtenir le contexte du processus : Récupérez le contexte du thread suspendu à l'aide de GetThreadContext. Le registre EBX contient un pointeur vers la structure Process Environment Block (PEB).
  3. Déterminer l'adresse de base : Obtenez l'adresse de base du processus à partir de [EBX 8] dans la structure PEB.
  4. Copier l'EXE en mémoire : Écrivez l'EXE en mémoire dans l'espace mémoire du processus suspendu à l'aide de WriteProcessMemory si les adresses de base et les tailles d'image correspondent.
  5. Ajuster les conditions incompatibles : En cas de conditions incompatibles, annulez le mappage de l'image d'origine à l'aide de ZwUnmapViewOfSection, allouez de la mémoire à l'aide de VirtualAllocEx, écrivez l'EXE en mémoire et corrigez le PEB->ImageBaseAddress.
  6. Définir le point d'entrée : Réécrivez l'adresse EntryPoint dans le contexte du thread avec le point d'entrée de l'EXE en mémoire.
  7. Reprendre le processus : Enfin, reprenez le processus suspendu en utilisant ResumeThread.

En suivant ces étapes, vous pouvez exécuter efficacement un EXE à partir d'une mémoire tampon sans avoir à l'écrire dans un fichier, répondant ainsi à l'exigence de distribuer des correctifs sans perturber le wrapper DRM.

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!

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