Charger un EXE à partir d'une mémoire tampon sans écrire dans un fichier
De nombreux développeurs sont confrontés au défi de lancer un EXE à partir d'une mémoire tampon sans avoir besoin pour la création de fichiers. Cet article explore la solution à ce problème courant, en utilisant la fonction CreateProcess et une technique dérivée de la recherche universitaire.
Windows fournit la fonction CreateProcess, qui permet la création de nouveaux processus. L'indicateur CREATE_SUSPENDED permet la suspension du processus jusqu'à sa reprise explicite. Cette suspension fournit le temps nécessaire pour manipuler le contexte du processus.
La fonction GetThreadContext récupère le contexte du thread suspendu, EBX contenant un pointeur vers la structure Process Environment Block (PEB). L'ImageBaseAddress, qui est cruciale pour localiser l'adresse de base du processus, est stockée au décalage 8 dans le PEB.
Une fois l'adresse de base du processus suspendu déterminée, l'EXE en mémoire peut être chargé. Si les adresses de base de l'EXE en mémoire et du processus suspendu s'alignent et que la taille de l'EXE en mémoire est inférieure ou égale à celle du processus suspendu, WriteProcessMemory peut être utilisé pour écraser directement l'espace mémoire du processus suspendu.
Toutefois, des démarches supplémentaires sont nécessaires lorsque les conditions précitées ne sont pas remplies. La fonction ZwUnmapViewOfSection démappe l'image d'origine, tandis que VirtualAllocEx alloue suffisamment de mémoire dans l'espace mémoire du processus suspendu. L'EXE en mémoire est ensuite écrit dans cet espace alloué à l'aide de WriteProcessMemory.
Par la suite, BaseAddress de l'EXE en mémoire est corrigé dans le PEB->ImageBaseAddress du processus suspendu. L'adresse EntryPoint du processus suspendu est réécrite avec le point d'entrée de l'EXE en mémoire, en utilisant le registre EAX du contexte de thread. La fonction SetThreadContext enregistre le contexte de thread modifié et, enfin, ResumeThread exécute le processus corrigé.
Grâce à ce processus élaboré, les développeurs peuvent éviter d'avoir à écrire l'EXE dans un fichier et à le lancer de manière transparente à partir d'une mémoire tampon, assurer une distribution efficace et sécurisée des mises à jour et des correctifs.
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!