Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-06-2007
Avellas Avellas is offline
Miembro
 
Registrado: feb 2005
Posts: 31
Poder: 0
Avellas Va por buen camino
Unhappy Grabar Messenger

Amigos, en la empresa donde tabajo, me estan pidiendo que desarrolle un programa que permita grabar las conversaciones realizadas por messenger en una base de datos SQL, no tengo la mas minima idea de como hacerlo, he escuchado que messenger utiliza socks y que esteos me pueden servir para mi proposito,.

de ante mano gracias
Responder Con Cita
  #2  
Antiguo 27-06-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
No se quetan legales sean tus pretensiones pero por aqui puedes comenzar a tener una idea de lo que enfrentas

http://www.clubdelphi.com/foros/show...colo+messenger

http://www.clubdelphi.com/foros/show...colo+messenger
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 28-06-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Ademas, creo que tendrás que documentarte en la pagina oficial de la API de Messenger... http://msdn2.microsoft.com/en-us/library/aa905655.aspx
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #4  
Antiguo 28-06-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Ya te han comentado sobre la legalidad del programa, así que antes de empezar preguntaría a un abogado, no sea que puedan denunciar a tu jefe y este te meta en un lío.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #5  
Antiguo 28-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por Ñuño Martínez
Ya te han comentado sobre la legalidad del programa, así que antes de empezar preguntaría a un abogado, no sea que puedan denunciar a tu jefe y este te meta en un lío.
Osea, convengamos en algo muchachos, Internet no es democracia. De hecho, en la mayoria de los paises en donde el uso de internet es habitual, es muy poco probable que un juez o una autoridad pertinente falle a favor de un individuo "espiado" (damnificado) en una computadora que no es de su propiedad, al menos es lo que ha pasado en este tipo de casos en los ultimos 5 años.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #6  
Antiguo 28-06-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Al margen de lo comentado, SI es posible hacer lo que te piden.
Un procedimiento válido sería hacer un packet sniffer, es decir realizar un programa que escuche o intercepte los puertos utilizados por el messenger. Esto, técnicamente no resulta difícil. Lo complicado a mi juicio, es interpretar todo lo que entra y lo que sale por los puertos, es decir el protocolo, dado que como es obvio, la trasmisión no es ASCII simplemente, sino que los paquetes de datos llevarán de todo un poco.
Hace tiempo hice un programa que utiliza esta técnica y los resultados fueron excelentes, le implementación fue mediante sockets.

Te pongo unas porciones de código para que resulte mas ilustrativo:


Código Delphi [-]
procedure TFormMain.Button1Click(Sender: TObject);
Var
HostName : Array[0..20] of Char;
HostEnt : PHostEnt;
SockInterface : TSockAddrIn;
optval: u_int;
BytesRet: DWord;
begin

    try
    CheckConexion;
    Button1.Enabled := False;
    Crazy := False;
    WSAStartup(MakeWord(2, 2),WSAData);
    Socket := WSASocket(AF_INET, SOCK_RAW, IPPROTO_IP, Nil, 0,WSA_FLAG_OVERLAPPED);


    gethostname(@Hostname, sizeof(Hostname));
    // Memo1.Lines.Add(HostName);
    Memo1Write(HostName, $00C08000 );
    LOCALHOSTNAME := HOSTNAME;

    Hostent := gethostbyname(@HostName);
    Memo1.Lines.Add(Hostent.h_name);

   while Hostent.h_addr_list^ <> nil do
   begin
    CopyMemory(@IP, Hostent.h_addr_list^, SizeOf(IP));
    
    Memo1Write('IP: ' + inet_ntoa(IP), $008000FF);
    Inc(Hostent.h_addr_list);
   end;


    if Socket <> INVALID_SOCKET then
      begin
      with SockInterface do
        begin
        sin_addr := IP ; 
        sin_family := AF_INET;
        sin_port := htons(puerto);
     end;



if Bind(Socket, @SockInterface, SizeOf(SockInterface)) <> SOCKET_ERROR
then
      begin
        BytesRet := 0;
        optval := 1;
        If WSAIoctl(Socket, SIO_RCVALL, @optval, SizeOf(optval), Nil, 0,@BytesRet, Nil, Nil) <> SOCKET_ERROR then
        Memo1.Lines.Add('Waiting reception') ;
           WSAAsyncSelect(Socket, Self.Handle, WM_NETEVENT,FD_READ);

      end;
END;
      finally
      ;
      End;


end;


En esta línea sin_port := htons(puerto); es donde defino el puerto a escuchar.

Una vez ejecutado el código, la aplicación recibe mensajes WM_NETEVENT = WM_USER + 103; en el procedimiento
procedure NetEvent(var NetMessage: TMessage); message WM_NETEVENT;
y este sería realmente el procedimiento que se tendría que discernir todos los datos que entran y/o salen, es decir, traducir los paquetes de datos para que sean legibles.
Espero que te resulte útil.
Saludos.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #7  
Antiguo 28-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Leyendo el mensaje de Avellas no veo donde dice que quiera espiar a nadie, solo dice que quiere registrar las conversaciones de messenger. No dice si las conversaciones serán suyas o de otros, tampoco dice si el registro tiene alguna función dentro del trabajo que se realiza y si los usuarios saben que los están grabando, al igual que a los teleoperadores que les graban las conversaciones para luego revisarlas con ellos. Por eso no hay que pensar mal, y acusarlo de espiar sin dejar que el chaval se explique

Por otro lado no se que tan fácil sera espiar las conversaciones de messenger. Si los ordenadores están conectados directamente a internet (o a través de un router) y no usan un hub sino un switch, veo difícil leer los paquetes desde otro equipo. Si por el contrario los equipos se conectan a internet a través de un proxy a internet es ahí donde se debe interceptar la comunicación, siempre que no utilice https o algún otro método de cifrado, ya que lo que obtendrás serán bytes sin sentido.

Y si es desde el mismo equipo resultaría mas fácil leer la propia ventana del messenger, donde escribe el usuario, que intentar descifrar el protocolo de comunicación.

Por último, si no me equivoco, el messenger tiene la opción de registrar las conversaciones, y ya que contamos con el conocimiento y la colaboración del usuario (único uso legitimo para mi) por que no usar esa opción para registrar las conversaciones y luego crear un programa que periódicamente suba la información contenida en esos archivos a la base de datos.
Responder Con Cita
  #8  
Antiguo 28-06-2007
Avellas Avellas is offline
Miembro
 
Registrado: feb 2005
Posts: 31
Poder: 0
Avellas Va por buen camino
Muchisimas gracias a todos por la colaboracion, para quienes creen que es un tema de espionaje les aclaro que es una empresa Comisionista de Bolsa y que ellos tienen una reglamentacion donde el corredor firma una clausula en el contrato donde autoriza a que todas la conversaciones telefonicas y realizadas por messenger u otro aplicativo sean grabadas.
Responder Con Cita
  #9  
Antiguo 28-06-2007
Avellas Avellas is offline
Miembro
 
Registrado: feb 2005
Posts: 31
Poder: 0
Avellas Va por buen camino
Ardilla, le agradezco la colaboración, voy a probrar el codigo y aunque tengo muchas dudas mes espero a probarlo para luego molestarlo... Gracias
Responder Con Cita
  #10  
Antiguo 28-06-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Ok. Aquí estamos para lo que podamos ayudar, en lo que no, habrá que contratarlo...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #11  
Antiguo 28-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Por cierto ArdiIIa, el código que pusiste ¿que hace?, porque no lo tengo claro
Responder Con Cita
  #12  
Antiguo 28-06-2007
Avellas Avellas is offline
Miembro
 
Registrado: feb 2005
Posts: 31
Poder: 0
Avellas Va por buen camino
Ardilla, he probado el codigo pero al compilar me genera un error en esta clausula: HostEnt : PHostEnt;
error: Undeclared identifier PHostEnt
error: Undeclared identifier TSockAddrIn
error: Undeclared identifier u_int
error: Undeclared identifier CheckConexion
error: Undeclared identifier Crazy
error: Undeclared identifier WSAStartup
error: Undeclared identifier WSAData
error: Undeclared identifier Socket

mejor dicho, me da pena pero es posible que me ayudes con el codigo completo.

Gracias
Responder Con Cita
  #13  
Antiguo 28-06-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por Avellas
Ardilla, he probado el codigo pero al compilar me genera un error en esta clausula: HostEnt : PHostEnt;
error: Undeclared identifier PHostEnt
error: Undeclared identifier TSockAddrIn
error: Undeclared identifier u_int
error: Undeclared identifier CheckConexion
error: Undeclared identifier Crazy
error: Undeclared identifier WSAStartup
error: Undeclared identifier WSAData
error: Undeclared identifier Socket

mejor dicho, me da pena pero es posible que me ayudes con el codigo completo.

Gracias
No he probado este codigo, pero parece que debes agregar las unidades, IdWinsock y Winsock, en el uses de tu unidad.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #14  
Antiguo 28-06-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
También parece que falta algún método en dicho codigo, como por ejemplo, CheckConexion. Que allí hace referencia pero a simple vista no lo encuentro.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #15  
Antiguo 28-06-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Oh, oh, mal empezamos, si seoane no alcanza a comprender el código, es que es muy malo (el código ), o me he explicado mal, luego... veamos a ver si podemos explicarlo y de paso ayudamos a Avellas.

Hace mucho, mucho tiempo, prácticamente me vi en la misma situación que Avellas, por donde empezar ?? y como viene siendo muy común, este tipo de preguntas, suelen suscitar muchos resquemores y cuestiones éticas, pero lo cierto y verdad, es que al final tienes que dedicar tiempo a investigar por otros medios... y mira por donde, al parecer, ese fue mi primer mensaje en el foro....

Comencé por cosas esenciales tales como la estructura de un paquete TCP para ver que tecla tocar o donde mirar
(Cabecera del paquete RFC 790).
Código:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Versión|  IHL  |Tipo de Servic.|          Tamaño Total         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Identificación        |Flags|  Desplaz. del Fragmento |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Tiempo de Vida |   Protocolo   |    Checksum de la cabecera    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Dirección de Origen                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Dirección de Destino                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Una vez teniendo claros algunos conceptos, empecé a meterle mano al asunto.
Obviamente, para "escuchar un puerto", primeramente debemos saber que puerto escuchar, yo para ello utilizé el NETSTAT, redireccionado mediante un pipe, buscando la aplicación que deseamos "fiscalizar", este asunto también lo comenté en este hilo, y vuelvo a reiterar ahora, que por desgracia seoane aun no había publicado su código citado en ese mismo post.
Una vez que tenemos el puerto lo que hacemos es interceptarlo para ver todo lo que entra y sale. En mi caso solamente me interesaba la información que entraba, pues la que salía, se la suministraba yo por otro procedimiento. y este es esto justamente lo que hace el procedimiento que antes he insertado.

Todas las funciones utilizadas con sockets, están documentadas en la ayuda, asi como el modo de parametrizarlas, aunque reconozco que no son funciones fáciles y las cito según están en el código.

Paso a comentar mas o menos el código insertado anteriormente, primero que nada decir que hace falta el uses WinSock2 para tener acceso a algunas de las funciones socket. (ya comenta algo jhonny)


CheckConexion -> Es un procedimiento simplemente informativo, y chequea mediante un FindAWindow si el programa a controlar se está ejecutando, de no ser así, todo lo demás no tendría sentido...

WSAStartup -> Inicializa el sistema de sockets
WSASocket -> Crea el socket
Las funciones GetHostName, gethostbyname,ntoa son para obtener el nombre y la IP de la máquina local, las utilizo para ir plasmando información en un RichEdit, y es obvio que el maestro seoane las conoce muy bien....
Memo1Write-> Es un procedimiento que escribe en el RichEdit, en diferentes colores...

Seguidamente suministramos datos a la estructura SockInterface, la cual será utilizada por la función Bind para asociar la IP local al socket creado.
Si todo ha ido bien, utilizamos la función WSAIoctl que será la encargada de controlar el modo o comportamiento del socket, pasándole el parámetro SIO_RCVALL que habilita el socket para recibir todos los paquetes, remarcando que para utilizar este parámetro, hay que tener privilegios de administrador, o en caso contrario fallará. Además comentar que está disponible a partir de windows 2000 y superiores y hay que definirlo previamente: (sudores.... )
Código Delphi [-]
const
SIO_RCVALL = $98000001;
Finalmente con WSAAsyncSelect indicamos al socket nos trasmita los paquetes recibidos (FD_READ) en forma de mensaje windows.

Código Delphi [-]
const
  WM_NETEVENT = WM_USER + 103;

Mensajes que recibiremos en el procedimiento creado al efecto:

Código Delphi [-]
 procedure NetEvent(var NetMessage: TMessage); message WM_NETEVENT;

En este procedimiento es donde haremos la lectura de los datagramas. Esto no lo he comentado anteriormente, pero en esencia es leer y procesar:

Código Delphi [-]
  
if WSARecv(Socket, @wbuf, 1, BytesRet, dwFlags, nil, nil) = 0 then

y por último, decir que me creé una estructura para filtrar la información de los paquetes recibidos....

Código Delphi [-]
type
//La cabecera son 20 bytes como normal general, en el byte 21, comienzan los datos del paquete..
PHeader = ^THeader;
THeader = record
Version_IHL   : Byte;         // 4 Bits  Version ------ 4 Bits IHL (Internet Header Length)
Tipo_Servicio : Byte ;        //
Longitud_Total: Word;         // Longitud del Paquete o Datagrama
Identificacion: Word;         // Utilizado para ensamblar paquetes fragmentados
Flag_Offset   : Word;       // Paquetes fragmentados
Tiempo_Vida   : Byte;         // Tiempo de espera
Protocolo     : Byte;         // Protocolo
Checksum      : Word;
IP_Source     : LongInt;
IP_Destino    : LongInt;
End;

Creo que mas o menos he explicado el procedimiento, aunque debo aclarar, que lo mio no es la docencia, pues mas que explicar las cosas, que por cierto se me da bastante mal, prefiero ponerlas en práctica, y eso se consigue indagando y programando.


Cita:
Empezado por Avellas
mejor dicho, me da pena pero es posible que me ayudes con el codigo completo.
Amigo Avellas, sin ánimo de ofenderte, creo que fuiste un poco "alegre", pensando que tras compilar el código propuesto, tendrías resuelto algunas o todas tus inquietudes. Mi intención era/es orientarte como empezar y en un momento, además de orientaciones, se pueden resolver dudas puntuales, de otro modo esto se podría convertir en un servicio técnico gratuito, y creo que esa no es la filosofía de los foros.

Cita:
Empezado por Avellas
error: Undeclared identifier Crazy
Es obvio que obtengas este tipo de mensajes, dado que en mi post, no puse la totalidad de código. En este caso por ejemplo era una variable que no viene a cuento de todo lo comentado.



Cita:
Empezado por seoane
Por último, si no me equivoco, el messenger tiene la opción de registrar las conversaciones
Como ya hace tiempo comenté, es un programa que no utilizo, pero creo que esta opción si existe, y tal vez, para resolver esta cuestión, esta también sería una opción a tener en cuenta, aunque a mi personalmente, me parece mas "fascinante" la forma que propongo, de este modo, te apartas un poco de la programación convencional.

Cita:
Empezado por seoane
Por cierto ArdiIIa, el código que pusiste ¿que hace?, porque no lo tengo claro
Espero que ahora te quede, aunque solo sea un poquito mas claro...

Saludos
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #16  
Antiguo 29-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Interesante, no conocía la posibilidad de poner los sockets en modo promiscuo. Ahora mismo no tengo tiempo, pero en cuanto pueda le echo un vistazo.

Gracias Ardilla
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
delphi y ms messenger `````` alejo000 Internet 9 16-02-2009 19:16:02
Eliminar Messenger rafita Windows 11 16-01-2008 19:30:13
messenger por comandos Cosgaya Varios 0 01-02-2006 12:58:17
Messenger ListBOx?? vtdeleon OOP 2 10-02-2005 14:09:48
API's de messenger 6? darkone2k3 API de Windows 3 30-01-2004 18:09:13


La franja horaria es GMT +2. Ahora son las 17:43:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi