Tema destacado: Últimos eventos sobre seguridad/inseguridad
Autor
|
Tema: Cifrado para troyano (Leído 2,134 veces)
|
nhaalclkiemr
Desconectado
Mensajes: 1.666
Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92
|
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
Mensajes: 4
|
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
|
|
|
|
|
|