elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
26 Mayo 2012, 09:47  


Tema destacado: Últimos eventos sobre seguridad/inseguridad

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Criptografía (Moderador: APOKLIPTICO)
| | | |-+  Cifrado para troyano
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cifrado para troyano  (Leído 2,134 veces)
nhaalclkiemr


Desconectado Desconectado

Mensajes: 1.666


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
Cifrado para troyano
« en: 1 Julio 2007, 19:53 »

Bueno, abro este post para que me ayudeis en cuanto a temas de cifrado para un troyano...
Lo que quiero es cifrar la conexión entre server y cliente.

Es el server el que se conecta al cliente, entonces me gustaría que al principio de la conexión el server (o el cliente) le envie una clave uno al otro y esa será la clave que se usará para cifrar los datos en esa sesión. Para aumentar la seguridad además de cifrarse con la clave esa, se cifraría la conexión con la propia contraseña del server.

Weno, en resumen, la conexión se cifraría con dos claves previamente negociadas (esa negociación de claves se produce sin cifrar o un cifrado simple como Base64 o un XOR simple)

Lo que quiero que me digais es eso, como puedo cifrar una comunicación a partirt de dos claves...con esto me refiero a las operaciones que debo de realizar a nivel de bit o byte

Gracias y saludos ;)


En línea

StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 0.9- 100%
malektaus27A

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Cifrado para troyano
« Respuesta #1 en: 15 Octubre 2008, 20:24 »

Para cifrar los datos que son enviados puedes utilizar sistema de cifrado de flujo como el RC4, no es muy seguro pero es rapido, ademas no importa cual sea la longuitud de la clave y se usa la misma clave tanto para cifrar como para descifrar.  en el foro hay una implementacion(no me acuerdo quien la posteo) en c y en visual basic pero le faltaba en una parte volver a inicializar un par de varialbles a cero.

//esta es la de c
char *RC4(LPSTR szBuf, LPSTR szKey)
{
int i, j = 0;
int s[256];
DWORD dw;
BYTE tmp;
LPBYTE Buf = (LPBYTE)szBuf;
LPBYTE Key = (LPBYTE)szKey;
int unsigned lenbuf=strlen((char *)szBuf);

char *res = new char[lenbuf];       
res[0] = NULL;
for(i = 0; i < 256; i++)
{
s = i;
}
for(i = 0; i < 256; i++)
{
j = (j + s + Key[i % strlen((char *)szKey)]) % 256;
tmp = s;
s = s[j];
s[j] = tmp;
}

i=0; //esto era lo que faltaba
j=0; //esto era lo que faltaba

for(dw = 0; dw < lenbuf; dw++)
{
i = (i + 1) % 256;
j = (j + s) % 256;
tmp = s;
s = s[j];
s[j] = tmp;
tmp=Buf[dw] ^ s[(s + s[j]) % 256];
res[dw]=tmp;
}

return res;
}

o se podria usar un sistema de cifrado por bloques como el DES(en la pagina www.elhacker.net hay una descripcion y en google hay muchas implementaciones), TwoFish (hay implementaciones en la pagina de Bruce Schneier http://www.schneier.com/twofish.html) o el buen AES(googlead, si no me dices y te envio una implementacion).

utilizando el rc4 seria algo asi:

//codigo del Cliente
....
char res[]="T";
while(TRUE)
{
printf("envie el password:");
gets((char *)bt);
tmp=send(s,(const char *)bt,(int)strlen((const char *)bt),0);
memset( recvbuf, 0, sizeof( recvbuf));
tmp=recv(s, recvbuf,  sizeof( recvbuf)-1, 0);
n=_strcmpi(res,(char *)recvbuf);
if (!n)
{   printf("Bienvenido \n");
   pass=(char *)bt;
   break;}
}
//envio de los datos cifrados
...
tmp=send(s,RC4((char *)bufftemp,(char *)pass),(int)strlen((const char *)bufftemp),0);



//codigo del Servidor
...
char pass[]="password";
while (TRUE)
{
memset( recvbuf, 0, sizeof( recvbuf));
tmp=recv(st, recvbuf,  sizeof( recvbuf)-1, 0);
n=_strcmpi(pass,recvbuf);
if (!n)
{tmp=send(st,"T",1,0);
   break;}
else
{tmp=send(st,"F",1,0);
}
}
//descifrado de los datos
...
tmp=recv(st, recvbuf,  sizeof( recvbuf)-1, 0);
char *resp= RC4(recvbuf,pass);

para el intercambio de la clave se podrian utilizar funciones de resumen como md5(de eso a nada), sha-1 o sus versiones sha-2(sha-256,sha-384,sha-512).

el servidor guarda la respuesta previamente calculada del password. El Cliente calcula el hash del password=Hash(password) y se envia al Servidor. el servidor compara las respuestas. si coinciden permite el acceso.

pd: BASE64 no es un sistema de cifrado, es un sistema de numeración posicional que usa 64 como base. Es la mayor potencia de dos que puede ser representada usando únicamente los caracteres imprimibles de ASCII(http://es.wikipedia.org/wiki/Base64).

en que lenguaje estas desarrollando el troyano?(os puedo ayudar si es en c, en basic y depronto en asm)


En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines