Maison  >  Article  >  développement back-end  >  Comment créer des processus directement à partir de tampons de mémoire sans stockage de fichiers ?

Comment créer des processus directement à partir de tampons de mémoire sans stockage de fichiers ?

DDD
DDDoriginal
2024-11-02 00:12:02649parcourir

How Can Processes Be Created Directly From Memory Buffers Without File Storage?

Création de processus à partir de tampons de mémoire

Dans cet article, nous explorerons une technique pour générer des processus directement à partir de tampons de mémoire sans avoir besoin de stockage de fichiers. Cela peut être des scénarios utiles impliquant l'injection de code ou l'application de correctifs sécurisés, comme dans la trame de fond fournie.

La panne technique

Windows fournit l'API CreateProcess avec l'indicateur CREATE_SUSPENDED, permettant aux processus d'être suspendus jusqu'à ce que la fonction ResumeThread soit invoquée. Cette fenêtre offre la possibilité de manipuler la mémoire et le contexte du processus avant l'exécution.

  1. Suspendre et inspecter le processus : Suspendez le processus à l'aide de CreateProcess(CREATE_SUSPENDED) et récupérez le contexte du thread suspendu à l'aide GetThreadContext.
  2. Identifier l'adresse de base : Le registre EBX contiendra un pointeur vers la structure du bloc d'environnement de processus (PBE). L'ImageBaseAddress peut être trouvée au décalage 8 dans le PBE.
  3. Préparez l'EXE en mémoire : Si les adresses de base du processus suspendu et de l'EXE en mémoire correspondent et l'EXE en mémoire EXE est plus petit ou de taille égale, écrivez-le directement dans la mémoire du processus suspendu à l'aide de WriteProcessMemory.
  4. Magie requise : Si les conditions de l'étape 3 ne sont pas remplies, démapper l'image d'origine ( ZwUnmapViewOfSection), allouer de la mémoire à l'aide de VirtualAllocEx et écrire l'EXE en mémoire à l'aide de WriteProcessMemory.
  5. Patch PEB et Thread Context : Mettre à jour l'ImageBaseAddress du processus suspendu avec l'adresse de base de l'EXE en mémoire , corrigez l'adresse EntryPoint du contexte de thread et enregistrez le contexte modifié à l'aide de SetThreadContext.
  6. Reprendre l'exécution : Reprenez le processus suspendu à l'aide de ResumeThread pour exécuter l'EXE en mémoire.

Conclusion

En suivant ces étapes, il est possible de créer des processus à partir de tampons mémoire, offrant une flexibilité dans les scénarios d'injection de code et de correctifs sécurisés.

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