by NikDH e GuestNet
Rendere un processo invisibile è abbastanza semplice.
Con "invisibile" si intende un processo che non viene visualizzato come tutti
gli altri, ad esempio non si trova nella task list di WIN.
Per rendere un processo "invisibile" basta "dire" a Windows che il
nostro non è un normale processo bensì un processo di servizio.
Le vie per fare questo sono due:
UTILIZZO DI RegisterServiceProcess
RegisterServiceProcess è unAPI che presenta in seguente prototipo:
DWORD RegisterServiceProcess(DWORD dwProcessId, DWORD dwType)
dwProcessID altro non è che lID del processo che
vogliamo registrare (NULL = Processo Corrente).
dwType indica se il processo in questione deve essere
registrato come di sistema o sregistrato.
- 1 : Registra il processo
- 0 : "Sregistra" il processo
Il valore restituito dallAPI è 1 in caso di successo o 0
in caso di errore.
Lunico ostacolo sta nel fatto che lAPI RegisterServiceProcess non è esportata
normalmente da Kernel32.
Per potervi accedere è necessario ricavare da Kernel32 un puntatore a questa funzione.
Nellesempio realizzato in assembler (masm32) viene utilizzata lAPI
GetProcAddress per poter ricavare lindirizzo della funzione allinterno di
kernel32.dll. Ottenuto questo indirizzo viene eseguita CALL ad esso, passandogli i
parametri attraverso lo stack.
Alti linguaggi, come si può vedere dall' esempio in Delphi, offrono dei medodi propri per esportare questo tipo di funzione.
Grazie a questa a mitica API possiamo rendere di servizio QUALUNQUE processo (anche processi diversi da quello che esegue la chiamata ottenutone lID ), in OGNI momento.
Esempio in assembler:
Lesempio allegato non fa altro che diventare invisibile per
15 sec, ritornare visibile ed attendere altri 15 sec prima di chiudersi.
In questo modo è facile notare il funzionamento del programma mediante la pressione di
CTRL+ALT+CANC.
L'esempioi in Delphi parla da solo :-) .
UTILIZZO DEL REGISTRY DI WINDOWS
Un programma può essere eseguito allavvio di Windows
direttamente come processo di servizio.
Esiste a tale proposito una chiave nel registro di configurazione:
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices]
Inserendo allinterno di questa chiave un valore (di tipo stringa) avente come nome la descrizione (qualunque) e come valore il percorso del file da eseguire ad ogni avvio di windows il file verrà avviato come processo di servizio.
Eseguendo la stessa operazione nella chiave
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
il programma verrà eseguito come processo di servizio SOLO al prossimo riavvio di Win e la chiave si svuoterà automaticamente, senza lasciare traccia.
Download Esempi
ESEMPIO IN ASSEMBLER (masm32)
ESEMPIO IN DELPHI (3.0)