L'aggancio dell'API è eseguito da un processo in una pagina condivisa, visibile a tutti gli altri processi?

0

Supponiamo di avere un eseguibile che aggancia l'API CreateFileW che si trova in Kernel32.dll , che è condivisa a livello globale attraverso il sistema per tutti gli altri processi. Dall'aggancio intendo che ho sovrascritto il prologo di CreateFileW

jmp Hook_CreateFileW
nop
// ...rest of original CreateFileW code...

Il mio dubbio ::

Da quanto so, Kernel32.dll verrà caricato in un indirizzo che è globale in tutto il sistema e le sue pagine sono condivise tra i processi. Quindi, il hooking CreateFileW nel mio exe, significa che è agganciato anche per tutti gli altri processi? Qualsiasi altro processo, che chiamerebbe CreateFileW proverà a saltare Hook_CreateFileW ?

    
posta Abhineet 24.06.2014 - 09:32
fonte

1 risposta

0

No, tutti gli hook dell'API (IAT, EAT, Detouring e così via) riguardano solo il processo che stai modificando mentre il loader PE cattura una copia locale di Kernel32 invece di usare il codice condiviso.

Dovresti iniettare tutti i processi con il tuo hook per effettuare tutti i processi che richiederanno SeDebugPrivilege per aprire determinati processi di sistema.

Se vuoi approfondire puoi collegare SSDT nel kernel o modificare direttamente .text, ma c'è un problema con x64 PatchGuard.

Che cosa ti porta ad agganciare comunque CreateFileW? Forse c'è una soluzione migliore per le tue esigenze?

Il motivo per cui vedi lo stesso indirizzo tra i processi puoi impostare un indirizzo di base preferito per i tuoi moduli. Se l'indirizzo non è in uso, riceverai lo spazio di memoria, in caso contrario verrà spostato. Poiché Kernel32 (a seconda di PE) viene caricato in fasi molto precoci improbabile, gli altri moduli non di sistema. Quindi, Kernel32 generalmente otterrà sempre l'indirizzo di base preferito. Puoi comunque spostarlo, quindi non fare affidamento sull'indirizzo statico.

    
risposta data 24.06.2014 - 09:46
fonte

Leggi altre domande sui tag