Espace d’adressage
Les processus disposent d’une quantité limitée d’espace d’adressage. Lors de l’exécution de 32 bits, un processus dispose d’environ 2 Go ( <0x7fffffff) of process address space to play with, and 2 GB (> 0x8000000) du mode noyau. Toutes les allocations de mémoire, les mappages de fichiers, DLLs et les autres opérations que vous chargez se produisent dans la fenêtre applications 2-GB.
Relocalisation
Une DLL spécifie où elle veut être chargée. Si vous essayez de charger une DLL dont l’adresse de base est déjà utilisée, le chargement échoue ou DLL doit être rebasé.
Fonctionnement
Vous avez deux DLLs ( x.DLL et y.DLL ). Tous deux ont été compilés dans Visual Studio .NET . Dans Visual Studio, la valeur par défaut "adresse de base préférée de l'" (emplacement de mémoire vers lequel elle est chargée) est 0x10000000.
- Exécuter MyTestApp.exe .
- LoadLibrary ( x.DLL );
- LoadLibrary ( y.DLL );
Le
x.DLL est chargé dans 0x10000000 ;
y.DLL tente de se charger à 0x10000000, mais il ne peut pas car
x.DLL il utilise déjà cet espace d’adressage. Par conséquent,
y.DLL est "basé sur". Le système d’exploitation sélectionne un nouvel emplacement pour charger le
DLL . Dans le cadre du processus de chargement, le système d’exploitation doit appliquer les corrections "" afin qu'
y.DLL il s’exécute correctement à un autre emplacement que 0x10000000.
Un est optimisé pour se charger à son "adresse de base de
DLL "
préférée. L’application des
corrections"" présente une surcharge. Votre
DLLs charge est plus rapide si vous configurez une "adresse de base de" préférée. Il ne doit pas entrer en conflit avec une "adresse de base de" préférée d’une autre
DLL charge de processus. En d’autres termes, MACC injecte dans le processus et si un autre élément est déjà injecté dans celui-ci, le processus se bloque. Pour éviter que cette situation ne se produise, la
DLL est rebasée (injectée dans un autre processus).
Remarque : La modification de la
DLL MACC relocalisation à partir de ne signifie pas qu’elle n’est pas injectée. Une injection est nécessaire pour
SAU/MP/Execution que Control puisse obtenir les arguments de ligne de commande lors du démarrage d’un interpréteur de script. Elle est également nécessaire lors de l’exécution en mode interactif.
Si vous souhaitez explicitement contourner l’injection dans un processus particulier, vous pouvez ajouter une
attr -w règle ou supprimer ce script interpréteur de la liste de
scripts .
Lorsque la relocalisation est définie, la modification de la
DisableDeviceGuardCompat configuration peut sembler être une solution temporaire. Il ne l’est pas. Tout ce que nous faisons est de relocalisation d’un autre
DLL (raccordement du
LdrLoadDLL plus profond ou plus haut dans la pile –
kernel32.DLL fin de l’appel
NTDLL.DLL ).
Si
DeviceGuardCompat est désactivé sur l’hôte et que
DeviceGuard est activé sur votre poste client, le système d’exploitation n’autorise pas l’injection. Il bloque l’exécution du fichier binaire.
DeviceGuard est une fonctionnalité du système d’exploitation (matériel et logiciel) qui empêche les équipements d’exécuter des applications non autorisées. Elle permet l’exécution d’applications autorisées à l’aide d’une fonctionnalité appelée
intégrité du code configurable.
"DeviceGuardCompat" n'
a rien à faire avec "Microsoft DeviceGuard".
Notre mécanisme d’injection détecte lorsqu’un processus charge une bibliothèque (DLL). Cette détection est effectuée en connaissant l’adresse virtuelle relative (RVA) de la fonction LoadLibrary. Lorsque DisableDeviceGuardCompat est activé, l’adresse RVA est
LdrLoadDLL recherchée, mais dans
NTDLL.DLL . A l’inverse, si
DisableDeviceGuardCompat est désactivé (par défaut), nous le
Kernel32.DLL recherchons
LoadLibraryW dans. Une fois cette adresse terminée, nous autorisons le processus injecté à communiquer avec notre pilote, lorsque certaines fonctions sont appelées.
DisableDeviceGuardCompat
ne désactive pas ou n' ignore pas le
scinject.DLL à injecter. Il change la fonction qui est raccrochée. Il n’y a aucun risque associé à la modification de l’injection
DLL , car le système est toujours en mesure de protéger le système.