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!