Monitoramento de MSN com imsniff

Neste artigo explicarei de forma simples e direta a instalação do imsniff, um sniffer de conversas de MSN Messenger.

[ Hits: 36.775 ]

Por: Ricardo Jacomel em 19/11/2007


Instalação e execução



Apesar do imsniff não ser atualizado desde setembro de 2005, funciona muito bem. Ressalto que este procedimento foi testado em Debian (Sarge e Etch), Fedora Core (2, 3 e 5) e Red Hat 9, sempre com duas interfaces de rede (uma para a Internet e outra para a rede interna).

O imsniff depende da instalação da libpcap:

# cd /usr/src
# wget
http://www.tcpdump.org/release/libpcap-0.9.8.tar.gz
# tar xvzpf libpcap-0.9.8.tar.gz
# cd /usr/src/libpcap-0.9.8
# ./configure
# make
# make install
# ln -s /usr/local/lib/libpcap.a /usr/lib/libpcap.so.0.7


A instalação do imsniff é muito simples:

# mkdir /usr/src/imsniff
# cd /usr/src/imsniff
# wget
http://ufpr.dl.sourceforge.net/sourceforge/im-snif/imsniff_0.04.tgz
# tar xvzpf imsniff_0.04.tgz
# cd /usr/src/imsniff/linux
# ./build
# mv imsniff /usr/local/bin
# mkdir -p /var/log/imsniff/conversation
# mkdir /var/www/msn


Para a inicialização e monitoramento do processo do imsniff utilizaremos o daemontools. Isto porque, em algumas instalações, o processo do imsniff "cai" sem explicação. Caso isto aconteça, será reiniciado automaticamente.

Para instalar o daemontools faça o seguinte:

# cd /usr/src
# wget
http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
# mkdir -p /package
# chmod 1755 /package
# cd /package
# tar xvzpf /usr/src/daemontools-0.76.tar.gz
# cd /package/admin/daemontools-0.76
# ./package/install


* NOTA: Caso retorne um erro do tipo "cannot stat `compile/svscan", antes de prosseguir com a instalação, edite o arquivo "/package/admin/daemontools-0.76/src/error.h" e altere a seguinte linha (provavelmente linha 6):

De:

extern int errno;

Para:

#include <errno.h>

Repita a compilação:

# cd /package/admin/daemontools-0.76
# ./package/install


Criando os diretórios do supervise para o imsniff:

# mkdir -p /var/imsniff/supervise
# cd /var/imsniff/supervise
# mkdir imsniff
# chmod +t imsniff


Crie o arquivo "/var/imsniff/supervise/imsniff/run" com o seguinte conteúdo, adaptando ao seu servidor:

#!/bin/sh

# imsniff: sniffer de MSN Messenger

# Interface em que o imsniff irá "escutar"

INTERFACE='eth1' # Sempre a interface da rede interna (LAN)

# Diretório onde as conversas serão armazenadas
CONVERSAS='/var/log/imsniff/conversation'

# Diretório de logs
LOGS='/var/log/imsniff'

# Caminho para o executável
IMSNIFF='/usr/local/bin/imsniff'

# Comando para carga do imsniff
exec $IMSNIFF -cd $CONVERSAS -dd $LOGS -vvv $INTERFACE

Acerte as permissões:

# chmod 751 /var/imsniff/supervise/imsniff/run
# ln -s /var/imsniff/supervise/imsniff /service


Com isto o imsniff já deverá estar rodando. Verifique com o comando "ps". Deverá retornar algo como abaixo:

# ps aux | grep imsniff
root 6649 0.0 0.0 1428 300 ? S 11:56 0:00 supervise imsniff
root 6657 0.0 0.2 2864 1100 ? S 11:56 0:00 /usr/local/bin/imsniff -cd /var/log/imsniff/conversation -dd /var/log/imsniff -vvv eth1
root 6727 0.0 0.1 2872 760 pts/1 S+ 12:04 0:00 grep imsniff

Como visto no script acima, todas as conversas estarão armazenadas no diretório "/var/log/imsniff/conversation". Dentro deste diretório serão criados sub-diretórios com os endereços de MSN capturados da rede. Dentro destes sub-diretórios estarão as conversas em arquivos texto com o nome de usuários remotos, como no exemplo abaixo:

# ls -la /var/log/imsniff/conversation/fulano\@hotmail.com/
total 20
drwx------ 2 root root 4096 2007-10-30 13:30 .
drwxr-xr-x 8 root root 4096 2007-10-30 13:38 ..
-rw-r--r-- 1 root root 1395 2007-10-30 13:39 amigo1@hotmail.com.log
-rw-r--r-- 1 root root 728 2007-10-30 13:38 events.log
-rw-r--r-- 1 root root 197 2007-10-30 13:31 amigo2@hotmail.com.log

Para verificar o conteúdo de uma conversa, um simples "cat" resolve. Ex.:

# cat /var/log/imsniff/conversation/fulano\@hotmail.com/amigo1@hotmail.com.log

O resultado deverá ser algo parecido com isto:

********************* CHAT START *************************
Tue Oct 30 13:40:55 2007 | amigo1@hotmail.com: ola! você esta monitorando nossa conversa?
Tue Oct 30 13:41:28 2007 | fulano@hotmail.com: sim... :-D
Tue Oct 30 13:42:21 2007 | amigo1@hotmail.com: ai... caiu a casa!

Naturalmente o formato visual para análise das conversas não é muito agradável. Neste caso pode-se criar algum script que transforme estas conversas em páginas HTML.

* NOTA: Caso deseje utilizar o monitoramento em ambiente empresarial, é altamente recomendável consultar o departamento jurídico para certificar-se da legalidade.

   

Páginas do artigo
   1. Instalação e execução
Outros artigos deste autor

Dois links de ADSL em um mesmo servidor

Firewall rápido e seguro com iptables

Leitura recomendada

Load Balancer com Failover, Perlbal e Heartbeat para servidores web

Recurso de Views no Bind

Porque segurança importa?

Implementação de VPN com OpenVPN

Site for IE: Até quando?

  
Comentários
[1] Comentário enviado por gleissonmb em 19/11/2007 - 10:24h

Nao consigo parar o servico...justamente por causa do "daemontools"
Como fazer pra parar?

[2] Comentário enviado por acollucci em 19/11/2007 - 10:42h

finooooooo!!!! add em meus favoritos

[3] Comentário enviado por rjacomel em 19/11/2007 - 11:00h

gleissonmb,

Para parar o serviço, execute:

# svc -d /service/imsniff

Para iniciar novamente:

# svc -u /service/imsniff

Abraço

[4] Comentário enviado por nathanielmorais em 19/11/2007 - 14:22h

Eu uso o Debian 4.0. Quando eu dou o make olha o que dá:

yacc -d grammar.y
make: yacc: Comando não encontrado
make: ** [grammar.c] Erro 127


Como eu resolvo isso?

[5] Comentário enviado por nathanielmorais em 19/11/2007 - 14:29h

Bom, se alguém tiver esse problema como o meu aí de vima, é só instalar o bison:
#apt-get install bison

[6] Comentário enviado por gleissonmb em 19/11/2007 - 15:37h

Espetacular essa solucao do monitoramento MSN....a melhor...

[7] Comentário enviado por gleissonmb em 19/11/2007 - 15:38h

Posso usar o daemontools para monitorar outros servicos?
Como?

[8] Comentário enviado por rjacomel em 19/11/2007 - 15:55h

O daemontools pode ser utilizado para monitorar muitos (se não quaisquer) serviços... Você pode se basear neste artigo mesmo (veja o arquivo "/var/imsniff/supervise/imsniff/run").

Recomendo que você acesse o site dos desenvolvedores para maiores informações:

http://cr.yp.to/daemontools.html

[9] Comentário enviado por andersonmsp em 20/11/2007 - 12:05h

Bom dia a todos,
Parabéns pelo artigo aqui vou postar uma pequena contribuição para gerar os relatorios em HTML, caso alguém venha aprimorar esse codigo envia para o zagolinux@gmail.com ou para andersonmsp@gmail.com

Segue o link abaixo.
http://www.zago.eti.br/msn.html

Abraços a todos
Anderson

[10] Comentário enviado por ThE_BoOt em 21/11/2007 - 10:06h

Alguem conhece alguma solução parecida para Google Talk ?

[11] Comentário enviado por theshadow em 21/11/2007 - 16:21h

Instalei e está funcinando perfeitamente. Porém o serviço pára sem motivos aparente. Alguma sugestão!! Uso o Mandriva Free 2006.

[12] Comentário enviado por giaco em 22/11/2007 - 07:59h

O meu IMsniff também parava constantemente, então pesquisando encontrei uma solução: substituir algumas linhas nos arquivos msn_conntrack.cpp e util.cpp. Como não lembro qual parte deve ser substituída, aí vão os arquivos: (Vale lembrar que o programa deve ser recompilado)

msn_conntrack.cpp

/* THE CODE HERE TAKES CARE OF KEEPING TRACKING OF THE INFORMATION WE
COLLECT ABOUT ONGOING TCP CONNECTIONS */

#include "imsniff.h"

struct msn_connection *msn_conns_first = NULL;
struct msn_connection *msn_conns_last = NULL;

void add_user_to_sb (struct msn_connection *conn, u_char *user)
{
if (conn!=NULL && conn->users!=NULL)
{
int i=0;
while (i<conn->num_users)
{
if (strcmp ((char *) conn->users[i], (char *) user)==0)
return; // Don't duplicate
i++;
}
}

log_debug (5, "Adding user [%s] to SB",user);
if (!conn)
{
conn = (struct msn_connection *) malloc (sizeof (struct msn_connection));
if (!conn)
return;
if (msn_conns_first==NULL)
msn_conns_first=conn;

memset (conn,0,sizeof (struct msn_connection)); // All zeros is fine
if (msn_conns_last != NULL)
{
msn_conns_last->next=conn;
conn->previous=msn_conns_last;
}
msn_conns_last=conn;

conn->users=NULL;
conn->num_users=0;
conn->log_full_path=NULL;

}
conn->users=(u_char **) realloc (conn->users, sizeof (u_char *) * (conn->num_users+1));
log_debug (5, "Done realloc");
if (conn->users!=NULL)
{
conn->users[conn->num_users]=(u_char *) malloc (strlen ((char *) user) +1 );
log_debug (5, "Done malloc");
strcpy ((char *) conn->users[conn->num_users],(char *) user);
log_debug (5, "Done strcpy");
conn->num_users++;
}
log_debug (5, "Done, number of users now = %d",conn->num_users);
}

void clear_msn_connection (struct msn_connection *conn)
{
log_debug (3, "Clearing connection %d.%d.%d.%d:%d -> %d.%d.%d.%d:%d",
conn->IP_A.byte1,conn->IP_A.byte2,conn->IP_A.byte3,conn->IP_A.byte4,
conn->port_A, conn->IP_B.byte1,
conn->IP_B.byte2,conn->IP_B.byte3,conn->IP_B.byte4,conn->port_B);
if (conn->owner!=NULL)
{
free (conn->owner);
conn->owner=NULL;
}
conn->conn_type=type_unknown;
if (conn->users!=NULL)
{
int i=0;
while (i<conn->num_users)
{
free (conn->users[i]);
i++;
}
free (conn->users);
conn->num_users=0;
}
if (conn->pending_A!=NULL)
free (conn->pending_A);
if (conn->pending_B!=NULL)
free (conn->pending_B);
if (conn->log_full_path!=NULL)
free (conn->log_full_path);
conn->pending_A_length=0;
conn->pending_B_length=0;
conn->pending_A=NULL;
conn->pending_B=NULL;
conn->log_full_path=NULL;
conn->whowserver=unknown;

}

void set_owner (struct msn_connection *conn, u_char *owner)
{
if (conn==NULL || owner==NULL)
{
log_debug (0, "Entry in set_owner() with NULL parameter(s)");
return;
}
log_debug (5, "Setting owner [%s] to connection %d.%d.%d.%d:%d -> %d.%d.%d.%d:%d",
owner, conn->IP_A.byte1,conn->IP_A.byte2,conn->IP_A.byte3,conn->IP_A.byte4,
conn->port_A, conn->IP_B.byte1,
conn->IP_B.byte2,conn->IP_B.byte3,conn->IP_B.byte4,conn->port_B);

if (conn->owner != NULL)
{
if (strcmp ((char *) conn->owner, (char *) owner))
{
log_debug (0, "Warning: Owner change in MSN connection, this looks like a bug");
}
else
{
log_debug (5, "set_owner(): Owner match, all OK");

}
}
else
{
log_debug (5, "(no previous owner)");
}
strcpymalloc (&conn->owner, owner);
}

int is_from_A (struct msn_connection *conn, ip_address *ip, int port)
{
if (conn==NULL)
return -1;
if (conn->IP_A.byte1 == ip->byte1 &&
conn->IP_A.byte2 == ip->byte2 &&
conn->IP_A.byte3 == ip->byte3 &&
conn->IP_A.byte4 == ip->byte4 &&
conn->port_A == port)
{
return 1;
}
if (conn->IP_B.byte1 == ip->byte1 &&
conn->IP_B.byte2 == ip->byte2 &&
conn->IP_B.byte3 == ip->byte3 &&
conn->IP_B.byte4 == ip->byte4 &&
conn->port_B == port)
{
return 0;
}
return -1; // Not from any of them */


}

int is_from_server (struct msn_connection *conn, ip_address *ip, int port)
{
if (conn==NULL)
return -1;
if (conn->IP_A.byte1 == ip->byte1 &&
conn->IP_A.byte2 == ip->byte2 &&
conn->IP_A.byte3 == ip->byte3 &&
conn->IP_A.byte4 == ip->byte4 &&
conn->port_A == port)
{
if (conn->whowserver==endpointA)
return 1;
else
return 0;
}
if (conn->IP_B.byte1 == ip->byte1 &&
conn->IP_B.byte2 == ip->byte2 &&
conn->IP_B.byte3 == ip->byte3 &&
conn->IP_B.byte4 == ip->byte4 &&
conn->port_B == port)
{
if (conn->whowserver==endpointB)
return 1;
else
return 0;
}
return -1; // Not server and not user?
}

void set_as_server (struct msn_connection *conn, ip_address *ip, int port)
{
if (conn==NULL)
return;

if (conn->IP_A.byte1 == ip->byte1 &&
conn->IP_A.byte2 == ip->byte2 &&
conn->IP_A.byte3 == ip->byte3 &&
conn->IP_A.byte4 == ip->byte4 &&
conn->port_A == port)
{
if (conn->whowserver==endpointB)
{
log_debug (0, "Warning: In this connection, the server was previously misidentified");
}
conn->whowserver=endpointA;
}
else
{
if (conn->whowserver==endpointA)
{
log_debug (0, "Warning: In this connection, the server was previously misidentified");
}
conn->whowserver=endpointB;
}
}

int remove_msn_connection (struct msn_connection *conn)
{
if (conn)
{
log_debug (5, "Removing connection from linked list");
clear_msn_connection (conn);
if (conn->previous!=NULL)
conn->previous->next=conn->next;
if (conn->next!=NULL)
conn->next->previous=conn->previous;
if (msn_conns_first == conn)
msn_conns_first = conn->next;
if (msn_conns_last == conn)
msn_conns_last = conn->previous;
free (conn);
}
return 0;
}


struct msn_connection *get_or_create_msn_connection (ip_address *source_ip, int source_port,
ip_address *target_ip, int target_port,
enum e_msn_conn_create create)
{
struct msn_connection * ipa = msn_conns_first;
log_debug (5,"get_or_create_msn_connection: %d.%d.%d.%d:%d -> %d.%d.%d.%d:%d",
source_ip->byte1,source_ip->byte2,source_ip->byte3,source_ip->byte4,source_port,
target_ip->byte1,target_ip->byte2,target_ip->byte3,target_ip->byte4,target_port);

int i=0;
while (ipa)
{
log_debug (6,"%d - IPA: %d.%d.%d.%d:%d -> %d.%d.%d.%d:%d",i,
ipa->IP_A.byte1,ipa->IP_A.byte2,ipa->IP_A.byte3,ipa->IP_A.byte4,ipa->port_A,
ipa->IP_B.byte1,ipa->IP_B.byte2,ipa->IP_B.byte3,ipa->IP_B.byte4,ipa->port_B);
if ((ipa->IP_A.byte1 == source_ip->byte1 &&
ipa->IP_A.byte2 == source_ip->byte2 &&
ipa->IP_A.byte3 == source_ip->byte3 &&
ipa->IP_A.byte4 == source_ip->byte4 &&
ipa->port_A == source_port &&
ipa->IP_B.byte1 == target_ip->byte1 &&
ipa->IP_B.byte2 == target_ip->byte2 &&
ipa->IP_B.byte3 == target_ip->byte3 &&
ipa->IP_B.byte4 == target_ip->byte4 &&
ipa->port_B == target_port) ||
(ipa->IP_A.byte1 == target_ip->byte1 &&
ipa->IP_A.byte2 == target_ip->byte2 &&
ipa->IP_A.byte3 == target_ip->byte3 &&
ipa->IP_A.byte4 == target_ip->byte4 &&
ipa->port_A == target_port &&
ipa->IP_B.byte1 == source_ip->byte1 &&
ipa->IP_B.byte2 == source_ip->byte2 &&
ipa->IP_B.byte3 == source_ip->byte3 &&
ipa->IP_B.byte4 == source_ip->byte4 &&
ipa->port_B == source_port))
{
log_debug (6, "Match");
if (create==create_replace)
clear_msn_connection(ipa);
log_debug (5, "Connection requested found");
return ipa;
}
else
{
log_debug (5, "No match");
}
i++;
ipa=ipa->next;
}
if (create==create_yes)
{
struct msn_connection * ipa = (struct msn_connection *) malloc (sizeof (struct msn_connection));
log_debug (5, "Creating new connection, %d", i);
if (ipa!=NULL)
{
if (msn_conns_first==NULL)
msn_conns_first=ipa;

memset (ipa,0,sizeof (struct msn_connection)); // All zeros is fine
if (msn_conns_last != NULL)
{
msn_conns_last->next=ipa;
ipa->previous=msn_conns_last;
}
msn_conns_last=ipa;
memcpy (&ipa->IP_A,source_ip,sizeof (struct ip_address));
ipa->port_A=source_port;
memcpy (&ipa->IP_B,target_ip,sizeof (struct ip_address));
ipa->port_B=target_port;
ipa->whowserver=unknown;
ipa->num_users=0;
ipa->users=NULL;
ipa->log_full_path=NULL;
return ipa;
}

}
return NULL;

}


util.cpp

#include "imsniff.h"
#include <stdarg.h>
#include <time.h>
#include <ctype.h>

int debug_level = 2;

char *gettimestring4log (char *store)
{
time_t now=time (NULL);
#ifdef WIN32
struct tm *stm;
stm = localtime (&now);
strncpy (store, asctime(stm), 24);
#else
struct tm stm;
localtime_r (&now, &stm);
asctime_r (&stm, store);
#endif
store[24]=0;
return store;
}

int createdir4nick (u_char *nick)
{
if (nick && nick[0])
{
char dir[1024];
strcpy (dir, chatlogdir);
if (dir[strlen (dir)-1]!='/')
strcat (dir,"/");
strcat (dir,(char *) nick);
#ifdef WIN32
mkdir (dir);
#else
mkdir (dir,0755);
#endif
}
return 0;
}

int log_switchboard_end (struct msn_connection *conn)
{
if (conn!=NULL && conn->log_full_path!=NULL)
{
FILE *o=fopen (conn->log_full_path, "a+t");
if (o!=NULL)
{
fprintf (o, "********************* CHAT END *************************\n");
fclose (o);
}
}
return 0;
}

int log_switchboard_event (struct msn_connection *conn, const char *fmt, ...)
{
char strtme[27];
char *result;
int firsttime = 0;

if (conn == NULL || conn->owner == NULL)
{
log_debug (0, "No switchboard or unknown owner, can't log");
return -1;
}
if (conn->log_full_path==NULL && chatlogdir[0]!=0)
{
if (conn->users==NULL || conn->users[0]==NULL)
{
log_debug (0, "No known partipants in SB owned by %s, can't log", conn->owner);
return -1;
}
size_t l=strlen (chatlogdir)+1+strlen ((char *) conn->owner)+1+
strlen ((char *) conn->users[0])+5;
conn->log_full_path=(char *) malloc (l);
if (conn->log_full_path==NULL)
return -1;
sprintf (conn->log_full_path,"%s/%s/%s.txt",chatlogdir,conn->owner,conn->users[0]);
log_debug (0, "Set SB log name to: %s",conn->log_full_path);
firsttime = 1;
}
gettimestring4log (strtme);
va_list ap;
#ifdef WIN32
result=(char *) malloc (MAX_VPRINTF);
if (result)
{
va_start(ap, fmt);
vsnprintf (result, MAX_VPRINTF, fmt, ap);
va_end (ap);

}
#else
va_start (ap, fmt);
vasprintf (&result,fmt,ap);
va_end (ap);
#endif
if (conn->log_full_path!=NULL)
{
FILE *o=fopen (conn->log_full_path, "a+t");
if (o!=NULL)
{
if (firsttime)
fprintf (o, "********************* CHAT START *************************\n");
fprintf (o, "%s | %s\n", strtme, result);
fclose (o);
}
else
{
log_debug (0, "Failed to create/append SB event file at [%s]", conn->log_full_path);
}
}
else
{
log_debug (0, "SB event: %s", result);
}
free (result);

return 0;
}

int delete_profile (u_char *nick)
{
if (nick && nick[0]!=0 && chatlogdir[0]!=0)
{
log_debug (3, "Deleting profile [%s]", nick);
char fn[1024];
sprintf (fn, "%s/%s/profile.txt", chatlogdir, nick);
unlink (fn);
}
return 0;
}

int delete_contact_list (u_char *nick)
{
if (nick && nick[0]!=0 && chatlogdir[0]!=0)
{
log_debug (3, "Deleting contact list for [%s]", nick);
char fn[1024];
sprintf (fn, "%s/%s/contact_list.txt", chatlogdir, nick);
unlink (fn);
}
return 0;
}

int log_profile (u_char *nick, u_char *payload, int length)
{
char strtme[27];
gettimestring4log (strtme);
log_debug (5, "Entry in log_profile");
if (nick && nick[0]==0)
log_debug (3, "Profile for an unknown user, not logged");
else
{
u_char *prof = (u_char *) malloc (length + 1);
if (prof == NULL)
return OUT_OF_MEMORY;

memcpy (prof, payload, length);
prof[length]=0;

if (chatlogdir[0]==0)
{
log_debug (1, "%s | %s | %s", strtme, nick, prof);
}
else
{
createdir4nick (nick);
char fn[1024];
sprintf (fn, "%s/%s/profile.txt", chatlogdir, nick);
FILE *o=fopen (fn, "w");
// printf ("%s\n",fn);
if (o!=NULL)
{
fwrite (prof, 1, length, o);
fclose (o);
}
else
{
log_debug (0, "Failed to create profile file [%s]", fn);
}
}
free (prof);
}
return 0;
}

int log_contact (u_char *nick, u_char *contact)
{
char strtme[27];
gettimestring4log (strtme);
log_debug (5, "Entry in log_contact");
if (nick && nick[0]==0)
log_debug (3, "Contact [%s] for an unknown user, not logged", contact);
else
{
if (chatlogdir[0]==0)
{
log_debug (1, "%s | %s | Contact: %s", strtme, nick, contact);
}
else
{
createdir4nick (nick);
char fn[1024];
sprintf (fn, "%s/%s/contact_list.txt", chatlogdir, nick);
FILE *o=fopen (fn, "a+t");
// printf ("%s\n",fn);
if (o!=NULL)
{
fprintf (o, "%s | %s\n", strtme, contact);
fclose (o);
}
else
{
log_debug (0, "Failed to create contact file [%s]", fn);
}
}
}
return 0;
}

int log_debug (int level, const char *fmt, ...)
{
char *result;
char strtme[27];
if (level<=debug_level)
{
gettimestring4log (strtme);
va_list ap;
#ifdef WIN32
result=(char *) malloc (MAX_VPRINTF);
if (result)
{
va_start(ap, fmt);
vsnprintf (result, MAX_VPRINTF, fmt, ap);
va_end (ap);

}
#else
va_start (ap, fmt);
vasprintf (&result,fmt,ap);
va_end (ap);
#endif
if (debuglogdir[0]==0)
{
if (!daemonize)
printf ("%s | %d | %s\n", strtme, level, result);
}
else
{
char fn[1024];
time_t now=time (NULL);
#ifdef WIN32
struct tm *stm;
stm= localtime (&now);
sprintf (fn, "%s/imsniff_%04d-%02d-%02d.txt", debuglogdir, stm->tm_year, stm->tm_mon, stm->tm_mday);
#else
struct tm stm;
localtime_r (&now, &stm);
sprintf (fn, "%s/imsniff_%04d-%02d-%02d.txt", debuglogdir, stm.tm_year, stm.tm_mon, stm.tm_mday);
#endif
FILE *o=fopen (fn, "a+t");
if (o!=NULL)
{
fprintf (o, "%s | %d | %s\n", strtme, level, result);
fclose (o);
}
}
free (result);
}
return 0;
}

int log_event (u_char *nick, const char *fmt, ...)
{
char *result;
va_list ap;
char strtme[27];
#ifdef WIN32
result=(char *) malloc (MAX_VPRINTF);
if (result)
{
va_start(ap, fmt);
vsnprintf (result, MAX_VPRINTF, fmt, ap);
va_end (ap);

}
#else
va_start (ap, fmt);
vasprintf (&result,fmt,ap);
va_end (ap);
#endif
gettimestring4log (strtme);
if (nick==NULL || nick[0]==0)
log_debug (1, "Event for an unknown nick: %s", result);
else
{
if (chatlogdir[0]==0)
{
log_debug (1, "Nick [%s] Event: [%s]", nick, result);
}
else
{
createdir4nick (nick);
char fn[1024];
sprintf (fn, "%s/%s/events.txt", chatlogdir, nick);
FILE *o=fopen (fn, "a+t");
// printf ("%s\n",fn);
if (o!=NULL)
{
fprintf (o, "%s | %s\n", strtme, result);
fclose (o);
}

}
}

free (result);
return 0;
}

int get_new_line_malloc (u_char **target, u_char *source, int length)
{
int must_free=0;
if (length<2) // No room for \r\n
{
log_debug (5, "get_new_line_malloc: line too short.");
return LINE_INCOMPLETE;
}
if (target!=NULL)
{
if (*target != NULL)
free (*target);
*target = (u_char *) malloc (length + 1);
if (*target == NULL)
return OUT_OF_MEMORY;
memset (*target, 0, length+1);

}

u_char *now = source; // Where we are copying from
u_char *work = (target==NULL)?NULL:*target; // Where, if anywhere, we are copying to
int skipped=0;
while (skipped<length-2 && *now!='\n' && *now!='\r')
{
if (work!=NULL && *now>=' ')
{
*work=*now;
*work++;
}
skipped++;
*now++;
}
if ( *(now)!='\r' || *(now+1)!='\n') // No \r\n? Not MSN or incomplete
{
log_debug (5, "get_new_line_malloc: Incomplete\n");
log_debug (5, "get_new_line_malloc: Source was: %s\n",source); // TODO: Fix not null-terminated!
return -1;
}
return skipped+2; // Skip \r\n too
}

/* Note: *line must be zero-terminated (as returned by get_new_line_malloc) */

void dump_tokens (u_char **tokens)
{
if (tokens==NULL)
return;
int i=0;
while (tokens[i]!=NULL)
{
log_debug (0, "Token %d: %s",i, tokens[i]);
i++;
}
}

u_char *strcpymalloc (u_char **target, u_char * src)
{
if (target==NULL)
return NULL;
if (*target!=NULL)
free (*target);
*target=(u_char *) malloc (strlen ((char *) src)+1);
if (*target!=NULL)
{
strcpy ((char *) *target,(char *) src);
}
return *target;
}

void free_array (u_char ***tokens)
{
if (*tokens!=NULL)
{
int i=0;
while ((*tokens)[i]!=NULL)
{
free ((*tokens)[i]);
i++;
}
/* ...free the array itself */
free (*tokens);
}
}

int get_tokens (u_char *line, u_char ***tokens, int max_tokens)
{
log_debug (5, "entry in get_tokens");
int capacity = (max_tokens==0)?50:max_tokens;
/* First, delete the tokens if there are any ... */
free_array(tokens);
*tokens=(u_char **) malloc (sizeof (u_char *) * (capacity +1)); // Final one is NULL
if (*tokens==NULL)
return OUT_OF_MEMORY;
int num=0; /* Number of tokens added so far */
u_char *now = line;
u_char *newtoken;
for (;;)
{
size_t i;
/* Skip spaces and control stuff */
while (*now<=' ' && *now!=0)
{
now++;
}

if (*now==0) /* End of line */
break;

i=0;
if (max_tokens==num+1 && max_tokens!=0)
i=strlen ((char *) now);
else
{
while (now[i]>' ') /* Look ahead, how long is the next token? */
i++;
}
newtoken=(u_char *) malloc (i+1);
memcpy (newtoken, now, i);
now = now + i;
newtoken[i]=0;

if (num==capacity)
{
capacity += 10;
*tokens = (u_char **) realloc (*tokens, sizeof (u_char *) * (capacity +1));
if (*tokens==NULL) /* A bit unstable now I'm afraid */
return OUT_OF_MEMORY;
}

(*tokens)[num]=newtoken;
if (num==7)
{
break;
}
num++;
}

(*tokens)[num]=NULL;
return num;
}

int get_value_from_hex (char c)
{
c=toupper (c);
if (c>='0' && c<='9')
return c-'0';
if (c>='A' && c<='F')
return c-'A';
return -1;
}

u_char *urldecode (u_char *src)
{
u_char *tmp = (u_char *) malloc (strlen ((char *) src) + 1);
u_char *c = src;
if (tmp==NULL)
return src;
memset (tmp, 0, strlen ((char *) src) +1);
u_char *now = tmp;
while (*c)
{
if (*c!='%')
{
*now = *c;
now++;
c++;
}
else
{
if (*(c+1)==0 || *(c+2)==0) // ?? Doesn't look good.
{
free (tmp);
return src;
}
int v1 = get_value_from_hex (* (c+1));
int v2 = get_value_from_hex (* (c+2));
if (v1==-1 || v2==-1)
{
free (tmp);
return src;
}
*now = (v1*16+v2);
now++;
c+=3;
}
}
strcpy ((char *) src, (char *) tmp);
free (tmp);
return src;
}

[13] Comentário enviado por hbueno em 22/11/2007 - 09:26h

E se os usuários utilizam proxy no msn? não funciona neh?

[14] Comentário enviado por rjacomel em 22/11/2007 - 09:30h

hbueno,

Não sei lhe dizer se funciona com proxy. Nos cenários testados não utilizei proxy. Seria interessante, caso alguém tenha feitos os testes necessários, postar aqui.

Abraço.


[15] Comentário enviado por hbueno em 22/11/2007 - 09:45h

pois é... se passar por um squid não funciona... acabei de testar...

Alguém teria uma idéia de como contornar essa situação?
Eu posso forcar o usuário a não utilizar proxy no msn, porém o messenger pega as configurações do IE.

[16] Comentário enviado por theshadow em 22/11/2007 - 14:23h

no meu caso o msn passa pelo proxy (proxy trasnparente) e está registrando tudo.

[17] Comentário enviado por hbueno em 22/11/2007 - 14:47h

o meu é autenticado, e não vai...

[18] Comentário enviado por lgf143 em 22/11/2007 - 16:33h

erro ao instalar daemontools-076

uso debian etch 4.0

Linking ./src/* into ./compile...
Compiling everything in ./compile...
package/compile: line 20: exec: make: not found
Copying commands into ./command...
cp: impossível fazer stat em `compile/svscan': Arquivo ou diretório não encontrado

fiz a alteração de extern int errno para

include <errno.h>

note que ele diz que o erro esta na line 20
segue abaixo o vi do error.h

/* Public domain. */

#ifndef ERROR_H
#define ERROR_H

include <errno.h>

extern int error_intr;
extern int error_nomem;
extern int error_noent;
extern int error_txtbsy;
extern int error_io;
extern int error_exist;
extern int error_timeout;
extern int error_inprogress;
extern int error_wouldblock;
extern int error_again;
extern int error_pipe;
extern int error_perm;
extern int error_acces;
extern int error_nodevice;
extern int error_proto;
extern int error_isdir;
extern int error_connrefused;
extern int error_notdir;

extern const char *error_str(int);
extern int error_temp(int);

#endif




[19] Comentário enviado por rjacomel em 22/11/2007 - 18:52h

lgf143,

Tente começar a instalação do daemontools do zero e, antes de compilar, faça a alteração no arquivo:

# rm -rf /package/*
# cd /package
# tar xvzpf /usr/src/daemontools-0.76.tar.gz

Faça a alteração no arquivo "/package/admin/daemontools-0.76/src/error.h" e continue a instalação:

# cd /package/admin/daemontools-0.76
# ./package/install

[20] Comentário enviado por mppdc em 22/11/2007 - 20:01h

Olá pessoal, muito legal a solução, funciona muito bem.
Tiveram alguns problemas, mas eu contornei, está pegando normal, com proxy transparente, e pega tanto maquina windows (MSN) quanto linux (aMSN ou PigDin) só tem uma coisa... normalmente a primeira frase é descartada.
Com alguém aconteceu algo parecido ??? por ex, se alguem diz "Vc está aí" e a outra pessoa responde "Estou"
só fica o "Estou", depois left the conversation.
Alguma dica para resolver ???

[21] Comentário enviado por Érico Schuch em 22/11/2007 - 21:36h

mppdc

Segundo documentação do mesmo, a conversa só é logada devido a uma falha na troca de chaves entre os msn. Quando um leva muito tempo pra responder, acontece uma nova negociação das chaves, o que impede que a conversa seja completamente monitorada. Nos meus testes, vi que se as duas pontas responderem entre elas com + de 1 minuto, as conversas NUNCA são logadas. Acredito que posso estar errado, pois não consigo achar a referencia na documentação do imsniff, mas que me lembro, era isso mesmo. ;)

[22] Comentário enviado por lgf143 em 23/11/2007 - 07:40h

rjacomel

agradeço por responder, mais fiz como vc disse e continua o mesmo erro.

Mais notei tambem que na hora de compilar o libpcap-0.9.8, tambem nao da certo da uma olhada na configuracao abaixo:

depois que dou ./configure
ele começa a checar mais no fim do arquivo da um erro, sera que isso nao esta relacionado ao com o erro do daemontools-0.76


checking for ifaddrs.h... yes
checking if --enable-ipv6 option is specified... no
checking whether to build optimizer debugging code... no
checking whether to build parser debugging code... no
checking Linux kernel version... 2
checking if if_packet.h has tpacket_stats defined... yes
checking whether we have /proc/net/dev... yes
checking whether we have DAG API headers... no (/usr/local/include)
checking whether we have Septel API... no
checking for flex... no
checking for bison... bison
configure: WARNING: don't have both flex and bison; reverting to lex/yacc
checking for capable lex... insufficient
configure: error: Your operating system's lex is insufficient to compile
libpcap. flex is a lex replacement that has many advantages, including
being able to compile libpcap. For more information, see
http://www.gnu.org/software/flex/flex.html .

com isso não consigo dar make
make install

aguardo resposta

obrigado

[23] Comentário enviado por rjacomel em 23/11/2007 - 13:04h

lgf143,

Como você usa o Debian Etch, este erro na instalação do libpcap é a falta dos pacotes bison e flex:

# apt-get install bison flex

[24] Comentário enviado por hbueno em 26/11/2007 - 09:18h

Pessoal, resolvi o problema do imsniff ficar caindo por este post:
http://www.mail-archive.com/debian-user-portuguese@lists.debian.org/msg110308.html

[25] Comentário enviado por lgf143 em 26/11/2007 - 11:15h

apos ter instalado o bison e o flex

o ./configure ficou assim:

debian:/usr/src# cd libpcap-0.9.8
debian:/usr/src/libpcap-0.9.8# ./config
config.guess config.status config.sub configure
debian:/usr/src/libpcap-0.9.8# ./configure
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking gcc version... 4
checking for inline... inline
checking for __attribute__... yes
checking for u_int8_t using gcc... yes
checking for u_int16_t using gcc... yes
checking for u_int32_t using gcc... yes
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking sys/ioccom.h usability... no
checking sys/ioccom.h presence... no
checking for sys/ioccom.h... no
checking sys/sockio.h usability... no
checking sys/sockio.h presence... no
checking for sys/sockio.h... no
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking paths.h usability... yes
checking paths.h presence... yes
checking for paths.h... yes
checking for net/pfvar.h... no
checking for netinet/if_ether.h... yes
checking for ANSI ioctl definitions... yes
checking for strerror... yes
checking for strlcpy... no
checking for vsnprintf... yes
checking for snprintf... yes
checking for library containing gethostbyname... none required
checking for library containing socket... none required
checking for library containing putmsg... none required
checking for ether_hostton... yes
checking whether ether_hostton is declared... no
checking netinet/ether.h usability... yes
checking netinet/ether.h presence... yes
checking for netinet/ether.h... yes
checking whether ether_hostton is declared... yes
checking if --disable-protochain option is specified... enabled
checking packet capture type... linux
checking for getifaddrs... yes
checking ifaddrs.h usability... yes
checking ifaddrs.h presence... yes
checking for ifaddrs.h... yes
checking if --enable-ipv6 option is specified... no
checking whether to build optimizer debugging code... no
checking whether to build parser debugging code... no
checking Linux kernel version... 2
checking if if_packet.h has tpacket_stats defined... yes
checking whether we have /proc/net/dev... yes
checking whether we have DAG API headers... no (/usr/local/include)
checking whether we have Septel API... no
checking for flex... flex
checking for flex 2.4 or higher... yes
checking for bison... bison
checking for ranlib... ranlib
checking if sockaddr struct has sa_len member... no
checking if sockaddr_storage struct exists... yes
checking if dl_hp_ppa_info_t struct has dl_module_id_1 member... no
checking if unaligned accesses fail... no
checking for a BSD-compatible install... /usr/bin/install -c
configure: creating ./config.status
config.status: creating Makefile
config.status: WARNING: Makefile.in seems to ignore the --datarootdir setting
config.status: creating config.h
config.status: config.h is unchanged

vou aplicar o comando make
e make install

make: command not found

o que tenho que fazer?

[26] Comentário enviado por hbueno em 26/11/2007 - 14:50h

apt-get install imsniff

[27] Comentário enviado por lgf143 em 27/11/2007 - 10:56h

?comentario=aguardando resposta hbueno

Obrigado

[28] Comentário enviado por gleissonmb em 06/02/2008 - 14:55h

A instalação ocorreu tudo exatamente como descrito acima, mas nao esta gravando log nenhum. pq?

Se ajudar........o tcpdump -n port 1863 também não captura dado nehum.

[29] Comentário enviado por lipecys em 20/02/2008 - 16:21h

Cara, muito bacana seu artigo, muitíssimo útil.
Obrigado.

[30] Comentário enviado por pgb3025342 em 23/02/2008 - 20:58h

DESCOBRIR SENHA D. E-MAIL - MONITORAR MSN ? MONITORAMENTO MSN- MONITORAR CONVERSAS MSN - HISTÓRICO MSN - MONITORAR COMPUTADORES - MONITORAR COMPUTADOR- - TRAIÇÃO VIRTUAL - TRAICAO VIRTUAL - HACKEAR E-MAIL - QUEBRAR SENHA E-MAIL - QUEBRAR SENHAS D. E-MAILS- HOTMAIL-BOL-UOL-GMAIL-GLOBO-TERRA-POP-YAHOO DESCOBRIR SENHA D. EMAIL/ ENCONTRAR SENHA D. EMAIL/ TRAIÇÃO VIRTUAL/ MONITORAMENTO MSN/ MONITORAMENTO MSN/ SENHA EMAIL/ SENHAS D. EMAILS/ TRAIÇÃO VIRTUAL/ TRAICAO VIRTUAL

INVESTIGAÇÃO ONLINE, tem como filosofia a plena satisfação do cliente. Assim sendo, conta atualmente com uma estrutura capaz d. atender ao mercado nacional em todos os segmentos, sempre em busca da verdade e do esclarecimento dos fatos. Preocupada com a qualidade dos serviços, seleciona e treina seus agentes, tendo hoje em seu quadro d. pessoal profissionais d. ambos os sexos, devidamente qualificados para a realização dos trabalhos d. forma discreta, preservando a imagem do cliente.
CONTATE-NOS E ASSEGURE UM TRABALHO BEM FEITO


Oferecemos os serviços On-Line d.:
* - SENHAS D. E-MAILS ( d. qualquer provedor )
* - SENHAS D. MSN,
* - SENHAS D. ORKUT,
* - HISTÓRICO D. CONVERSAS PELO MSN,
* - RELATÓRIO D. SITES VISITADOS
- INVESTIGAÇÃO CONJUGAL (SIGILO TOTAL).


*** DESTAQUE: ESTAMOS VENDEMOS SOFTWARES D. MONITORAMENTO, SENHAS D. E-mails, MONITORAMENTO D. MSN, NAVEGAÇÃO ANONIMA. E muitos outros softwares a sua inteira disposição...


Envie um e-mail para (investigacaoonline@hotmail.com) e faça seu orçamento grátis, com sigilo, segurança e discrição.

@##@

[31] Comentário enviado por rogerbady em 26/02/2008 - 04:32h

E ai galerá descupa a minha ignorancia tenho duas duvidas.
1- eu fui mau sucedido no meu processo, após sudo ./configure aparece a seguinte informacao no fim

configure: error: Your operating system's lex is insufficient to compile
libpcap. flex is a lex replacement that has many advantages, including
being able to compile libpcap. For more information, see

teria como algue me ajudar ?

2- esse programa tambem vale para o pidgin?

Muito obrigado

[32] Comentário enviado por fabriciof em 02/04/2008 - 10:25h

Ai tudo bem pessoal. Segunte eu uso o fedora 7, O meu problema é o seguinte não consigo executar os comandos:
Instalação libpcap comandos q não fincionam: # make
erro: make: *** Nenhum alvo indicado e nenhum arquivo make encontrado. Pare.
# make install
erro: make: *** Sem regra para processar o alvo `install'. Pare.
Instalação imsniff não executa: ./build Erro: "./build: line 1: g++: command not found"

[33] Comentário enviado por ricardo.schutz em 28/04/2008 - 10:21h

alguém descobriu por que algumas mensagens não aparecem nos logs?
e alguém sabe como contornar isto?

obrigado.

[34] Comentário enviado por k4mus em 23/07/2008 - 10:46h

OLa galera, alguem ja descobriu uma forma para que funcione com proxy autenticado tbm??

grato

[35] Comentário enviado por giaco em 23/07/2008 - 10:51h

Imsniff é coisa do passado!
Estou usando o msn-proxy, que é brasileiro:
http://msn-proxy.sourceforge.net/
É possível monitorar as conversas, bloquear contatos e funções.
Fica a dica!

[36] Comentário enviado por k4mus em 23/07/2008 - 11:04h

obrigado pela reposta giaco,

vc sabe informar se ele funciona com proxy autenticado??

[37] Comentário enviado por giaco em 23/07/2008 - 11:25h

Na verdade ele não utliza o proxy, logo não terás problemas em usá-lo.

[38] Comentário enviado por k4mus em 23/07/2008 - 11:59h

obrigado amigo!

..vou começar a googlar material aki :)


t+ fera

[39] Comentário enviado por jlaudirt em 23/08/2008 - 08:42h

baseado no comentario do nosso amigo anderson resolvi postar neste comentário o script responsável pela geração dos logs em html
bons dias a todos!!!!

#!/bin/sh
diratu=$(date +%d%b%Y)
mkdir -p /var/www/htdocs/msnlog/$diratu
# Local dos logs do msn
cd /tmp/msnchat
for i in * ; do
#coloque aqui seus comandos
mkdir -p /tmp/logmsn/$i
mv $i/*.* /tmp/logmsn/$i
done

#for2 entrar nos diretórios
cd /tmp/logmsn/
for diretorio in * ; do
cd $diretorio
mkdir -p /var/www/htdocs/msnlog/$diratu/$diretorio
#for3 inserir linha em branco nos arquivos e gerar html
for arqlog in *.log ; do
sed -i 's/$/\n/' $arqlog
python /tmp/txt2tags/txt2tags -t html $arqlog
done
mv *.html /var/www/htdocs/msnlog/$diratu/$diretorio/
cd ..
done
cd /tmp
mkdir -p /tmp/msnlog$diratu
mv /tmp/logmsn /tmp/msnlog$diratu


[40] Comentário enviado por konexao em 10/09/2008 - 17:31h

Instalei td mas nao esta gravando na pasta /var/log/imsniff/conversation

[41] Comentário enviado por fabioaduarte em 16/10/2008 - 09:34h

Olá Ricardo,
Primeiramente gostaria de parabeniza-lo pelo artigo, dificilmente encontramos material desse qualidade na net.
Bom ... tenho algumas dúvidas e gostaria da sua ajuda e também da turma aqui do fórum. O imsniff foi implementado em uma máquina com Ubuntu 8.04 com uma interface wireless de rede (minha própria máquina), minha rede tem aproximadamente 15 máquinas, bom vamos as dúvidas:
1 - A instalação ocorreu tudo bem, porém no /var/log/imsniff/conversation/ gerou apenas conversas do meu MSN, das outras máquinas não gerou.
2 - Os arquivos gerados estão vazios sem a gravação das conversas. Exemplo abaixo:
********************* CHAT START *************************
Wed Oct 15 16:38:26 2008 | fulano@hotmail.com ((8) Fulano (8)) joined the conversation
********************* CHAT START *************************
Wed Oct 15 16:43:26 2008 | fulano@hotmail.com ((8) Fulano (8)) is in the conversation
Wed Oct 15 17:06:32 2008 | fulano@hotmail.com left the conversation

Conto com a ajuda de vocês,

Abraço,




[42] Comentário enviado por renatatie em 22/11/2008 - 13:19h

Por favor, estou literalmente boiando aqui....
quero muito monitorar o msn, mas n entendi uma palavra do q foi dito aqui....
será q alguém pode explicar pra uma pessoa totalmente leiga sobre o assunto o passo a passo dessa instalação? pleeeeeeeease!!!!!!
beijos

[43] Comentário enviado por rodrigo.gondek em 09/08/2009 - 00:10h

Olá pessoal,

Primeiramente parabenizar o criador do tutorial mas sou novo por aqui e minha duvida e o seguinte!!!

Fiz todas as etapas com exito, mas na hora de executar o comando ps (como descrito) retorna o seguinte erro:

root 20008 0.0 0.1 1608 276 ? S 23:30 0:00 readproctitle service errors: ... error?supervise: fatal: unable to start imsniff/run: exec format error?supervise: fatal: unable to start imsniff/run: exec format error?supervise: fatal: unable to start imsniff/run: exec format error?supervise: fatal: unable to start imsniff/run: exec format error?supervise: fatal: unable to start imsniff/run: exec format error?supervise: fatal: unable to start imsniff/run: exec format error?
root 20100 0.0 0.1 1616 324 ? S 23:33 0:00 supervise imsniff
root 20659 2.5 0.4 3060 836 ? Ss 23:53 0:00 /usr/local/bin/imsniff -cd /home/imsniff/chats -dd /var/log/imsniff -vvv -d eth1
root 20663 0.0 0.3 3136 768 pts/1 R+ 23:53 0:00 grep imsniff


A principio estaria tudo certo se não fosse a primeira linha cheia de erros...

Alguem conheçe a solução????

PS. Dentro do diretorio /var/log/imsniff/conversation/ não aparece nada a respeito das conversas.

Desde já agradeço!!!

Abraços

[44] Comentário enviado por paulocamposm em 22/10/2009 - 01:41h

APRENDA A DESCOBRIR SENHA DE EMAIL - DESCOBRIR SENHA DE EMAIL - MONITORAR MSN - MONITORAMENTO MSN - TRAIÇÃO VIRTUAL - SENHAS DE E-MAIL - HISTÓRICOS MSN - MONITORAR COMPUTADORES - MONITORAR COMPUTADOR- - TRAIÇÃO VIRTUAL - TRAICAO VIRTUAL - E-MAIL - SENHA E-MAIL - SENHAS DE E-MAIL- HOTMAIL-BOL-UOL- GMAIL-GLOBO- TERRA-POP-YAHOO DESCOBRIR SENHA DE EMAIL/ ENCONTRAR SENHA DE EMAIL/ TRAIÇÃO VIRTUAL/ MONITORAMENTO MSN/ MONITORAMENTO MSN/ SENHA EMAIL/ SENHAS DE EMAILS/ TRAIÇÃO VIRTUAL/ TRAICAO VIRTUAL/ MONITORAMENTO DE FILHOS/ MONITORAMENTO FUNCIONÁRIOS


PAULO CAMPOS ONLINE: tem como filosofia a plena satisfação do cliente. Assim sendo, conta atualmente com uma estrutura capaz de atender ao mercado nacional em todos os segmentos, sempre em busca da verdade e do esclarecimento dos fatos. Preocupada com a qualidade dos serviços, para que sejam devidamente qualificados para a realização dos trabalhos de forma discreta, preservando a imagem do cliente e, principalmente, seu equipamento, arquivos e segurança de comunicação online"

CONTATE -NOS E ASSEGURE UM TRABALHO BEM FEITO

*- INVESTIGAÇÃO VIRTUAL
*- TRAIÇÃO VIRTUAL
*- MONITORAR FILHOS
*- MONITORAMENTO DE FUNCIONÁRIOS
*- RECUPERAR SENHA DE E-MAIL
*- SENHAS DE E-MAILS ( de qualquer provedor )
*- SENHA DE EMAIL
* - SENHAS DE MSN
* - DESCOBRIR SENHA DO ORKUT
* - SENHAS DE ORKUT
* - SENHA UOL
* - SENHA HOTMAIL
* - SENHA TERRA
* - SENHA YAHOO
*- MONITORAMENTO DE ATIVIDADES
* - SENHA GMAIL
* - PROGRAMA PARA DESCOBRIR QUALQUER SENHA DE EMAIL
* - PROGRAMA PARA DESCOBRIR SENHA MSN
* - PROGRAMA PARA DESCOBRIR SENHA DE EMAIL
* - DESCOBRIR SENHA DE EMAIL
* - DESCOBRIR SENHA DE ORKUT
* - DESCUBRA QUALQUER SENHA DE EMAIL
* - MONITORAMENTO MSN EMAIL
* - HISTÓRICO DE CONVERSAS PELO MSN
* - DESINFECÇÃO DE MICROS INFECTADOS POR PROGRAMAS MALICIOSOS
* - PROGRAMAS CONTRA HACKERS
* - RELATÓRIO DE SITES VISITADOS

- INVESTIGAÇÃO CONJUGAL (SIGILO TOTAL).


*** DESTAQUE: TRABALHAMOS COM SOFTWARES DE MONITORAMENTO, SENHAS DE E-mails, MONITORAMENTO DE MSN. E muitos outros softwares a sua inteira disposição...

Envie um e-mail para ( paulof201@hotmail.com) e faça seu orçamento grátis, com sigilo,
segurança e discrição.


Visite Nossos Sites e veja outros produtos ao seu Dispor:

http://www.paulocamposonline.com.br/

http://www.paulocamposinvestigacoes.com.br/

[45] Comentário enviado por paulocamposm em 22/10/2009 - 01:41h

APRENDA A DESCOBRIR SENHA DE EMAIL - DESCOBRIR SENHA DE EMAIL - MONITORAR MSN - MONITORAMENTO MSN - TRAIÇÃO VIRTUAL - SENHAS DE E-MAIL - HISTÓRICOS MSN - MONITORAR COMPUTADORES - MONITORAR COMPUTADOR- - TRAIÇÃO VIRTUAL - TRAICAO VIRTUAL - E-MAIL - SENHA E-MAIL - SENHAS DE E-MAIL- HOTMAIL-BOL-UOL- GMAIL-GLOBO- TERRA-POP-YAHOO DESCOBRIR SENHA DE EMAIL/ ENCONTRAR SENHA DE EMAIL/ TRAIÇÃO VIRTUAL/ MONITORAMENTO MSN/ MONITORAMENTO MSN/ SENHA EMAIL/ SENHAS DE EMAILS/ TRAIÇÃO VIRTUAL/ TRAICAO VIRTUAL/ MONITORAMENTO DE FILHOS/ MONITORAMENTO FUNCIONÁRIOS


PAULO CAMPOS ONLINE: tem como filosofia a plena satisfação do cliente. Assim sendo, conta atualmente com uma estrutura capaz de atender ao mercado nacional em todos os segmentos, sempre em busca da verdade e do esclarecimento dos fatos. Preocupada com a qualidade dos serviços, para que sejam devidamente qualificados para a realização dos trabalhos de forma discreta, preservando a imagem do cliente e, principalmente, seu equipamento, arquivos e segurança de comunicação online"

CONTATE -NOS E ASSEGURE UM TRABALHO BEM FEITO

*- INVESTIGAÇÃO VIRTUAL
*- TRAIÇÃO VIRTUAL
*- MONITORAR FILHOS
*- MONITORAMENTO DE FUNCIONÁRIOS
*- RECUPERAR SENHA DE E-MAIL
*- SENHAS DE E-MAILS ( de qualquer provedor )
*- SENHA DE EMAIL
* - SENHAS DE MSN
* - DESCOBRIR SENHA DO ORKUT
* - SENHAS DE ORKUT
* - SENHA UOL
* - SENHA HOTMAIL
* - SENHA TERRA
* - SENHA YAHOO
*- MONITORAMENTO DE ATIVIDADES
* - SENHA GMAIL
* - PROGRAMA PARA DESCOBRIR QUALQUER SENHA DE EMAIL
* - PROGRAMA PARA DESCOBRIR SENHA MSN
* - PROGRAMA PARA DESCOBRIR SENHA DE EMAIL
* - DESCOBRIR SENHA DE EMAIL
* - DESCOBRIR SENHA DE ORKUT
* - DESCUBRA QUALQUER SENHA DE EMAIL
* - MONITORAMENTO MSN EMAIL
* - HISTÓRICO DE CONVERSAS PELO MSN
* - DESINFECÇÃO DE MICROS INFECTADOS POR PROGRAMAS MALICIOSOS
* - PROGRAMAS CONTRA HACKERS
* - RELATÓRIO DE SITES VISITADOS

- INVESTIGAÇÃO CONJUGAL (SIGILO TOTAL).


*** DESTAQUE: TRABALHAMOS COM SOFTWARES DE MONITORAMENTO, SENHAS DE E-mails, MONITORAMENTO DE MSN. E muitos outros softwares a sua inteira disposição...

Envie um e-mail para ( paulof201@hotmail.com) e faça seu orçamento grátis, com sigilo,
segurança e discrição.


Visite Nossos Sites e veja outros produtos ao seu Dispor:

http://www.paulocamposonline.com.br/

http://www.paulocamposinvestigacoes.com.br/


:;

[46] Comentário enviado por campinaverde em 07/11/2009 - 23:09h

Meu imsniff só está monitorando a conversa de msn rodando na maquina em que o proprio imsniff estah rodando.
Ou seja, ele nao captura conversas em msn de outras maquinas.
Estou rodando ele como root e minha rede é wireless, com 4 pcs conectados em um acess point.

Será que o imsniff não consegue monitorar conversas em redes wireless?

Grato se alguem puder ajudar.

[47] Comentário enviado por INVESTIGACOESBRA em 05/05/2016 - 15:08h

PROGRAMA ESPIAO CELULAR | DESCOBRIR SENHAS | RASTREAR CELULAR | RASTREAMENTO CELULAR | DETETIVE PARTICULAR | ESPIAO PC | ESPIAO COMPUTADOR | MONITORAR CELULAR | MONITORAMENTO WHATSAPP | TRAICAO VIRTUAL | PROGRAMA ESPIAO MONITORAR COMPUTADOR | INVESTIGACAO VIRTUAL | PROGRAMA ESPIAO COMPUTADOR | DESCOBRIR SENHAS EMAIL | SOFTWARE ESPIAO WHATSAPP | PROGRAMA ESPIAO WHATSAPP | INFIDELIDADE CONJUGAL | SOFTWARE SPY | MONITORAR CONVERSAS WHATSAPP | MONITORAR FILHOS | MONITORAR FUNCIONARIOS | PROGRAMA ESPIAO MONITORAR FACEBOOK | SOFTWARE CELULAR ESPIAO | PROGRAMA CELULAR ESPIAO | SOFTWARE ESPIAO CELULAR | PROGRAMA ESPIAO MONITORAR TECLAS DIGITADAS

INVESTIGAÇÕES BRASIL: tem como filosofia a plena satisfação do cliente. Assim sendo, conta atualmente com uma estrutura capaz de atender ao mercado nacional em todos os segmentos, sempre em busca da verdade e do esclarecimento dos fatos. Preocupada com a qualidade dos serviços, para que sejam devidamente qualificados para a realização dos trabalhos de forma discreta, preservando a imagem do cliente e, principalmente, seu equipamento, arquivos e segurança de comunicação online"

CONTATE-NOS E ASSEGURE UM TRABALHO BEM FEITO!

Oferecemos os serviços On-Line:

* – DETETIVE PARTICULAR
* – PROGRAMA CELULAR ESPIAO
* – RASTREAR CELULAR
* – DESCOBRIR SENHAS
* – RASTREAMENTO CELULAR
* – SOFTWARE CELULAR ESPIAO
* – CELULAR ESPIAO WHATSAPP
*- CELULAR ESPIAO
*- PROGRAMA CELULAR ESPIAO
* – MONITORAR FUNCIONÁRIOS
* – MONITORAR SKYPE
* – MONITORAR WHATSAPP
* – DESCOBRIR SENHA DE EMAIL
* – DESCOBRIR SENHA DE SKYPE
* – DESCOBRIR SENHA UOL
* – DESCOBRIR SENHA HOTMAIL
* – DESCOBRIR SENHA TERRA
* – DESCOBRIR SENHA YAHOO
* – DESCOBRIR SENHA BOL
* – DESCOBRIR SENHA GMAIL
* – DESCOBRIR SENHA FACEBOOK
* – MONITORAMENTO DE ATIVIDADES
* – PROGRAMA PARA MONITORAR SKYPE
* – MONITORAMENTO FACEBOOK
* – MONITORAMENTO CONVERSAS CELULAR
* – HISTORICO WHATSAPP
* – PROGRAMA PARA MONITORAR FACEBOOK
* – RELATÓRIO DE SITES VISITADOS
*- INVESTIGAÇÃO CONJUGAL (SIGILO TOTAL).

*** DESTAQUE: TRABALHAMOS COM SOFTWARES DE MONITORAMENTO COMPUTADOR, CELULAR ESPIÃO, RASTREAR CELULAR,SENHAS DE E-mails, MONITORAMENTO SKYPE, WHATSAPP, FACEBOOK. E muitos outros softwares a sua inteira disposição…

Envie um e-mail para ( INVESTIGACOESBRASIL@HOTMAIL.COM) e faça seu orçamento grátis, com sigilo, segurança e discrição (INVESTIGACOESBRASIL@HOTMAIL.COM) .

Visite Nossos Sites e veja nossos Serviços e Produtos ao seu Dispor:

HTTP://WWW.INVESTIGACOESBRASIL.COM/

HTTP://WWW.INVESTIGACOESBRASIL.COM/

HTTP://WWW.INVESTIGACOESBRASIL.COM/


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts