Programar programa incerrable C++

Iniciado por Kaxperday, 20 Enero 2016, 21:41 PM

0 Miembros y 1 Visitante están viendo este tema.

Kaxperday

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
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Karman

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

fary

Pero Kaxperday... ten en cuenta que los otros procesos son NECESARIOS para que funcione el SO y el lo sabe.  :P
Un byte a la izquierda.

kub0x

Cita de: 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

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.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Kaxperday

#4
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.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

MAFUS

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.

Eternal Idol

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