• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Keylogger Remoto-Reverse Tcp/ip

TBH

Utente Master
Autore del topic
24 Dicembre 2012
2.134
115
Miglior risposta
0
Bene , in questa guida voglio postare un programmino fatto in 2°ore circa ... si tratta di un keylogger remoto , naturalmente reverse testato su 3 persono (win7 , win vista , e win xp). Allora anticipo che il Reverse non è nulla di straordinario perchè non è altro che invertire i "ruoli" infatti per il test del keylogger si invia il client e non il server che quindi si connetterà al server che era presente sul pc ... Ma il motivo di cambiare i ruoli è dovuto al fatto che i modem sono protetti da firewall e per far connettere un server in remoto bisogna fare le seguenti cose :

1)Impostare il Dns Dinamico (io uso no-ip)
2) Disabilitare i Firewall
3) Impostare una regola personalizzata per un virtual server , indicando l'indirizzo ip del pc (quello 192.168.1. etc...)

Naturalmente che possiede il server (che nel reverse , chiamiamo "client") deve fare le 3 cose sopracitate! Bene , quindi vi posto il code

Lato Server
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Lato Client
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!




Bene , iniziamo a spiegare questo keylogger , partiamo da server :

Imports serve per importare namespace ( un namespace contiene al suo interno + classi o + namespace)

tra gli imports usati c'è imports system.net (namaspace che contiene le classi fondamentali per la comunicazione in rete)

inoltre importo un namespace imports system.net.sockets e infine il tipo di testo Utf32

passando al Load del form :

dichiaro una variabile stringa contenente l'host no-ip
dim host as new gethost ' creo l'oggetto di gethost (ricordo che gethost è una classe presente nel progetto, e non presenta costruttore !)) Per chi non sapesse cosa sono le classi in vb.net ..cliccasse il link sottostante

Classi Vb.net -Spiegazione

nella classe gethost c'è solo un membro una funzione che risolve mediante il Dns (Domain Name system) , il dns non fa altro che tradurre un ip in sito web o host oppure il sito in ip !

visto che la funzione host (membro della classe gethost) restituisce un valore di tipo string dovrà essere contenuto in una variabile di tipo string , quest'ultima sarà ipfinal!

Passiamo alla funzione host (della Classe Gethost)

riceve come argomento un stringa contenente l'host
la prima cosa che fà :

Dim dns As Net.IPHostEntry = System.Net.Dns.GetHostEntry(ip)

iphostentry è una classe che può contenere ip & host ! system.net.dns.gethostentry(ip) risolve l'host no-ip restituendo un tipo Iphostentry

Una proprietà molto importante di questa classe iphostentry è andresslist

quest'ultima , restituisce un "Ipandress" proprie per questo motivo l'ho inserita in una variabile di tipo Ipandress

anche se , questa proprietà contiene il metodo .tostring ( è un metodo ereditarietario dalla classe socket)

e quindi potevo fare anche un istruzione del genere :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

torniamo di nuovo al form load

c'è questa istruzione

client=new tcpClient ' crea l'oggetto a runtime fino ad ora non esisteva !

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Sintatticamente sconsiglio l'uso di on error resume next bensì da sostituire con Try..catch .. finally .. end try in quanto obsoleta è appartenente al vb6

A livello di applicazione (come keylogger) consiglio on error resume next ;
in quanto l'applicazione con try..catch .. end try userebbe più CPU oltre che un 10-15% in + a livello di memoria .

Proseguiamo nella spiegazione c'è Timer2.start()

partiamo da timer2.start()

c'è l'istruzione key.keylogger (key è una classe creata subito)

analizziamo la classe key , presente anch'essa nel progetto

alla prima riga della classe troviamo :

Private Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Keys) As Keys

analizziamo keyword x keyword

Private :la prima keyword è il livello di accessibilità all'interno di una classe , quindi significa esternamente non si può usare

Declare : questa keyword serve per implementare funzione o procedure esterne che fanno parte delle librerie di windows

Fuction : indica che restituirà un valore , dato immesso alla fine

GetAsyncKeyState= nome della funzione , poteva anche chiamarsi geppetto , tanto per dire a quelli che fanno ctrl+c e ctrl +v questo nome non è dato a caso , bensì xk così la identifica windows in tutte le sue applicazione

Lib: introduce finalmente di che libreria parliamo ; equivale + o meno al C #include <user32>

Alias a differenza del C questa magica keyword ci permette di dichiarare soltante le parti "utili per il programma" e qui ricorre la parola "GetAsyncKeyState" identificativo per user32

(byval vkey as keys) 'come tutte le funzioni ha per lo meno un valore che riceve e restituisce un valore di tipo keys

Bene passiamo alla procedura keylogger --- metodo accessibile al timer successivamente
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!


c'è un variabile di tipo fi che Io.fileinfo viene istanziata passandoci un valore ( il percorso di partenza dell'app & key.txt)
successivamente un variabile di tipo streamwriter (da notora che non è istanziata)
e una semplice stringa di ch

Se qualcuno se ne reso conto ho tralasciato l'istruzione for , va be uno pensa , il ciclo for fa un azione da n a n

ma nessuno si è chiesto perchè da 3 a 255 ???

ecco la risposta : partiamo dalla tabella del codice
Perfavore, Entra oppure Registrati per vedere i Link!
(tipo di testo ufficiale composto da 255 caratteri totali)


bhè se è composto da 255 caratteri totali perché partire proprio dal terzo : semplice , il valore 0000000 (corrispondente al decimale 0, ricordo che l'ascii lavora su 8bit) indica il carattere nullo , famoso nel linguaggio C : '\0' come mezzo per indicare la fine di una stringa

il valore 1 (00000001) equivale allo start of header
il valore 2 (00000010) equivale allo start of text (inizio del testo)
il valore 3 (00000011) equivale al end of text (fine del testo)

perfetto quindi significa che immesso un carattere scorre i e confronta con la funzione :

if GetAsyncKeyState(i) then ' se i corrisponde alla lettere digitata esempio a=97 quando arriva a 97 va nel if

nel if c'è un altra istruzione particolare

ch = DirectCast(i, System.Windows.Forms.Keys).ToString

directcast non è un OPERATORE DI CONVERSIONE , molti lo confondono con ctype!! , directcast fa il casting di un oggetto e si usa nei seguenti casi :

1)Unboxing di tipi Value
2) casting di classe Base a Derivata
3) casting di oggetti
4) casting di interfaccie

il nostro caso è il 3 in quanto il windows.forms è una classe
casting( numero , in un enumaratore della classe keys ) . infine in stringa

siamo rimasti al casting nel enumeratore keys , dopodichè ci sono 2 condizioni

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

dopodichè c'è sw.write(ch) cioé scrivi quello di ch

infine come di consuetudine si chiude e si libera lo streamwriter.

Nella classe keylogger è presente anche un altro membro , una proprietà di sola lettura che per ora tralascio , le proprietà sono utili per la comunicazione tra una classe e l'altra !

Torniamo all' istruzione del Form Load

timer1.start()

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Soffermiamoci su ch=key._testo membro della classe key , la sua funzione non è altro che leggere i dati scritti sul file in precedenza dal keylogger
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
allora questo code è un pò "fasullo" perchè presumiamo che il server (questa applicazione, nel reverse client) abbia stabilito una comunicazione con il nostro client( nel reverse server) ... noi client inviamo prima che l'utente scriva qualcosa bhè l'applicazione va in crash xk non trova il file bisognerebbe controllare se il file esiste e poi successivamente leggere quindi questa sarebbe la modifica da fare :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Questo è il code corretto per gestire questa eventualità.

BENE , abbiamo analizzato il server ora passiamo al client :

Sul client non c'è molto da dire oltre

al formload

si crea l'oggetto tcplistener(che avrà un endpoint(composta da qualsiasi ip,porta 2000)

server.start() 'inizia ad ascoltare

avvia il timer

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Analizziamo accetta:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Timer2

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Spero si utile :-D

GUIDA FINITA
 
Ultima modifica:
Riferimento: Keylogger Remoto-Reverse Tcp/ip

Io direi che non c' è nulla di particolarmente difficile... :P Comunque complimenti....
Ma comunque potevi lasciarla a metà sul tuo computer e quando l' avevi terminata la postavi.. XD
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

Io direi che non c' è nulla di particolarmente difficile... :P Comunque complimenti....
Ma comunque potevi lasciarla a metà sul tuo computer e quando l' avevi terminata la postavi.. XD

cmq , una guida rimane guida e devo spiegare passo passo !
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

@System32 : questo tizio ha usato i sockets! Si merita un premio, su! :emoji_smiley:
Bravo per l'uso dei sockets, programma banale, ma già l'uso di System.Net.Sockets lo valorizza rispetto agli altri presenti in sezione.
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

@System32 : questo tizio ha usato i sockets! Si merita un premio, su! :emoji_smiley:
Bravo per l'uso dei sockets, programma banale, ma già l'uso di System.Net.Sockets lo valorizza rispetto agli altri presenti in sezione.

leggetevi le spiegazioni , vi fanno bene !!

i socket , ricordo non sono nulla di particolarmente speciale , anzi rispetto ad alcune classi sono al dir poco facili ... conosce le sintassi è più importante per software + veloci e "puliti" a livello di code !
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

Questa "guida" l'hai scritta tu o è copiata da qualche parte ?
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

Questa "guida" l'hai scritta tu o è copiata da qualche parte ?

logico che l'ho scritta io ,altrimenti non era il 2° giorno che scrivevo !

cmq domani continuo !
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

era inutile gestire , con try catch , on error resume next: in caso di errore passa avanti , stiamo in un ciclo do che mi tenta la connessione anche per ore gestire un errore lanciando una nuova eccezione : 1) occupa + memoria 2) mi sembra inutile gestire una futilità

ignorare l'errore l'ho ritenuta la soluzione + semplice
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

era inutile gestire , con try catch , on error resume next: in caso di errore passa avanti , stiamo in un ciclo do che mi tenta la connessione anche per ore gestire un errore lanciando una nuova eccezione : 1) occupa + memoria 2) mi sembra inutile gestire una futilità

ignorare l'errore l'ho ritenuta la soluzione + semplice

E invece gestire l'errore di connessione è la prima cosa da fare quando si ha a che fare con un programma "client-server". Comunque ci tenevo a farti notare che On Errore Resume Next appartiene al VB6 e non al VB.NET, dovresti utilizzare Try Catch.
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

E invece gestire l'errore di connessione è la prima cosa da fare quando si ha a che fare con un programma "client-server". Comunque ci tenevo a farti notare che On Errore Resume Next appartiene al VB6 e non al VB.NET, dovresti utilizzare Try Catch.


sintatticamente hai ragione , usare try catch finally è corretto , ma in questo caso occuperebbe il 15% di + in memoria !!

aggiungerò anche con try catch , per una gestione corretta di un eccezione in vb.net !

n.b la gestione degli errori è fondamentale in ogni applicazione non solo in "client - server" !
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

sintatticamente hai ragione , usare try catch finally è corretto , ma in questo caso occuperebbe il 15% di + in memoria !!

Come fai a dire che occuperebbe il 15% di memoria in più ? Anche se fosse non devi usare On Error Resume Next perché è del VB6 e non del VB.NET.

n.b la gestione degli errori è fondamentale in ogni applicazione non solo in "client - server" !

Difatti io non ho detto che gli errori si gestiscono solo nelle applicazioni "client-server", ho detto a maggior ragione in questo tipo di programmi perché è più facile che si verifichino errori.
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

il system.excption è una classe (quindi se istanziato un oggetto) , essendo un oggetto occupa uno spazio (mi sembra > di 6byte )
on error resume next praticamente durante l'esecuzione occupa nulla ! cmq sintatticamente usare on error resume next è errato , lo so benissimo , sapevo anche che me l'avresti detto !

Hai da darmi qualche consiglio , o qualcosa che ho mancato fin'ora di quello scritto?
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

il system.excption è una classe (quindi se istanziato un oggetto) , essendo un oggetto occupa uno spazio (mi sembra > di 6byte )

Su questo non c'è dubbio, ma perché affermi che occupa il 15% in più di memoria ? Dove lo hai preso questo "15%" ? Lo hai letto da qualche parte o lo hai scritto tu perché pensi che sia così ?

on error resume next praticamente durante l'esecuzione occupa nulla ! cmq sintatticamente usare on error resume next è errato , lo so benissimo , sapevo anche che me l'avresti detto !

Sì ma non dovresti consigliare di usarlo, non fa parte del .NET Framework.

Hai da darmi qualche consiglio , o qualcosa che ho mancato fin'ora di quello scritto?

Il consiglio che ti do è che avresti potuto scrivere la funzione del keylogger in un altro modo, anziché prenderla da qui. Un keylogger si scrivo implementando un hook sulla tastiera.
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

Su questo non c'è dubbio, ma perché affermi che occupa il 15% in più di memoria ? Dove lo hai preso questo "15%" ? Lo hai letto da qualche parte o lo hai scritto tu perché pensi che sia così ?



Sì ma non dovresti consigliare di usarlo, non fa parte del .NET Framework.



Il consiglio che ti do è che avresti potuto scrivere la funzione del keylogger in un altro modo, anziché prenderla da qui. Un keylogger si scrivo implementando un hook sulla tastiera.



lo so , il keylogger potevo farlo anche così !! non ci ho pensato , semmai in un altra guida faccio così ora non mi va di modificare tutta la spiegazione!

no xk gli oggetti occupano memoria (infondo tutti i tipi reference occupano + di tutti i tipi value), si l'ho letto sul libro che tengo del Hoepli nella parte che nomina differenza tra strutture e classi , appunto i primi di tipo value e i secondi di tipo reference e dice che occupano 6byte in + ! ogni classe naturalmente e a sè ! il 15% ho visto sulla mia cpu senza try catch e con ... ma dipende a qualcuno può essere anche meno o +!
Continuando ....
On error resume next
sul fatto che non fanno parte del net framework non è vero xk deriva dal Goto presente del framework 1.0 (dal primo vb.net mi sembra il 2002) aggiungendo al framework alcune istruzione del vb6

dichiarato obsoleto con la nascita del framework 2.0 (con tante altre istruzione , tra cui cito resolve della classe dns)
 
Ultima modifica:
Riferimento: Keylogger Remoto-Reverse Tcp/ip

Scusate la mia ignoranza ma se io (e la maggior parte degli altri) seguo passo passo la creazione del Key rimarra sempre FUD o sarà rintracciato subito dagli antivirus??

Nel caso sia rintracciato quali parti del codice dovremmo personalizzare per renderlo FUD per un BEL PEZZO?
 
Riferimento: Keylogger Remoto-Reverse Tcp/ip

Scusate la mia ignoranza ma se io (e la maggior parte degli altri) seguo passo passo la creazione del Key rimarra sempre FUD o sarà rintracciato subito dagli antivirus??
Nel caso sia rintracciato quali parti del codice dovremmo personalizzare per renderlo FUD per un BEL PEZZO?

credo rimanga sempre fud, se non c'è un continuo copia e incolla !
se qualcuno mi segnala che è rilevato aggiorno per ora nessuna segnalazione , quindi è fud