Attrapant la mémoire d'un autre processus
-
21-09-2019 - |
Question
dans Windows, permet de dire que je l'ai utilisé l'injection de DLL pour entrer dans un autre processus. Je l'ai aussi fait quelques screencaptures de la mémoire sur le processus que j'ai injecté dans et connaître l'emplacement des données que je veux sortir. Disons que il existe des données dans l'autre processus à 0xAAAAAAAA qui contient une certaine valeur. Comment puis-je saisir cette valeur de ce processus afin que je puisse l'utiliser dans mon application injecter? Depuis que je suis injecté dans le processus, puis-je utiliser quelque chose comme memcpy?
memcpy(value, 0xaaaaaaaa, 10);
Je suppose qu'il est probablement plus impliqué que cela?
EDIT:. Pour les réponses ci-dessous, je ne vois pas comment WM_COPYDATA me aide que pour l'envoi de données à une autre application, et non pour la récupération de données à partir d'une application existante
La solution
Vous devriez pouvoir utiliser le ReadProcessMemory fonction.
Autres conseils
Dans Windows tous les processus adresses de sa propre mémoire. Cela signifie que vous ne pouvez pas faire quelque chose comme memcpy ayant deux pointeurs qui pointent à la mémoire de deux processus différents.
Vous pouvez envisager toute option de communication interprocessus: fichiers mappés en mémoire, sockets, des pipes nommés, des messages de fenêtre d'événement
.Voici plus d'informations sur IPC
Essayez WM_COPYDATA et prendre l'aide de MSDN concernant.
Les mécanismes IPC suivants sont pris en charge par Windows:
Presse-papiers
COM
Data Copy
DDE
Cartographie du fichier
mailslots
pipes
RPC
Windows Sockets
plus de détails ici Interprocess Communications
dans votre cas, j'utiliser WM_COPYDATA message