COME RENDERE UN PROCESSO INVISIBILE
(WIN95/98)

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 è un’API che presenta in seguente prototipo:

DWORD RegisterServiceProcess(DWORD dwProcessId, DWORD dwType)

dwProcessID altro non è che l’ID 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 dall’API è 1 in caso di successo o 0 in caso di errore.
L’unico ostacolo sta nel fatto che l’API RegisterServiceProcess non è esportata normalmente da Kernel32.
Per potervi accedere è necessario ricavare da Kernel32 un puntatore a questa funzione.
Nell’esempio realizzato in assembler (masm32) viene utilizzata l’API GetProcAddress per poter ricavare l’indirizzo della funzione all’interno 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 l’ID ), in OGNI momento.

Esempio in assembler:

L’esempio 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 all’avvio 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 all’interno 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)