Newsgroup: it.comp.programmare.win32
Titolo: Monitorare Mouse e Tastiera

Ho bisogno di monitorare l'attività del mouse e della tastiera.
In tutto questo non posso usare gli hook in quanto per installare
un hook di sistema dovrei esportare le hookproc(..) in una dll 
e non posso fare uso di nulla che non sia nell'eseguibile.
 grazie a tutti in anticipo.

 ha scritto nel messaggio:

a livello user non hai alternative, altrimenti devi scendere nei meandri
dell'ASM per esportare valori dai registri ... ti premetto che questa
soluzione funziona solo su piattaforme 9x.
Se vuoi approfondire cerca sulla rete i sorgenti di TKeySpy, un componente
VCL che lavora a basso livello facendo quanto ti ho citato. Su NT/2K non hai
alcuna alternativa agli hook per tecniche di Code Injection. (in realtà
un'alternativa c'è, ma si basa sempre sull'utilizzo di DLL)
--
- Carlo -
c.b...@libero.it

dell'ASM per esportare valori dai registri ... 
In realta', si tratta di monitorare il valore della porta
60h, che e' quella della tastiera.  Ma questa soluzione temo
si riveli sempre piu' inutilizzabile.

sull'utilizzo di DLL) 
No no no no no. Funziona un po' sì e un po' no, ed è una tecnica molto 
invasiva
Piuttosto, si può mettere un driver filtro al livello della classe 
tastiera (non chiedetemi come si faccia, non lo so. Non ancora), che 
mantenga un buffer FIFO duplicato di quello della tastiera. Ma non ho 
niente di pronto, sottomano
-- 
Nato nel vizio, morto nel supplizio
Nato nel peccato, ad entrare sia invitato

 niente di pronto, sottomano
Un driver è una soluzione che scende di ring, non si tratta più di
operazioni user ... ma aldilà di questo, mi piacerebbe vedere un driver che
fa quel che dici. Non ne ho mai visti.


driver che fa quel che dici. Non ne ho mai visti.
Nel DDK di Windows 2000 mi dicono esserci un certo driver di esempio 
chiamato kbfiltr, che dovrebbe fare proprio questo (si limita a filtrare 
i tasti, ma si può modificare)
Ne installa uno SoftIce, se non sbaglio. Gli serve a ricevere, in 
qualsiasi situazione, l'hotkey che lo attiva
Ce n'è uno interessante qui, che aggancia la tastiera ad un livello 
persino inferiore della classe tastiera:
http://sysinternals.com/ntw2k/source/ctrl2cap.shtml


"iniettare" ti dice nulla?
La tecnica potra' anche essere "invasiva" ma e' supportata
dal sistema operativo, quindi non vedo che problema ci sia.
Carlo, tra l'altro, ha scritto un keylogger che ho testato e
funziona benissimo.

 i tasti, ma si può modificare)
Perfetto, io non dubitavo del fatto che esistesse, ho detto semplicemente
che non lo ho mai visto. Ribadisco che a livello Win32 ci sono solo gli Hook
(o una combinazione di API [e DLL]) tramite le quali si possono effettuare
delle iniezioni di codice


quali si possono effettuare delle iniezioni di codice
Già, ma il subject del thread dice chiaramente che il problema è 
"Monitorare mouse e tastiera". Il modo più "pulito", anche se rischioso, 
è quello del driver filtro


! Mi ricordo di te. E come
: dimenticarti, del resto? Non sei per caso quello che sab 08 dic 2001
: 05:01:19p, su it.comp.programmare.win32, ha scritto:
:
: >premetto che non ho capito perchè questo tono di sfida!
:
: Ti assicuro che se tono di sfida s'avverte, non è voluto. Volevo
: suonare, al massimo, un po' seccato, perchè quello degli hook è un
: problema vecchio, e molte delle soluzioni sono altrettanto vecchie
:
: >> La cosa dell'AppInit_Dlls funziona solo con i programmi che
: >> caricano user32.dll. I cosiddetti hook funzionano solo con i
: >> thread che generano finestre. Come la mettiamo?
: >Falso, non funzionano solo con i thread che generano finestre, ma
: >con i Thread che in generale hanno una message queue. Le due cose
: >sono molto diverse! Prova a dare un' occhiata a PostThreadMessage()
: >e te ne renderai conto da solo.
:
: Ma un programma che *in assoluto* non usa user32.dll non verrà MAI
: agganciato da un hook
:
Non solo, si puo` facilmente ingannare un hook con qualche keybd_event.
Io ho subclassato un edit per realizzare un controllo per inserire
password (roba da siaiei :-). Quando riceve un tasto genera un
numero random di eventi di tastiera legati a tasti scelti a caso.
Il risultato e` che una password di qualche carattere genera un
log di decine (centinaia) di tasti.
Penso che volendo monitorare la tastiera un hook sia poco.
ciao
Massimo


Wow, hai trovato la soluzione ad un problema che cercavo di risolvere da
tempo. Grazie Mille, Ciao

 è quello del driver filtro
Si, ma non credo che la scrittura di un Driver sia "suggeribile" in un ng di
Win32, nel senso che noi dovremmo consigliare la soluzione Win32 più
corretta. Personalmente non saprei da dove partire per la scrittura di un DD
...
Saluti!
--
- Carlo -
c.b...@libero.it
http://members.fortunecity.it/cbertu
ps: abbiamo entrambi suggerito le nostre idee, forse è inutile proseguire
qui! Se vuoi continuare la discussione in privato non ci sono problemi.

è quello del driver filtro
Il corpo del messaggio dice anche "non posso fare uso di
nulla che non sia nell'eseguibile".
E' senza dubbio piu' semplice installare un hook con una DLL
(che diventa quindi estensione dell'eseguibile e non vedo
perche' poi debba essere pericoloso, se fatto nel modo
giusto) che non installare un driver.

 wrote in message
news:u2ns0ush9jnv39lhl...@4ax.com...

Io ho avuto lo stesso problema: devevo hookkare la tastiera ma volevo avere un
eseguibile unico.
Dato che NT non ti permette di hookare altri processi se non usi una DLL mi
sono studiato un palliativo:
_Ho scritto e testato la DLL.
_Nell'applicazione ho inserito una routine che copia in un buffer il contenuto
dello stesso EXE che sta girando, da un determinato punto fino alla fine del
file e poi dumpa il buffer in un'altro file con estensione .DLL
_Ho compilato il Progz e mi sono segnato la lunghezza esatta dell'EXE.
_Ho ricompilato il Progz "impostandolo" come byte di inizio di copia nella
routine di "estrazione" sopracitata.
_Con un HEX EDITOR ho incollato tutto il contenuto della DLL testata al mio
EXE.
E il gioco e` fatto e praticamente funziona cosi`:
1.Il Progz sgancia la DLL intera che e` incollata a sestesso.
2.Dopodiche` installa l'hook caricando la HookProc da questa DLL e tutto
funziona perfettamente.
3.Prima di uscire il Progz cancella la DLL precedentemente "sganciata".
Tecnica testata e funzionate.
!! E` piu macchinoso a spiegarlo che a farlo !!
E` l'unica soluzione stabile che ho trovato senza dover ricorrere a drivers o a
cose strane (non che questa non lo sia, pero` funziona).
Ciao.
-- 
Posted from  [217.57.247.125] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Ho bisogno di monitorare l'attività del mouse e della tastiera.

Io ho avuto lo stesso problema: devevo hookkare la tastiera ma volevo avere un
eseguibile unico.
Dato che NT non ti permette di hookare altri processi se non usi una DLL mi
sono studiato un palliativo:
_Ho scritto e testato la DLL.
_Nell'applicazione ho inserito una routine che copia in un buffer il contenuto
dello stesso EXE che sta girando, da un determinato punto fino alla fine del
file e poi dumpa il buffer in un'altro file con estensione .DLL
_Ho compilato il Progz e mi sono segnato la lunghezza esatta dell'EXE.
_Ho ricompilato il Progz "impostandola" (questa lunghezza appena segnata) come
byte di inizio di copia nella routine di "estrazione" sopracitata.
_Con un HEX EDITOR ho incollato tutto il contenuto della DLL testata al mio
EXE.
E il gioco e` fatto e praticamente funziona cosi`:
1.Il Progz sgancia la DLL intera che e` incollata a sestesso.
2.Dopodiche` installa l'hook caricando la HookProc da questa DLL e tutto
funziona perfettamente.
3.Prima di uscire il Progz cancella la DLL precedentemente "sganciata".
Tecnica testata e funzionate.
!! E` piu macchinoso a spiegarlo che a farlo !!
E` l'unica soluzione stabile che ho trovato senza dover ricorrere a drivers o a
cose strane (non che questa non lo sia, pero` funziona).
Spero di essere stato chiaro.
