elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 03:04  


Tema destacado: [Overclocking] Récords de overclock del foro

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  [Source] Haciendo un proceso inmortal
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Source] Haciendo un proceso inmortal  (Leído 6,071 veces)
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.983


Ver Perfil WWW
[Source] Haciendo un proceso inmortal
« en: 4 Noviembre 2007, 13:44 »

Hola

Pues este código es el resultado de una tarde de aburrimiento en la que me a dado por aprender a usar mutex y no se me ocurrio un ejemplo mejor xDDD
Como dice el titulo con este codigo podreis hacer vuestro prceso prácticamente inmortal (digo practicamente por que si eres muy rápido con el admin de tareas lo puedes cerrar xD).

Para hacerlo funcionar haced lo siguiente:
- Poneis la dll y el ejecutable en la ruta indicada en el code (H:\\ , pero la podeis cambiarla claro).
- Ejecutais el Ejecutable.exe
- Ahora abrid el administrador de tareas y vereis que aparte del proceso normal del ejecutable se inicia un notepad, en el que se inyectará la dll.
- Apartir de este momento si cerrais el notepad.exe o el ejecutable.exe desde el administrador de tareas vereis como resucitan.

El funcionamiento es muy simple, está basado en la creación de mutex y poco mas que explicar tiene el código... solo decir q es detectado por el metodo de inyección (el usadisimo CreateRemoteThread) pero que si kereis es muy facil cambiarlo por otro metodo indetectable


El codigo es el siguiente:

Ejecutable.exe:
Código:
///////////////////////////////////////////////////////////
///        Hacer un proceso inmortal by E0N             ///
///                                                     ///
///   Estes el ejecutable que haremos incerrable        ///
///                                                     ///
///   by E0N - 2007
///////////////////////////////////////////////////////////


#include "stdafx.h"
#include <windows.h>
#include <Tlhelp32.h>


// FUNCIONES
void CrearMutex     ();             // Crea el mutex
DWORD WINAPI Vigilar(void* nada);   // Vigila que el otro proceso esté activo
void Inyectar       ();             // Inyecta la dll
int  Pid            ();             // Función que nos devuelve el pid de un proceso


// LA FUNCIÓN MAIN
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR     lpCmdLine,int       nCmdShow)
{
  // Creamos nuestro mutex de nombre ExeMutex
CrearMutex();

// Creamos un hilo que se encargará de vigilar si la dll está inyectada
DWORD ID;
HANDLE hilo = CreateThread(0,0,Vigilar,0,0, &ID);

MessageBox (0, "Acepta para cerrarme", "", 0);

///////////////////////////////////////////
// Aqui ya podríais poner vuestro código //
///////////////////////////////////////////
return 0;
}



// LA FUNCIÓN QUE CREA EL MUTEX
void CrearMutex()
{
// Creamos un mutex de nombre ExeMutex. Si nos devuelve NULL significa
// que la función a fallado, así que seguimos intentándolo.
HANDLE mutex;
do
{
mutex = CreateMutex(NULL, 0, "ExeMutex");
} while (mutex == NULL);
}



// LA FUNCIÓN QUE VIGILA QUE LA DLL ESTÉ INYRECTADA
DWORD WINAPI Vigilar(void* nada)
{
HANDLE proc;   // El handle que obtenemos con OpenProcess
HANDLE mutex;  // Manejador para saber si el mutex existe o no

// Entramos en un bucle eterno
while (1<2)
{
mutex = OpenMutex(SYNCHRONIZE, false, "DllMutex");

if (mutex == NULL) // Si el mutex no existe quiere decir que el proceso a sido matado asi que...
{

// Abrimos en modo oculto el notepad para inyectar la dll
WinExec ("notepad.exe", SW_HIDE);
Sleep(2000);

// Inyectamos la dll
Inyectar();
}
else
{
int pid = Pid();

if (pid != 0)
{
// Abrimos el proceso para obtener su handle
proc = OpenProcess(PROCESS_ALL_ACCESS, false, pid);

// Esperamos a que cierren el proceso para volver a ejecutarlo
WaitForSingleObject(proc, INFINITE);
CloseHandle(proc);
}
}

CloseHandle (mutex);

}
}



// LA FUNCIÓN INYECTORA
void Inyectar()
{
int pid = Pid();
HANDLE proceso;
LPVOID RemoteString;
LPVOID nLoadLibrary;

proceso = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
nLoadLibrary = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");
RemoteString = (LPVOID)VirtualAllocEx(proceso,NULL,strlen("H:\\Dll.dll"),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
WriteProcessMemory(proceso,(LPVOID)RemoteString,"H:\\Dll.dll",strlen("H:\\Dll.dll"),NULL);
CreateRemoteThread(proceso,NULL,NULL,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,NULL,NULL);
CloseHandle(proceso);
}



// LA FUNCIÓN QUE NOS DEVUELVE EL PID DE UN PROCESO
int Pid()
{
// Obtenemos el PID del notepad
int pid;
HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 procinfo = { sizeof(PROCESSENTRY32) };
while(Process32Next(handle, &procinfo))
{
if(!strcmp(procinfo.szExeFile, "notepad.exe"))
{
CloseHandle(handle);
pid = procinfo.th32ProcessID;
}
}
CloseHandle(handle);

return pid;
}


Dll.dll:
Código:
///////////////////////////////////////////////////////////
///        Hacer un proceso inmortal by E0N             ///
///                                                     ///
///   Esta es la dll que inyectaremos en el notepad     ///
///                                                     ///
///   by E0N - 2007
///////////////////////////////////////////////////////////                      



#include "stdafx.h"
#include <windows.h>
#include <Tlhelp32.h>


// FUNCIONES
void CrearMutex(); // Crea el mutex
void Vigilar   (); // Vigila que el otro proceso esté activo



// LA FUNCIÓN DLLMAIN
BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
// Si nos cargan
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
{
//Creamos nuestro mutex de nombre DllMutex
CrearMutex();

// Vigilamos que el otro proceso esté corriendo
Vigilar();
}

    return TRUE;
}



// LA FUNCIÓN QUE CREA EL MUTEX
void CrearMutex()
{
// Creamos un mutex de nombre DllMutex. Si nos devuelve NULL significa
// que la función a fallado, así que seguimos intentándolo.
HANDLE mutex;
do
{
mutex = CreateMutex(NULL, 0, "DllMutex");
} while (mutex == NULL);
}



// LA FUNCIÓN QUE VIGILA QUE EL OTRO PROCESO ESTÉ CORRIENDO
void Vigilar ()
{
int pid;       // El PID del proceso ejecutado
HANDLE handle; // El handle del proceso (usado para obtener el pid)
HANDLE proc;   // El handle que obtenemos con OpenProcess
HANDLE mutex;  // Manejador para saber si el mutex existe o no

// Entramos en un bucle eterno
while (1<2)
{

mutex = OpenMutex(SYNCHRONIZE, false, "ExeMutex");


if (mutex == NULL) // Si el mutex no existe quiere decir que el proceso a sido matado asi que...
{
// Ejecutamos el archivo
WinExec("H:\\Ejecutable.exe",SW_SHOW);
}
else
{
// Obtenemos el PID del proceso
handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 procinfo = { sizeof(PROCESSENTRY32) };
while(Process32Next(handle, &procinfo))
{
if(!strcmp(procinfo.szExeFile, "Ejecutable.exe"))
{
CloseHandle(handle);
pid = procinfo.th32ProcessID;
}
}
CloseHandle(handle);

if (pid != 0)
{
// Abrimos el proceso para obtener su handle
proc = OpenProcess(PROCESS_ALL_ACCESS, false, pid);

// Esperamos a que cierren el proceso para volver a ejecutarlo
WaitForSingleObject(proc, INFINITE);
CloseHandle(proc);
}
}

CloseHandle (mutex);

}
}

Compilado en VC++ 6 no me da ningun problema, de todas formas por si alguien tiene algun problema abajo dejo los proyectos enteros ;)

Para acoplarlo a vuestro programa solo hay que cambiar las rutas y colocar vuestro código despues de:

Código:
///////////////////////////////////////////
// Aqui ya podríais poner vuestro código //
///////////////////////////////////////////

Tambien estaria bien que bindearais la dll al ejecutable :p

1S4ludo


« Última modificación: 12 Diciembre 2009, 16:41 por E0N » En línea
bigsnake


Desconectado Desconectado

Mensajes: 626


Ver Perfil
Re: [Source] Aciendo un proceso inmortal
« Respuesta #1 en: 9 Noviembre 2007, 17:27 »

yo ago eso tb con mis procesos  ;D ;D
pero no lo inyecto porque kreo k no es necesario, es decir ago una comprobacion del mutex al segundo proceso, i si ya existe, se queda en modo de espera comprobando cliclicamente el mutex  ;D ;D
mi proxima meta esta en crear al menos 4 procesos, eso si que sera incerrable  ;)

ehm aora que me doy cuenta, tu proceso de proteccion es vastante mejor, pk el mio se cierra con solo dar click al padre i poner "cerrar el arbol de procesos" asi que, no ai forma de que mediante createprocess no deje que sea el el padre, sino otro proceso para que esa forma de cerrarlo mediante el arvol no sea valida??
enga xau


En línea
De@th (L1zb3th)
TROLL


Desconectado Desconectado

Mensajes: 619

<-[Rin]->


Ver Perfil
Re: [Source] Aciendo un proceso inmortal
« Respuesta #2 en: 9 Noviembre 2007, 18:07 »

yo hago eso tb con mis procesos  ;D ;D
pero no lo inyecto porque kreo k no es necesario, es decir hago una comprobacion del mutex al segundo proceso, i si ya existe, se queda en modo de espera comprobando cliclicamente el mutex  ;D ;D
mi proxima meta esta en crear al menos 4 procesos, eso si que sera incerrable  ;)

ehm aora que me doy cuenta, tu proceso de proteccion es vastante mejor, pk el mio se cierra con solo dar click al padre i poner "cerrar el arbol de procesos" asi que, no ai forma de que mediante createprocess no deje que sea el el padre, sino otro proceso para que esa forma de cerrarlo mediante el arvol no sea valida??
enga xau

Código
taskkill /f /im proceso.exe
 

y se cierran todos ;)
y usen servicios o un kernel driver ..

Au Revoir !
En línea
bigsnake


Desconectado Desconectado

Mensajes: 626


Ver Perfil
Re: [Source] Aciendo un proceso inmortal
« Respuesta #3 en: 9 Noviembre 2007, 22:00 »

no se si sera komo tu dices kon ese modo de resucitarlos, pero te aseguro que ese metodo es para que, explicandolo facil:

proceso 1 ----------- proceso 2

ambos comprueban si el otro existe, con lo que si uno falla

proceso 1--------- xxxxxxx

lo reabre inmediatamente

proceso 1 --------- proceso 2

con lo que estarias =, lo que si podrias hacer seria cerrar los dos procesos a la vez, a no ser que sea muy muy rapido, en fin, es lo que ai

dw
En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: [Source] Aciendo un proceso inmortal
« Respuesta #4 en: 10 Noviembre 2007, 01:23 »

Una manera simple es suspender los hilos de ambos procesos y entonces matarlos  ;)
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.983


Ver Perfil WWW
Re: [Source] Aciendo un proceso inmortal
« Respuesta #5 en: 10 Noviembre 2007, 11:59 »

Hombre esta claro q el metodo noes perfecto, de ahí q use inyeccion para hacer un poco mas dificil la localizacion de los procesos... lo ideal seria hacer lo q dice Vamp1r3 y proteger el proceso con un driver, aune aun asi se podria programar otro driver q cerrara el primero y luego matar el proceso... aunke yo creo q un usuario normal (sin demasiados conocimientos) no conseguiria cerrar el proceso ni con mi metodo ni con el driver ;)
En línea
opterman

Desconectado Desconectado

Mensajes: 87



Ver Perfil
Re: [Source] Aciendo un proceso inmortal
« Respuesta #6 en: 13 Noviembre 2007, 21:15 »

Nas a todos
EON,dime una cosa ,si tu creas un driver  que mate al otro driver y cierre el proceso , pero si resulta que el driver primero está ocultado o protegido de que lo cierren , ¿que driver vas a cerrar?,¿que proceso vas a cerrar?
Ya, que teoricamente para cerrar un proceso , driver, lo primero que el kernel hace es comprobar que existe para que no tire error y salga BSOD

Respecto a hacerlo desde modo usuario mucho menos

Saludos Opterman
En línea
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.983


Ver Perfil WWW
Re: [Source] Aciendo un proceso inmortal
« Respuesta #7 en: 13 Noviembre 2007, 23:20 »

Citar
E0N,dime una cosa ,si tu creas un driver  que mate al otro driver y cierre el proceso , pero si resulta que el driver primero está ocultado o protegido de que lo cierren , ¿que driver vas a cerrar?,¿que proceso vas a cerrar?

Pues la verdad es q tampoco tengo mucha idea por q nunca e hecho un driver, pero por lo q tengo entendido puedes pasarle al driver desde tu aplicacion en modo user parametros (por ejemplo el pid) para q mata X proceso, pero como te he dicho tampoco ando muy enterao... a ver si se pasa alguien mas entendido (vease Mek xDD) y te aclara un poco ;)
En línea
opterman

Desconectado Desconectado

Mensajes: 87



Ver Perfil
Re: [Source] Aciendo un proceso inmortal
« Respuesta #8 en: 14 Noviembre 2007, 19:16 »

Nas a todos

Citar
Pues la verdad es q tampoco tengo mucha idea por q nunca e hecho un driver, pero por lo q tengo entendido puedes pasarle al driver desde tu aplicacion en modo user parametros (por ejemplo el pid) para q mata X proceso, pero como te he dicho tampoco

EON si que se puede , mediante el una función que era DeviceIoControl, pero para esto antes tienes que crear un device en el driver , añadirle el callback para que procese la info que recibe....

 Yo para mi rootkit usé el nombre porque la EPROCESS es una estrcutura que coniene el pid , nombre etc , lo que hacía era que si el nombre del proceso que hiba a listar era el que yo hiba a ocultar pues mandaba a return y seguía con el siguiente proceso y asin ese no existe.

Claro que si no sabes el nombre concreto del proceso entonces ya deberias hacerlo mediante el device.

Saludos, Opterman
En línea
‭‭‭‭jackl007


Desconectado Desconectado

Mensajes: 1.381


[UserRPL]


Ver Perfil WWW
Re: [Source] Aciendo un proceso inmortal
« Respuesta #9 en: 17 Noviembre 2007, 21:18 »

pero una manera algo rudimentaria .. seria renombrar el ejecutable a "winlogon.exe" ...
y no se cerrara :S
al menos eso lo probe y use hace un año creo y si andaba bien ...
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: [Source] Aciendo un proceso inmortal
« Respuesta #10 en: 17 Noviembre 2007, 22:10 »

pero una manera algo rudimentaria .. seria renombrar el ejecutable a "winlogon.exe" ...
y no se cerrara :S
al menos eso lo probe y use hace un año creo y si andaba bien ...

Puede que el Task Manager (Administrador de tareas) no lo permita pero cualquier programa tipo Process Explorer si lo matara.
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
‭‭‭‭jackl007


Desconectado Desconectado

Mensajes: 1.381


[UserRPL]


Ver Perfil WWW
Re: [Source] Aciendo un proceso inmortal
« Respuesta #11 en: 18 Noviembre 2007, 01:39 »

eso si es verdad
En línea

EvilGoblin


Desconectado Desconectado

Mensajes: 2.320


YO NO LA VOTE!


Ver Perfil
Re: [Source] Aciendo un proceso inmortal
« Respuesta #12 en: 18 Noviembre 2007, 23:09 »

Disculpen! .. alguien sabria decirme como hacer una DLL q la carge el IE... (como las de google y las toolbar) ... osea como un complemento... eh visto viruses q se esconden ai tmb..

xD suerte
En línea

Experimental Serial Lain [Linux User]
De@th (L1zb3th)
TROLL


Desconectado Desconectado

Mensajes: 619

<-[Rin]->


Ver Perfil
Re: [Source] Aciendo un proceso inmortal
« Respuesta #13 en: 18 Noviembre 2007, 23:19 »

Creo que en platform SDK de m$ venia por lo que vi un sdk de plugins para el Iexplorer
igual chusmeate esto : http://www.codeproject.com/useritems/rssreaderplugin.asp

yo quedé rre pelotudo, no sabés, como instale el service pack 2 de winxp por el nVIDIA FX Composer 2 dije "ya que estoy, actualizo el Visual c++ y Ogre"

Después de esto :

Desinstalar Visual C++ 2003 (7.1 .NET)
Desistalar Ogre SDK

Instalar Visual C++
Instalar Visual C++ Platform SDK
Instalar Visual C++ Service Pack 1
Instalar Ogre SDK
Agregar Ogre SDK Debug Files (.pdb)
Instalar Ogre SDK Wizard


Quedé, mas que pelotudo, ahora me falta encima unas cosas, yo me jubilo y NUNCA MAS actualizo algo xD
ahora seguire leyendo el libro de nVIDIA "The Cg Tutorial",Ogre, seguir codeando Framework y Seguir con la tarea del colegio que las materias no se aprueban solas xD

Edit : llegué al punto de llegar a ca**rme de risa solo, vamos mal xD

Au Revoir xDDDD
En línea
Ilorev


Desconectado Desconectado

Mensajes: 473


???


Ver Perfil
Re: [Source] Aciendo un proceso inmortal
« Respuesta #14 en: 18 Noviembre 2007, 23:22 »

Disculpen! .. alguien sabria decirme como hacer una DLL q la carge el IE... (como las de google y las toolbar) ... osea como un complemento... eh visto viruses q se esconden ai tmb..

xD suerte

te recomiendo k hagas abras un tema xD , tiene k ver con el registro .. , te refieres hacer toolbar o un objecto ActiveX .. xD puedo ser k yo este confundido tambien...
En línea

EOF
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
inmortal FXSAPIDebugLogFile
Windows
Ciberemule 7 7,166 Último mensaje 30 Diciembre 2010, 22:11
por Randomize
si fueras inmortal... « 1 2 »
Foro Libre
Mini_Nauta 28 1,561 Último mensaje 31 Diciembre 2011, 04:06
por reagea
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines