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 :
-
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.
-
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).
-
Déterminer l'adresse de base : Obtenez l'adresse de base du processus à partir de [EBX 8] dans la structure PEB.
-
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.
-
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.
-
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.
-
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!