Sta accadendo qualcosa di molto strano quando scelgo come destinazione Windows 8.1 quando compilo il mio driver.__security_init_cookie nel driver di Windows causa il controllo dei bug KERNEL_SECURITY_CHECK_FAILURE
Non appena viene caricato, si blocca con il bugcheck KERNEL_SECURITY_CHECK_FAILURE
, il primo parametro 6, che significa "The stack cookie security cookie was not properly initialized by the loader
".
Ciò potrebbe essere causato dalla creazione di un driver da eseguire solo su Windows 8 e dal tentativo di caricare l'immagine del driver su una versione precedente di Windows. Per evitare questo problema, è necessario creare il driver per eseguire su una versione precedente di Windows. "Questo errore non si verifica quando scelgo come destinazione Windows 7.
Sono stato in grado di individuare esattamente dove si verifica questo errore. sta accadendo nella funzione __security_init_cookie
che è chiamato da GsDriverEntry
.
INIT:000000014000C1B4 __security_init_cookie proc near ; CODE XREF: GsDriverEntry+10p
INIT:000000014000C1B4 mov rax, cs:__security_cookie
INIT:000000014000C1BB test rax, rax
INIT:000000014000C1BE jz short loc_14000C1DA
INIT:000000014000C1C0 mov rcx, 2B992DDFA232h
INIT:000000014000C1CA cmp rax, rcx
INIT:000000014000C1CD jz short loc_14000C1DA
INIT:000000014000C1CF not rax
INIT:000000014000C1D2 mov cs:__security_cookie_complement, rax
INIT:000000014000C1D9 retn
INIT:000000014000C1DA ; ---------------------------------------------------------------------------
INIT:000000014000C1DA
INIT:000000014000C1DA loc_14000C1DA: ; CODE XREF: __security_init_cookie+Aj
INIT:000000014000C1DA ; __security_init_cookie+19j
INIT:000000014000C1DA mov ecx, 6
INIT:000000014000C1DF int 29h ; Win8: RtlFailFast(ecx)
da questo smontaggio possiamo vedere che esegue 2 assegni.
The first check checks if rax (__security_cookie) is zero and the
second check compares it to 2B992DDFA232h.
Tuttavia, 012.378.è dichiarato nel mio binario come 2B992DDFA232h
, e quindi l'interrupt non dovrebbe mai essere chiamato, ma in qualche modo lo è.
Hai dichiarato '__security_cookie' manualmente? Tale codice fallirà ** (chiama 'RtlFastFail') se' __security_cookie == 2B992DDFA232h' perché significa che il cookie è stato lasciato al suo valore predefinito (non sicuro). C'è del codice altrove (cerca "KeTickCount") che dovrebbe calcolare un nuovo cookie di sicurezza casuale. – nneonneo
Ah sì, hai ragione @nneonneo, ho interpretato il flusso di controllo in modo errato. Per rispondere alla tua domanda, no, non ho dichiarato manualmente __security_cookie. Ho dato un'occhiata al file binario di Windows 7 e ha effettivamente calcolato un nuovo cookie con KeTickCount, tuttavia il codice equivalente è completamente mancante nel file binario di Windows 8.1. – InvokeStatic
Suppongo che tu stia testando il driver su un sistema Windows 8.1? La domanda non dice. –