Resolvendo o problema de instabilidade do IMSNIFF - Versão 0.04 (Beta)

Publicado por Fabiann Freitas em 24/04/2007

[ Hits: 7.211 ]

 


Resolvendo o problema de instabilidade do IMSNIFF - Versão 0.04 (Beta)



Existe uma instabilidade nessa versão do imsniff que pode ser resolvida conforme as alterações abaixo no código fonte.

Versao do imsniff: 0.04

No meu caso, usei o nome do diretório para descompactar o daemon: imsniff/. Entrem no diretorio imsniff/src/ (cd imsniff/src).

Editem o arquivo msn_conntrack.cpp com seu editor preferido. Irão fazer umas inclusões na função add_user_to_sb(), que é logo a primeira no arquivo. As linhas com o sinal "+" na frente deverão ser acrescentadas.

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);
}

Gravem as alterações e editem outro arquivo, chamado util.cpp e localizem a função get_tokens() e novamente a linha com o sinal de "+" deve ser acrescentada e com sinal de "-", retirada.

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;

char tmp[255];

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;
- exit (7);
}
num++;
}

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

Gravem as alterações e compilem. Como você estará no diretório src/, deverá se posicionar no diretório linux/:

$ cd ../linux
$ ./build


Prontinho, só rodar e talz!!!

Abraços a todos.

Qualquer onda tô no msn [email protected] ou [email protected]

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Configurando Firefox em Português do Brasil no Sabayon

Você já conhece o Firefox Ubiquity?

Configurando a Internet rapidinho no seu Linux

Conectividade Social - Caixa Econômica Federal vs Proxy transparente

Obra de arte: Tux em ASCII

  

Comentários
[1] Comentário enviado por martysouza em 07/05/2007 - 17:09h

Amigo posta os arquivos completos ai pra gente ., nessa edição não estou conseguinte recompilar

[2] Comentário enviado por martysouza em 07/05/2007 - 17:19h

Fica dando esses erros

../src/util.cpp: In function âint get_tokens(u_char*, u_char***, int)â:
../src/util.cpp:459: error: expected primary-expression before âbreakâ
../src/util.cpp:459: error: expected `;' before âbreakâ
../src/util.cpp:460: error: wrong type argument to unary minus
../src/msn_conntrack.cpp: In function âvoid add_user_to_sb(msn_connection*, u_char*)â:
../src/msn_conntrack.cpp:23: error: expected primary-expression before âifâ
../src/msn_conntrack.cpp:23: error: expected `;' before âifâ
../src/msn_conntrack.cpp:307: error: expected `}' at end of input

[3] Comentário enviado por trashfull em 05/06/2007 - 16:29h

ótima dica badspirit, vc poderia ajudar os desenvolvedores deste sniff, quem sabe seu código de correção em uma nova versão?

Parabens
[ ]s

[4] Comentário enviado por badspirit em 18/06/2007 - 16:35h

ó soh .. peguem o codigo modificado aki:

http://www1.bad.spirit.nom.br/imsn/msn_conntrack.cpp
http://www1.bad.spirit.nom.br/imsn/util.cpp

copiem isso la pro src/
e compilem seguindo la os passos da dica inicial la.

se notarem alguma cagada, entrem em contato, q a gente tenta arrumar esse trem.

Abracos,




[5] Comentário enviado por robertofaria em 18/01/2008 - 12:05h

Bom dia Fabiann. Aqui Instalei o pacote libpcap-0.9.8, descompactei, instalei o imsniff, deu tudo certo, realizei o comando sh build, depois rodei o imsniff, porém o seguinte, quanto entrei no diretório # /tmp/chats/ , não consegui visualizar os logs do msn. Digitei o comandoi tail -f e nada. Uso a distruição Slackware 11.0 nao consigo ver os logs de maneira alguma. Vc poderia me ajudar? Muito obrigado



Contribuir com comentário