|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | ||
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
ciao, scusa se mi intrometto...
Quote:
Quote:
EDIT: non avevo visto la spiegazione di cionci |
||
|
|
|
|
|
#22 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Comunque non capisco una cosa: nella descrizione del programma, si vede la seguente riga di codice: Codice:
TheKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, ppI,0); (dalla documentazione per HHOOK SetWindowsHookEx( int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId ); lpfn [in] Pointer to the hook procedure. If the dwThreadId parameter is zero or specifies the identifier of a thread created by a different process, the lpfn parameter must point to a hook procedure in a DLL. Otherwise, lpfn can point to a hook procedure in the code associated with the current process. hMod [in] Handle to the DLL containing the hook procedure pointed to by the lpfn parameter. The hMod parameter must be set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure is within the code associated with the current process. dwThreadId [in] Specifies the identifier of the thread with which the hook procedure is to be associated. If this parameter is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread.
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
|
|
|
|
|
#23 |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
@ mamo:
Io ho disponibile, come dicevo qualche post fa, un programma che feci hai tempi dell'università, che installa un hook per tastiera globale non low level (usando quindi una DLL), totalmente commentato (era un esercizio settimanale Se vuoi posto il progetto per Visual Studio. Da quel progetto penso che in pochi minuti implementi un keylogger.
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
|
|
|
|
#24 | |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
Quote:
|
|
|
|
|
|
|
#25 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ecco qui, ho modificato l'esempio sopra molto in fretta...
|
|
|
|
|
|
#26 |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Ecco il programma di cui parlavo prima: è soprattutto un buon esempio su come caricare una DLL in un processo senza usare lo stub .lib per compilare, oltre a mostrare l'uso di un hook globale in una DLL.
NOTA: il progetto è per Visual Studio 6: se hai Visual Studio 2003, ti basta rispondere "Sì" alla domanda di conversione progetto, una volta caricato vai nel Solution Explorer (il pannello sulla destra di VS 2003), click col tasto destro sulla cartella KbdHook e selezionare "Set as StartUp Project" (il nome della cartella diventa in grassetto). EDIT: Nessuna risposta al mio post #22 ? EDIT 2: Ah, questo programma NON fa uso delle librerie MFC, bensì è scritto in modo classico (Win32 API programming), quindi in C plain ed implementando la coda dei messaggi, mentre il programma postato da cionci usa le MFC. Tra l'altro, quel programma non compila, mancano i files "ImageLoader.cpp" e "ImageLoader.h"! L'ho lanciando togliendo i riferimenti a quei files, ma poi il programma non funziona correttamente... Cionci, non è che puoi ripostarlo?
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 12-10-2006 alle 10:13. |
|
|
|
|
|
#27 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
ciò che hai riportato di MSDN vale per tutti gli hook tranne quelli Low Level, che sono stati aggiunti successivamente e sono implementati in maniera leggermente diversa. |
|
|
|
|
|
|
#28 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Codice:
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardHookProc, NULL, 0); Codice:
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardHookProc, hDllInstance, 0); /* hDllInstance è l'handle alla DLL stessa (simile a "this" in Java) */ EDIT: Più che il compilatore usato, dal momento che il programma compila sia con VS 6 che con VS .NET, è proprio Windows che è cambiato: il programma, con la prima chiamata SetWindowsHookEx, settava tranquillamente l'hook con Win XP SP1, mentre da quando ho installato il SP2, l'hook viene installato solo se viene specificato anche l'handle alla DLL (come nel secondo stralcio di codice postato).
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 12-10-2006 alle 15:53. |
|
|
|
|
|
|
#29 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#30 | |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
Quote:
esecuzione in corso ecc... ma detta in soldoni... dove le vedo le lettere che premo |
|
|
|
|
|
|
#31 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Come fa il programma ad "accorgersi" che è stato premuto proprio quel tasto? Semplice: tutti gli eventi della tastiera passano per la funzione KeyboardHookProc all'interno della DLL (il file KbdHookDll.cpp). Quella funzione è la funzione associata all'hook: ogni volta che l'hook "cattura" la pressione di un qualunque tasto della tastiera, chiama quella funzione. All'interno della funzione, puoi sapere quale tasto è stato premuto tramite i parametri "wParam" e "lParam": nel mio programma controllo che il tasto premuto corrisponde ad F10, ed in caso affermativo visualizza una finestra di dialogo, tu puoi farci ciò che vuoi (ad esempio "codificare" il carattere, cioè sapere tramite i due parametri il tasto premuto, e scriverlo su un file di testo). Ti rimando alla documentazione su MSDN della funzione KeyboardHookProc (la trovi facilmente seguendo la documentazione della funzione SetWindowsHookEx) per conoscere COME interpretare i parametri "wParam" e "lParam" per sapere il tasto premuto. Ah, il mio programma visualizza una finestrella mentre è in esecuzione, essendo un esempio, così da poterlo chiudere facilmente: tu ovviamente, volendo fare un keylogger, elimini qualunque output a video, e il processo lo chiudi con il Task Manager. O ancora meglio lo rendi un servizio... Buon divertimento NOTA: Il codice è ampiamente commentato, quindi non credo avrai problemi, per la descrizione completa delle funzioni (e per comprenderle pienamente) rifatti alla documentazione ufficiale MSDN.
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
|
|
|
|
|
#32 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#33 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
|
|
|
|
|
#34 |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
grazie mille fidel... spiegazione perfetta!!!
e come si fa a renderlo un servizo?? sarebbe utile anche perche se non dico male i programmi eseguiti come SYSTEM hanno "poteri" da admin |
|
|
|
|
|
#35 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Per installare un nuovo servizio in modo semplice, ti consiglio questa utility: http://p-nand-q.com/e/pserv.html è un file .cpl: doppio click ed aggiunge una voce nel Pannello di Controllo di Windows: usala per aggiungere e rimuovere i servizi, occhio però a non fare danni (tipo rimuovere servizi vitali per Windows Per aggiungere un nuovo servizio, ti basta andare nel menu "Object" e scegliere "Install", inserisci i dettagli richiesti ed è fatta. Se lo vuoi fare via codice, con un programma ad hoc che, eseguito con privilegi di amministratore (ossia l'account di default di Win XP.......), ti permette di aggiungere un servizio alla lista dei servizi la cosa è un po' più complessa. NB: Sì, i servizi girano in account SYSTEM se non erro.
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 13-10-2006 alle 17:00. |
|
|
|
|
|
|
#36 |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
installato...
così per curiosità: non c'è un modo per inserirli ad esempio attraverso il registro o cmq in un modo manuale o sarebbe troppo complicato?? |
|
|
|
|
|
#37 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#38 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
il miglior* sistema che io conosca è quello di creare una shell extension, ma nota bene che se il target dei tuoi misfatti ( ) è un autentico esemplare di utonto, e come tale lavora normalmente con Administrator, allora è di gran lunga preferibile l'idea del driver che ho descritto qualche post fa...* migliore nel senso che più si adatta a questo genere di malefatte ma naturalmente se volessimo semplicemente creare un programma che si avvia automaticamente senza doversi nascondere allora sarebbe chiaramente meglio installare la voce in Esecuzione Automatica o il valore nella chiave di registro Run. Ultima modifica di 71104 : 13-10-2006 alle 18:28. |
|
|
|
|
|
|
#39 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
|
|
|
|
|
#40 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
stanno là e basta; hanno solo la particolare caratteristica di girare sotto l'account SYSTEM...
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:18.











) è un autentico esemplare di utonto, e come tale lavora normalmente con Administrator, allora è di gran lunga preferibile l'idea del driver che ho descritto qualche post fa...
stanno là e basta; hanno solo la particolare caratteristica di girare sotto l'account SYSTEM...








