Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kaxperday en 20 Enero 2016, 21:41 pm



Título: Programar programa incerrable C++
Publicado por: Kaxperday en 20 Enero 2016, 21:41 pm
Hola, resulta que después de leer un hilo del foro me ha entrado curiosidad por crear un programa que no se pueda cerrar, que de el conocido mensaje de alerta que tienen algunos procesos del administrador de tareas cuando los tratamos de cerrar. "La operación no se pudo completar, acceso denegado".

Bueno, he estado buscando y leyendo y parece que tiene que ver sobre ponerlo como crítico o algo así ya os digo que lo acabo de buscar, el caso encontré un código que me funcionó después de algunas desgracias con otros que no funcionaron:

http://www.codeproject.com/Articles/43405/Protecting-Your-Process-with-RtlSetProcessIsCriti

Lo he ejecutado y funciona eso si, necesita permisos de administrador para ponerse como proceso crítico, pero a pesar de eso estoy frustrado, porque no muestra lo de "La operación no se pudo completar, acceso denegado", sino que muestra "¿desea finalizar programa.exe?, si lo finaliza windows podrá quedar inutilizable o apagarse, y perderá los datos que no haya guardado. ¿está seguro de que desea continuar".

Es decir te acojona, pero te abre la opción de cerrarlo. En otros procesos que usan estos métodos como smss.exe, csrss.exe, o services.exe te sale directamente el mensaje de error sin opción a cerrarlo.

¿Cómo lograr los mismos resultados?.

Saludos.

Edito: Esto lo probé y no funcionó, obtuve error, pero sin embargo la idea es la misma.

http://web-athentication.googlecode.com/svn/trunk/MalwareCode/RtlSetProcessIsCritical/RtlSetProcessIsCritical.cpp


Título: Re: Programar programa incerrable C++
Publicado por: Karman en 21 Enero 2016, 01:44 am
Creo que la única opción es que tu programa cargue un driver en el sistema que no permita la finalización del mismo (aunque se podría descargar el driver y cerrarlo pero ya es una tarea complicada) el tema es que en 64 bits los drivers deben estar firmados digitalmente y no pueden tocar mucho del sistema sin causar un BSOD por el patchguard, aunque hay algunos métodos que permiten filtrar ciertos eventos (lo que hacen los antivirus)

S2


Título: Re: Programar programa incerrable C++
Publicado por: fary en 21 Enero 2016, 06:13 am
Pero Kaxperday... ten en cuenta que los otros procesos son NECESARIOS para que funcione el SO y el lo sabe.  :P


Título: Re: Programar programa incerrable C++
Publicado por: kub0x en 21 Enero 2016, 06:48 am
Creo que la única opción es que tu programa cargue un driver en el sistema que no permita la finalización del mismo (aunque se podría descargar el driver y cerrarlo pero ya es una tarea complicada) el tema es que en 64 bits los drivers deben estar firmados digitalmente y no pueden tocar mucho del sistema sin causar un BSOD por el patchguard, aunque hay algunos métodos que permiten filtrar ciertos eventos (lo que hacen los antivirus)

S2

También valdría un hook en Usermode (ring3) a la API PAPI de Win32 en el proceso explorer donde puedas o bien ocultar tu proceso o bien hookear TerminateProcess o CloseHandle y filtrar ahí por PID. Que decir que en ring3 todo es detectable, y en kernel todo es detectable también a no ser que hookees antes que el AV las rutinas de interrupción (syscalls). Hookear no me gusta mucho, es necesario para trampear procesos pero soy más fan de subir al kernel y no hacer ruido.

Como bien dices necesitas firmar el driver digitalmente mediante crypto de clave pública, además los Root CAs con los que se contrasta dicha firma están embebidos dentro del loader del Kernel, nade que ver con las Root CAs del keyring del OS, el keyring solo se utiliza a la hora de instalar el driver y cargarlo desde sc.exe o API, pero lo bonito es hacer un driver que arranque en modo BOOT y amigos con UEFI + Secure Boot chungo pastel.

Saludos.


Título: Re: Programar programa incerrable C++
Publicado por: Kaxperday en 21 Enero 2016, 13:44 pm
Bueno bueno cuantas ideas, respecto a lo del driver no tengo idea de como funciona el método, ¿usar un driver y hacer que dependa de tu proceso, o crear tu propio driver? no sé algo de lío tengo en ese tema. ¿Cómo se podría acceder a un driver y hacer que este dependa de ti?, no sé XD.

Sin embargo si que entiendo la de hookear la API que muestra los procesos, o terminateprocess la función que los cierra.. eso sería como poner venda en los ojos. No está mal pero no lo veo como lo mejor.

Luego está ponerlo como crítico como posteé en el código pero como dije no es lo mismo que hacen otros procesos como explorer, smss.. etc, pues poniendolo como crítico te da opción de cerrarlo a diferencia de estos, que seguramente utilicen algún driver para evitar que sean cerrados como decís.

En el caso de que usen algún driver para protegerse como proceso, ¿me podrías explicar más en ue consiste el método? ¿qué pasos habría que seguir para conseguirlo?, partamos de que tenemos privilegios de administrador o SYSTEM, ¿se podría hacer entonces? XD, un poco la idea al menos :P

Un saludo, gracias.


Título: Re: Programar programa incerrable C++
Publicado por: MAFUS en 21 Enero 2016, 18:14 pm
Pensando en tu idea mientras me comía una McExtrem Original y he recordado virus se arrancan después de apagarlos y para quitarlos hay que entrar en modo a prueba de fallos he pensado.
Dos programas, o más, uno de ellos hace todo el trabajo mientras que el otro hace de guardián y se encarga de que si el usuario cierra el programa principal lo reinicia y, además, guarda o mantiene vivo los datos para que el otro cuándo arranque, pueda continuar el trabajo donde lo dejó. Y no solo eso, porqué el usuario puede ser muy inteligente y cerrar el guardián para después cerrar el principal, que el programa principal también monitoree al guardián por si se cierra reiniciarlo. Hasta se podría crear una pequeña comunidad de guardianes, esparcidos por el sistema y con diferentes nombres, para que le fuera imposible al usuario determinarlos todos y que tu aplicación principal no pudiera quitarse.


Título: Re: Programar programa incerrable C++
Publicado por: Eternal Idol en 21 Enero 2016, 19:05 pm
https://msdn.microsoft.com/en-us/library/windows/desktop/dn313124%28v=vs.85%29.aspx#system_protected_process

En el Process Explorer podes ver la columna Protection.