2012-03-18 17 views
5

Dopo aver scritto una sorta di driver per Windows, che ha dovuto intercettare l'interazione del driver di visualizzazione nativo con il sistema operativo. Il driver di visualizzazione nativo è costituito da un driver miniport e una DLL caricata da win32k.sys nello spazio di sessione. Il mio obiettivo era quello di intromettermi tra win32k.sys e quella DLL. Inoltre, il sistema potrebbe avere diversi driver di visualizzazione, ho dovuto collegarli tutti.Windows driver di visualizzazione hooking, 64 bit

Ho creato un driver WDM standard, che è stato configurato per il caricamento all'avvio del sistema (ad esempio prima di win32k). Durante l'inizializzazione ha agganciato lo ZwSetSystemInformation, applicando patch all'SSDT. Questa funzione viene chiamata dal sistema operativo ogni volta che carica/scarica una DLL nello spazio della sessione, che è esattamente ciò di cui ho bisogno.

Quando ZwSetSystemInformation viene richiamato con SystemLoadImage parametro - uno dei suoi parametri è il puntatore a una struttura SYSTEM_LOAD_IMAGE, e la sua ModuleBase è il mappaggio base del modulo. Quindi analizzo l'immagine mappata, patch, il suo punto di ingresso con la mia funzione, e il resto è semplice.

Ora ho bisogno di portare questo driver su un 64-bit di Windows. Inutile dire che non è affatto un compito banale. Finora ho trovato i seguenti ostacoli:

  • Tutti i driver devono essere firmati
  • PatchGuard
  • SSDT non viene esportato direttamente.

Se ho capito bene, PatchGuard e la verifica della firma dei driver potrebbero essere disattivati, il driver dovrebbe essere installato su una macchina dedicata e potremmo torturarlo nel modo desiderato.

Ci sono trucchi per localizzare l'SSDT, secondo le fonti online.

Tuttavia, recentemente ho scoperto che esiste una funzione denominata PsSetLoadImageNotifyRoutine. Può semplificare notevolmente l'attività e aiutare a evitare trucchi sporchi.

La mia domanda è:

  • Se uso PsSetLoadImageNotifyRoutine, riceverò le notifiche circa DLL caricate nello spazio sessione? La documentazione ufficiale parla di "spazio di sistema o spazio utente", ma lo "spazio di sistema" include anche lo spazio di sessione?
  • Devo disabilitare PatchGuard se devo incollare l'immagine della DLL mappata dopo il che è stata mappata?
  • Ci sono altri potenziali problemi a cui non ho pensato?
  • Ci sono altri modi per ottenere ciò che voglio?

Grazie in anticipo.

+0

Cosa stai cercando di ottenere? Può darsi che ci sia un modo migliore per risolvere il tuo problema con maggiori informazioni sul problema root. –

+0

@Larry Osterman: Sto provando a sostituire il rdpdd (driver di visualizzazione virtuale del desktop remoto) da qualcos'altro. È troppo lungo per spiegare il motivo esatto per farlo, ma questo è ciò che è necessario – valdo

+0

IIRC, il desktop remoto è tutto collegabile senza richiedere l'aggancio del driver - Credo che Citrix faccia questo per il proprio prodotto desktop remoto (so che il reindirizzamento del suono la logica è ridirigibile a partire da Win7). Sfortunatamente non so come sia fatto. –

risposta

2

Devo disabilitare PatchGuard se devo incollare l'immagine della DLL mappata dopo che è stata mappata?

Per caricare qualsiasi driver su x64 deve essere firmato. Con i diritti di amministratore puoi disabilitare PatchGuard e io personalmente raccomando di usare DSEO, un'applicazione GUI creata per questo.Oppure puoi bypassare PatchGuard sovrascrivendo l'MBR (o il BIOS), sebbene questo sia tipicamente considerato un bootkit - malware.

Problemi correlati