Bonjour,
je suis en train de faire joujou avec la bibliothèque Kernel32 (dont je découvre toute l'étendue) et je tombe sur un mystère mystérieux (qui ne fait peut être que révéler mon insondable ignorance en programmation système) :
Je fais un OpenProcess avec (entre autres) le droit PROCESS_VM_WRITE, puis je modifie la mémoire du processus en question avec WriteProcessMemory.
Et là, bizarrement, selon le processus, ça marche ou pas.
Attention, je ne suis pas fou : je ne fais ça qu'avec des processus non-système.
Au début avec des applis à moi (bien gentilles, écrites par moi, en C++),
puis avec des applis un peu plus corsées, telles que Chrome.
Enfin, j'ai essayé avec avec une VM (un émulateur de tablette sous android) et c'est la que ça s'est mis à aller de travers...
D'où ma question :
Comment un processus non-système,
lancé par moi,
peut-il se laisser ouvrir avec droits en lecture/écriture (PROCESS_VM_READ|PROCESS_VM_WRITE),
me laisser lire sa mémoire (par ReadProcessMemory),
mais m'interdire d'y écrire (par WriteProcessMemory) en me renvoyant une erreur 487 (Tentative d'accès à une adresse non valide) ?
Petites précisions :
- le processus dont je veux modifier la mémoire n'a pas été lancé en tant qu'administrateur,
- mon appli de modification de la mémoire, elle, a est lancée en tant qu'administrateur
- la même appli fonctionne sur d'autres processus...
Merci d'avance !
Partager