Esta es una recopilacion de diferentes metodos de como se ejecutan los procesos al iniciar el sistema:
-Los archivos que esten en las carpetas "%homedrive%%homepath%\Menú Inicio\Programas\Inicio\" y "%allusersprofile%\Menú Inicio\Programas\Inicio\"
Esto es Menu Inicio=>Programas=>Inicio
Esa ruta de programas que se iniciarán viene dada por el valor de la clave "Common Startup" en "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" y "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"; aparece en las dos, no se realmente cual es la que funciona...si la que está en "HKLM\...\...\User Shell Folders" o en "HKLM\...\...\Shell Folders"... no he provado...
A nivel de usuario sería el valor de la clave "Startup" en y "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
Normalmente esta clave puede ser modificada por cualquier usuario incluso uno sin privilegios, pero alguien que tenga los parches de Microsoft al dia ya no se debe preocupar por el problema de que cualquier usuario sin privilegios pueda modificar esta entrada, pero un usuario con privilegios de Administrador podría seguir modificando esta entrada incluso con el parche.
Puedes ocultar el archivo para que este archivo no se vea desde Menu Inicio=>Programas=>Inicio aunke la opcion de "Mostrar todos los archivos" esté activada. Aunke ojo, si sera visible usando el explorador. También puedes ocultar la carpeta Inicio y no será visible en el menú Programas.
Se ve en msconfig.exe
No es muy recomendado pues es una forma bastante básica y conocida incluso por no expertos.
Se carga como el usuario que inicio sesión.
-Los servicios cargan procesos.
Se pueden ver los servicios ejecutando "services.msc"
El encargado de ejecutar los servicios es el proceso services.exe
Los servicios se encuentran especificados en el registro en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Para el control de los servicios existe el comando sc, para crear nuevos servicios concretamente sc create. Mas informacion sobre el comando sc en la Ayuda de Windows: Inicio=>Ejecutar=> ms-its:%windir%\Help\ntcmds.chm::/sc.htm
El problema que he tenido es que no consigo crear un servicio para un ejecutable cualquiera porque cuando este es iniciado al tiempo aparece un error estilo "El programa no respondio en un tiempo determinado" y se cierra. Pienso que para poner aqui un ejecutable lo tienes que crear como servicio o algo, un ejecutable cualquiera pienso que no sirve, todo es provar...
Se ve en msconfig.
Es algo recomendable pues es raro que la gente mire en los servicios y además hay muchos, pero alguien bastante experimentado lo conocerá. Mejor usar otros métodos si puedes.
Los servicios pueden ejecutar procesos como diferentes usuarios (incluido SYSTEM)
-Las entradas del registro Run, RunOnce, RunOnceEx
Estas entradas estan situadas en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\" y "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\", son subclaves, no valores.
Ojo, cada usuario tiene claves diferentes en todas las subclaves de "HKEY_CURRENT_USER"
Son las entradas típicas y conocidas hasta por los mas inexpertos para iniciar Windows al inicio.
La diferencia es que los valores que esten en Run se ejecutarán siempre al iniciar Windows. Los que estén en RunOnce se ejecutan solo una vez y despues los valores de esta clave se borran.
RunOnceEx está hecho para la postinstalación de Windows, tendrás que crear una subclave con un numero empezando por el 001, dentro de esta subclave creas un valor numerico empezando por 1, su valor será la ruta del ejecutable, porlo que no es recomendable si vas a poner mas de una entrada aqui pues aparecerá una ventana poniendo lo que se va ejecutando. Los valores de clave RunOnceEx tambien solo se ejecutan una vez y después se borran. La clave RunOnceEx funciona tambien en modo seguro. Lo malo de RunOnceEx es que para que se pueda ejecutar explorer.exe y se cargue el escritorio tendrá que cerrarse la aplicación. Si quieres que siga activa tendras que ingienartela para que tras ejecutarse, se cierre y se vuelva a cargar.
Se ven en msconfig
No son recomendadas ya que son muy básicas y casi todo el mundo las conoce. En caso de usar una usa Run (o RunOnce si solo deseas que se ejecute una vez)
Se carga como el usuario que inicio sesión
Antes existia tambien la clave RunServices y RunServicesOnce y permitía cargar un proceso como un servicio, pero actualmente esta clave está obsoleta.
-El valor de la clave "run" y "load" en "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows"
Ojo, cada usuario tiene claves diferentes en todas las subclaves de "HKEY_CURRENT_USER"
Se puede poner mas de un proceso poniendo una coma despues de cada proceso (Ej.: "cmd.exe,notepad.exe,wmplayer.exe") o tambien vale una coma y un espacio (Ej.: "cmd.exe, notepad.exe, wmplayer.exe")
Se ve en msconfig.exe
Es bastante recomendable pues nadie suele conocer esta clave, lo unico malo es que es visible desde msconfig.exe y eso la hace mas detectable.
Se carga como el usuario que inicio sesión
-El valor de la clave "Shell" en "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" siempre y cuando el valor de "Shell" sea "explorer.exe XXX" o "explorer.exe,XXX,YYY"(donde XXX e YYY son nombres de los ejecutables)
Explicaré esto. No se si te fijaste que cuando inicias sesion en Windows se carga un proceso llamado explorer.exe que es el encargado de cargar el escritorio, explorador, iconos, etc... Si no se ejecuta explorer.exe al iniciar sesión no aparecerán iconos en el escritorio ni la barra de tareas, solo se vería el fondo de pantalla. Pues bien, Windows sabe que tiene que ejecutar explorer.exe por esta entrada "Shell", si existen mas procesos en esta clave las ejecutará normal, al mismo tiempo que cuando cargue explorer.exe
Funciona en modo a prueva de fallos!!!!!!
No aparece en la utilidad msconfig.exe
Se carga como el usuario que inicio sesión.
Funciona en Windows 7
Muy recomendada, es una muy buena opcion devido a su discreccion.
Recomiendo poner el valor de la clave como "Explorer.exe, 1ejecutable.exe, 2ejecutable.exe", es más limpia, funciona igual pero asi el encargado de ejecutar las aplicaciones es el sistema que tiene ordenes de ejecutar el explorer.exe y lo que vaya delimitado despues por la coma porque lee la clave "Shell" como dije arriba, de la otra manera (Explorer.exe 1ejecutable.exe) el encargado de ejecutar 1ejecutable.exe es el proceso explorer.exe.
Si todo esto que digo te suena a chino tu pon "Explorer.exe, elarchivoquequieras.exe, otroarchivoquequieras.exe" y ya está.
He analizado más este método y a veces puede provocar resultados inadecuados si no pones el espacio entre ejecutable y coma, en muchos casos da igual pero es siempre más recomendable poner "Explorer.exe, elarchivoquequieras.exe, otroarchivoquequieras.exe" que "Explorer.exe,elarchivoquequieras.exe,otroarchivoquequieras.exe"
-El valor de la clave "Userinit" en "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" siempre y cuando el valor de "Userinit" sea "C:\Windows\system32\userinit.exe,XXX,YYY"(donde XXX e YYY son nombres de los ejecutables)
Exactamente lo mismo que el anterior pero en vez de la clave "Shell" con el valor "Explorer.exe,1ejecutable.exe,2ejecutable.exe" es la clave "Userinit" con el valor "C:\Windows\system32\userinit.exe,XXX,YYY"
La explicación es la misma, Windows inicia un programa al iniciar sesion llamado userinit.exe, e igual que pasaba arriba para ejecutar este programa lee la clave llamada "Userinit", por lo que si se especifican mas programas tambien los ejecuta.
La unica diferencia es que no se puede poner "C:\Windows\system32\userinit.exe XXX" a diferencia de "Explorer.exe XXX" porque explorer.exe tiene la capacidad de ejecutar un archivo si pones "Explorer.exe XXX" pero userinit.exe no tiene esa capacidad, pero esto no tiene ninguna importancia.
También he analizado más este método y he descubierto que a diferencia del método Shell no hay que poner espacios entre coma y ejecutable; hay que poner siempre el valor como "C:\Windows\system32\userinit.exe,unprograma.exe,otroprograma.exe", si pones "C:\Windows\system32\userinit.exe, unprograma.exe, otroprograma.exe" no funcionará.
Es un metodo tambien muy recomendado.
Funciona en Windows 7.
-Metodo ActiveX
Es un método algo mas complejo que los otros (un pokito mas solo) y bastante bueno, las claves están mas escondidas.
Primero decir que no tiene nada que ver con el ActiveX de Internet Explorer, no tiene nada que ver con internet, porque mucha gente de verdad lo piensa.
Este método consiste en crear una subclave en "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components" con nombre de tipo "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" donde las X representan letras de la A-F y numeros del 0-9 (sistema hexagesimal). Da igual que valor les des a estas X (dentro del sistema hexagesimal). Si te das cuenta dentro de esta clave ya existen muchas similares, por eso digo que pasa bastante desapercibido. Pues dentro de esta subclave creada tienes que crear un valor llamado "stubpath", de valor le pones la ruta del ejecutable.
Sin embargo ahora viene lo dificil. Si utilizas este método tendrás que apañartelas para que al ejecutarse el proceso, este se cierre después. Si no quieres que se cierre (ej. un troyano) tendras que hacer que este programa se cierre y se vuelva a ejecutar. El problema está en que hasta que se cierra el archivo ejecutado con este metodo no se carga el explorer.exe, es decir, hasta que se cierre el programa no se cargará el escritorio, los iconos, la barra de tareas, etc... y ese es el problema, por eso si quieres que el proceso persisita tendras que ingienartelas para que despues de ejecutarse se cierre y se vuelva a abrir.
Y tiene otro problema, tras ejecutarse una vez un archivo mediante este metodo Windows crea una copia de la clave (la llamada "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}") en "HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components", la clave que se copió aki la tendras que borrar cada vez que se reinicie. Pues la existencia de una copia de la subclave de "HKLM\...\...\Installed Components" en "HKCU\...\...\Installed Components" le indica a Windows que no se debe ejecutar esa clave.
Se carga con los privilegios del usuario que inició sesión.
No es visible en msconfig.exe
No funciona en modo a prueva de fallos
Es bastante recomendable, pero debes de tener cuidado con los problemas citados anteriormente.
-Método policies
Es un método bastante bueno, consiste en la clave "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run" o "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run" escribir los valores alfanuméricos con los nombres que querais y con el valor de los ejecutables. Por lo que podeis poner mas de un archivo con este método.
No aparece en msconfig.exe
No funciona en modo a prueva de fallos
Se carga con los privilegios del usuario que inició sesión.
Es un metodo bastante eficaz y sencillo que suele pasar desapercibido, recomendado.
-Metodo Scripting
Existe un método que he descubierto nuevo que pasa bastante desapercibido por su poca frecuencia de uso. Este método lo trae Windows para que puedas ejecutar archivos por lotes cada vez que apagas Windows o que lo enciendes, pero puedes ejecutar también otros ejecutables (.exe). Pues bien, primero decir que hay dos claves del registro en las que hay que escribir: "HKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts\" y "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts"
Si quieres que se ejecute al apagar el sistema crea una subclave llamada "Shutdown", y dentro otra llamada "0", si prefieres que se ejecute al inicio del sistema (como es normal) hay que crear una subclave llamada "Startup", y dentro otra llamada "0", dentro de estas cada programa es una subclave con nombre un número, empezando por el 0. Recuerda que debes hacer lo mismo en las dos claves que puse arriva. Bien, un ejemplo serían estas claves:
"HKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts\Startup\0\0" y "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Startup\0\0"
Si quieres introducir otro programa pues entonces creas estas claves:
"HKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts\Startup\0\1" y "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Startup\0\1"
Para los ejemplos yo tomaré siempre que se quiere ejecutar el archivo al inicio, si lo quieres ejecutar al apagar acuerdate de cambiar la subclave "Startup" por "Shutdown"
Bien, ahora faltan introducir los valores, los valores solo hacen falta en la clave "HKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts", la otra queda con las subclaves pero sin ningun valor dentro (pero las subclaves tienen que existir). Pues dentro del número interno (por ejemplo "HKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts\Startup\0\0") tienes que crear dos valores alfanúmericos, uno llamado "Script", cuyo valor es la ruta del ejecutable, y otro valor alfanumerico llamado "Parameters" cuyo valor son los parámetros que se le pasarán al ejecutable, si no quieres pasar ningun parámetro deja el valor en blanco, pero el valor alfanumerico "Parameters" tiene que existir (aunke esté en blanco). Por último tienes que crear un valor alfanumerico en "HKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts\Startup\0" con nombre "FileSysPath" y con valor "C:\Windows\system32\GroupPolicy\Machine". Esta clave es inutil pero es necesaria para que se ejecute el archivo
Para explicar este método utilicé la clave "HKLM" (HKEY_LOCAL_MACHINE), pero este método tambien funciona a nivel de usuario "HKCU" (HKEY_CURRENT_USER), solo debes cambiar las claves con nombre "HKLM" por "HKCU", "Startup" por "Logon", y "Shutdown" por "Logoff", pero no es recomendado ya que así los procesos no se ejecutarán como SYSTEM, sino como el usuario propietario de esa clave "HKCU"
Una ventaja de este método es que los archivos se ejecutan de manera oculta (el usuario no verá la aplicación)
No aparece en msconfig.exe
No funciona en modo seguro (a prueva de fallos)
Es un método muy recomendado, casi nadie sabe este método y además si modificas directamente las claves en el registro el usuario yendo por gpedit.msc no verá los programas programados para la ejecución
Los programas se cargan como SYSTEM (siempre y cuando escribas en "HKLM" en vez de "HKCU")
-Algunas tareas programadas
Las tareas programadas pueden ejecutar procesos como diferentes usuarios (incluido SYSTEM)
Puedes crear tareas programadas desde Windows o desde los comandos "at" y "schtasks", pero este ultimo es el principal.
Tienen la ventaja de que pueden ser programadas para cualquier hora o para cuando se inicie el sistema, y elegir el numero de veces, etc...
La desventaja es que son visibles desde "Panel de control=>Tareas Programadas"
Estan bien porque nadie se suele fijar en estas pero son faciles de detectar.
-Cambiando el valor de la clave predeterminada en la entrada en el registo "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\exefile\shell\open\command" "%1"%*
No es justamente un metodo por el que se inicie un proceso al inicio, pero esto hace que cada vez que se ejecute un .exe mediante el explorador se ejecute este archivo y no el otro, por lo que no es recomendable.
Si realmente te interesa esta opcion recomiendo compilar un programa que haga que ejecute el programa original que se iba cargar y ademas el que deseemos (Tecnica utilizada por el troyano Sub7 y Optix).
Vuelve a cambiar el valor de la entrada por "%1"%* para ponerlo bien.
Puedes hacerlo tambien con la extension de cualquier ejecutable.
No recomendado si no sabes lo que estas haciendo de verdad.
-Un proceso puede iniciar otro proceso.
No os olvideis de que un proceso que se inició al inicio del sistema de alguna de las otras maneras puede cargar otro proceso.
-Metodo Dr. Watson
No es un método de inicio de archivos al inicio del sistema, por eso lo pongo el ultimo.
El valor de la clave "Debugger" que está en "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug" especifica el programa de depuración que se inicia al producirse un error en una aplicación, en Windows XP vendrña por defecto "drwtsn32 -p %ld -e %ld -g" que es el programa de depuración de Windows Dr. Watson, para que nos entendamos, este programa salta cuando nos aparece el tipico mensaje de Windows que pone "No enviar", "Enviar", etc...
Pues bien, modificando el valor de la clave "Debugger" por el programa que queramos conseguiremos ejecutarlo cada vez que salta este error (en Windows muy frecuente).
La ventaja es que es casi indetectable, no se ve en msconfig ni en ningun lado, solo en el registro. El principal inconveniente es que tedremos que esperar a que haya un error en algun programa de forma que en vez de que salte el depurador de Windows salte nuestro programa.
Normalmente esta clave puede ser modificada por cualquier usuario incluso uno sin privilegios, pero alguien que tenga los parches de Microsoft al dia ya no se debe preocupar por el problema de que cualquier usuario sin privilegios pueda modificar esta entrada, pero un usuario con privilegios de Administrador podría seguir modificando esta entrada incluso con el parche.
Es un método bueno como alternativa, es decir, es bueno combinar este metodo de inicio con otro para mas seguridad de que tu aplicación se ejecute, pues este método en conjunto con otro es bastante bueno.
----------------Orden de ejecución------------------------
----------------------------------------------------------
El sistema carga los diferentes archivos al inicio siguiendo este sistema:
1º- Se ejecutan los archivos del método RunOnceEx simultaneo a los de los métodos Shell y Userinit
2º- RunOnce se ejecuta despues de cerrar el archivo ejecutado en RunOnceEx
3º- El método ActiveX se ejecuta despues de cerrar el archivo ejecutado con RunOnce.
4º- Explorer.exe, es decir, el escritorio, los iconos, la barra de tareas, etc... se ejecuta despues de cerrarse es archivo ejecutado mediante RunOnce
5º- Despues el resto
----------------------------------------------------------
-------------Métodos que no me funcionaron----------------
-Colocando explorer.exe en %homedrive%\ (metodo que a mi no me funcionó):
He leído que si pones un ejecutable en C:\ (donde C:\ es la unidad principal) y lo renombras a explorer.exe este se ejecuta al inicio del sistema, yo lo prové pero no me funcionó, dudo que funcione en realidad. Pienso que funcionaba pero a partir del SP2 no, no estoy muy seguro. Ademas es un metodo que da que desconfiar pues el archivo está en la raiz del disco duro y ...
No se ve en en msconfig.exe
No es recomendado pues no creo que funcione, solo lo nombro porque por aí lo nombran.
-Método WIN.INI Y SYSTEM.INI
He leído y al parecer este metodo fue muy usado y funcionaba anteriormente, pero este metodo quedó obsoleto en Windows XP, por lo menos en SP2. Pienso que solo funciona en Windows 98.
Este método consistía en modificar o crear en el caso que no existan las lineas de WIN.INI
[windows]
run=archivo.exe
load=otroarchivo.exe
Donde archivo.exe y otroarchivo.exe son los procesos que queremos que se ejecuten al inicio. Podemos usar solo run= o load= si queremos, no tenemos que usar los dos simultaneamente.
En SYSTEM.INI habría que modificar esta entrada entrada:
[boot]
shell=explorer.exe
por esta:
[boot]
shell=explorer.exe archivo.exe
De todas maneras es un método muy conocido, se ve en msconfig.exe y no es recomendado.
----------------------------------------------------------
Recomendaciones
-Cuidado con los espacios, algunos valores y comandos tienen que ir entre comillas si tienen espacios para que funcionen!!!
-Las entradas del registro que empiezan por HKEY_LOCAL_MACHINE son a nivel global, es decir, estas entradas son las mismas para todos los usuarios y cualquier modificación realizada en ellas afectará a todos los usuarios del equipo. Las entradas que comiencen por HKEY_CURRENT_USER son a nivel de usuario, y solo afectan al usuario que está logeado en ese momento, es decir, al usuario que estas utilizando en el momento que modificas esa clave.
-Acuerdate que tienes que poner la ruta del ejecutable completo cuando escribas en el registro los archivos que se ejecutarán, excepto cuando estos se encuentren en C:\Windows\ o C:\Windows\system32
-Puedes aprovecharte tambien de un bug del regedit.exe que consiste en que las claves y valores con el nombre de mas de 200 caracteres no se muestran. Aunke si que se muestran en otros programas como en el msconfig.exe y otros programas editores del registro.
-Yo recomiendo usar el método "Shell", "Userinit" o "Scripting" ya que son los mas discretos y faciles de usar. "Shell" y "Userinit" tienen la ventaja de que funcionan en modo a prueva de fallos y "Scripting" la ventaja que permite que la aplicación se ejecute como "SYSTEM", suelen pasar desapercibidos. El método ActiveX sería el 4º en mi lista de preferidos. El metodo policies sería el 5º.
-Es recomendable que uses variables de entorno. Recuerda que la ruta de Windows normalmente es "C:\Windows" pero no tiene porque serlo en todos los ordenadores, si usas %windir% te resolverá esta ruta aunque la unidad sea "D:" por ejemplo. Por poner un ejemplo, imaginate que mi ruta de Windows es "D:\Windows.0" (que la es realmente en uno de mis ordenadores), pues si usas el método "Userinit" y pones "C:\Windows\system32\userinit.exe,tuprograma.exe" pues me estropearás el arranke, y sin embargo si me pones "%windir%\system32\userinit.exe,tuprograma.exe" funcionará siempre. Existen más variables de entorno, consultalas escribiendo "set" en la consola de Windows (cmd.exe). Por ejemplo %programfiles% resuelmve el directorio de archivos de programa, que puede ser "C:\Program files" por ejemplo.
-Cuidado con el método "Shell" y "Userinit", es importante que nunca borres los valores "Explorer.exe" y "C:\Windows\system32\userinit.exe" de estas claves respectivamente, solo añade una coma (y un espacio en caso del método "Shell") y añade mas programas, pues si borras esos valores no se ejecutaran los procesos fundamentales del Windows XP explorer.exe y userinit.exe.
----------------------------------------------------------
Esto es todo, espero que os sirva de ayuda. Si alguien sabe algun otro metodo que lo ponga. Yo soy el único autor de este manual, lo he creado yo, no he copiado nada de nadie. Puede que este documento tenga errores, si alguien los ve que los diga. Acepto todas las sugerencias. Si tienen algun problema posteenlo aqui y yo os ayudaré en lo que pueda
Un saludo