This is a machine translation. The original page (in English) is available here.

Ultime notizie dal mondo: - Perché gli USA stanno valutando TikTok Ban Feed RSS

Casa>Articoli>Hook Di Tastiera
Top Registratore di tasti
Vedi di più...

Hook Di Tastiera

  •  
User rating: 4.5 - 2 voti
Hook è un meccanismo mediante il quale una funzione in grado di intercettare gli eventi prima che raggiungano un'applicazione. La funzione può agire su eventi, modificare o eliminare loro. Funzioni che ricevono gli eventi sono chiamati a Funzioni di Filtro, ogni Funzione di Filtro è classificato in base al tipo. Ganci di fornire potenti funzionalità: Procces o modificare ogni messaggio; la registrazione o la riproduzione tastiera e mouse eventi; Prevenire un altro filtro da essere chiamato; E molte più funzionalità... in generale, ci sono due tipi di ganci: a livello di Sistema e specifici del Thread. L'hook di Sistema viene utilizzato per filtrare i messaggi di tutte le applicazioni(IE: durante la scrittura di un key logger). E il Thread specifico gancio viene utilizzato per filtrare i messaggi di un thread specifico. In questo tutorial, mi occuperò solo a livello di Sistema hook di tastiera. Per impostare un hook di Sistema abbiamo bisogno di una DLL.

Una DLL è un indirettamente eseguibile che non hanno un ciclo di messaggi di ricevere l'input dell'utente. Le dll sono file separati contenenti funzioni(e non solo) che può essere chiamato da programmi e altri Dll. Per l'utente finale una DLL è un programma che non può essere eseguito direttamente dal Programma Mangiatoia(o shell), ma dal sistema del punto di vista, ci sono due differenze tra Dll e applicazioni: Dll non può avere più istanze in esecuzione caricato in memoria. e Dll, si attaccano ai processi, solo istanze di applicazione sono i processi. DLL è l'acronimo di Dynamic-Link Library. Dynamic-Link è un meccanismo di librerie di collegamento per le applicazioni in esecuzione. Queste librerie(Dll) risiedono nel proprio file eseguibili(.dll) e non vengono copiati in applicazioni " file eseguibili(.exe) come librerie a Collegamento Statico. È importante capire che una .DLL viene caricata nello spazio degli indirizzi specificato che collega applicazione e non in heap globale! I vantaggi di utilizzare il collegamento dinamico metodo sono:
Essi possono essere aggiornate senza bisogno di applicazioni di essere ricompilato o ricollegati.
Quando diverse applicazioni utilizzano la stessa .DLL, la .DLL è appena caricato una volta per tutte le applicazioni(riduzione della memoria e spazio su disco).

Il motivo per cui abbiamo bisogno di una DLL per un hook di Sistema è perché vogliamo che la Funzione di Filtro per essere in qualsiasi applicazione di spazio di indirizzi. Così, quando si imposta il gancio messaggio funzione di filtro che si trova nel .dll Windows associa il .dll automaticamente in tutte le applicazioni con spazio di indirizzamento. In tal modo si ottiene la funzione di filtro chiamato per ogni processo! Quando dunque il collegamento dinamico il gancio che si trova in una .DLL diventa un hook di Sistema(naturalmente dipende dal tipo di Funzione di Filtro di troppo). Bene, ora, dopo l'importante materiale teorico..
Iniziamo a scrivere il codice il .DLL per a livello di Sistema hook di tastiera, e poi ti spiego come collegamento dinamico l' .DLL nella nostra applicazione.
Si prega di scaricare il codice sorgente per vedere come tutto è scritto e fatto.

// Questa è la nostra tastiera richiamata proc:
// _declspec(dllexport) significa che si desidera consentire ad altri
// applicazioni/Dll chiamata a questa funzione, in alcuni casi non
// bisogno di questo prefisso, ma per sicurezza lo useremo.
_declspec(dllexport) LRESULT CALLBACK KBHookProc(int Codice,
WPARAM wParam, LPARAM lParam)
{
// Se il codice è meno di 0 potremmo chiamare la prossima gancio,
// questo è come ganci di lavoro, niente di speciale
se (Codice < 0) return(CallNextHookEx(hhook, Codice, wParam, lParam));

// Informazioni su quello che accade con la tastiera
se (lParam & (1 << 31)) // il Bit 31 dice se un tasto è premuto

// Call the hook successivo.
ritorno(CallNextHookEx(hhook, Codice, wParam, lParam));
}

// Questo è come WinMain/Main, ma per le Dll,
// si ottiene la DLL esempio, la Ragione di come il vostro .DLL è chiamati, sono riservati.
BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason,
LPVOID lpReserved)
{
// In realtà, ci sono 4 ragioni, staremo a processo solo 2 di loro,
// perché è sufficiente per il nostro prog.
se (dwReason == DLL_PROCESS_ATTACH) // Carico l' .DLL
{
se(pcount == 0)
{
// Inizializzazione // Primo tempo di caricamento
// Imposta il gancio..
}
pcount++;
}
else if (dwReason == DLL_PROCESS_DETACH)
{
// UnInit prima che il sistema libera .DLL dalla memoria.
se(pcount == 1)
{
// Connessione
// Uccidere gancio..
}
pcount--;
}
return(1);
}

Vedete, è abbastanza facile, direi. Comunque, pcount è il nostro processo contatore, si dice quante volte il .DLL è stato chiamato. pcount è una variabile speciale, deve essere in heap globale, perché se non, ogni volta che il nostro .DLL viene chiamata sarà inizializzata a 0 di nuovo e di nuovo...quindi per evitare che, diciamo al compilatore di inserire la variabile nell'heap globale. Facciamo che per il gancio maniglia troppo, perché noi solo il gancio una volta. Se si imposta il gancio everytime .DLL si chiama, sarà una incasinato gancio e non funziona correttamente e come vogliamo! Per indicare al compilatore che la vogliamo mettere la variabile globale heap si può fare così:

#pragma data_seg("SharedBlock")
HHOOK hhook = NULL;
int pcount = 0;
#pragma data_seg()

Notate che ogni variabile deve essere inizializzato. ok stiamo andando a HHOOK hhook = NULL; unsigned long tasti = 0; int pcount = 0; #pragma data_seg() Abbiamo appena finito di scrivere l' .DLL, ogni .DLL file è un .DEF file per indirizzare il compilatore. Nell' .File DEF diciamo al compilatore di funzioni che si desidera esportare, sì, quelli con la _declspec(dllexport), e diciamo che il compilatore sul condivise blocco di dati. (Vedere il codice sorgente per una piena comprensione dell' .File DEF). Una volta che l' .DLL file è pronto, dovete copiare il programma che carica il .DLL directory o di copia in %windir%\system.

OK, che è per l' .DLL roba, adesso andiamo a caricare il .DLL abbiamo appena creato! Prima di tutto dobbiamo dichiarare puntatori a funzioni con parametri che ricevono.

typedef void (*LPFunction)(void);
LPFunction funzione = NULL;

// Questo è un puntatore a una funzione che non ha
// parametri e restituisce un void.

HMODULE DLLmodule = LoadLibrary("mydll.dll");
if (!DLLmodule) // .File DLL non trovato!

// Questa funzione ottiene il codice della specifica funzione desiderata dalla memoria,
// Notare il maiuscolo, lo volevano nome della funzione è quello di essere esattamente,
// come in .File DEF e .CPP file della DLL abbiamo scritto.

funzione = (LPFucntion)GetProcAddress(DLLmodule, "Funzione");
if (!funzione) // implementazione della Funzione di codice non trovato!!!

// Ora si può chiamare la funzione.
funzione();

// Dopo la fine utilizzando .DLL, non dimenticate di liberarlo!
FreeLibrary(DLLmodule);

Woohoo, che è!! Bene, questo è stato solo le nozioni di base e non funziona se si copia e incolla.
Data di pubblicazione:
Leggi l'articolo completo
Casa>Articoli>Hook Di Tastiera
IMPORTANTE! Computer di installazione di strumenti di monitoraggio sui computer che non possiedono o non hai il permesso di monitorare può violare locali, statali o federali.