
Metodi diversi per ottenere il nome utente corrente senza utilizzare whoami
Alcuni esperimenti per recuperare il nome utente corrente senza chiamare whoami.exe o binari simili.
Ottieni le variabili d'ambiente dalla struttura PEB e analizzale per trovare il nome utente.
La funzione NtQueryInformationProcess restituisce una struttura "PROCESS_BASIC_INFORMATION" contenente un puntatore all'indirizzo di base del PEB.
La struttura PEB contiene un puntatore "ProcessParameters" a una struttura RTL_USER_PROCESS_PARAMETERS.
Da quella struttura puoi ottenere un puntatore "Environment" alle variabili d'ambiente e un puntatore "EnvironmentSize" alla dimensione delle variabili d'ambiente.
Leggendo il numero di byte indicato in "EnvironmentSize" dall'indirizzo "Environment" come testo UNICODE, analizza le variabili d'ambiente e stampa quella chiamata "USERNAME". Se vuoi tutte le variabili d'ambiente, consulta questo repository.


Ottieni l'accesso a un token, trova il SID dell'utente in formato stringa e traducilo usando la funzione LookupAccountSid.
La funzione NtOpenProcessToken crea un token di accesso associato al processo corrente.
La funzione NtQueryInformationToken ottiene informazioni dal token creato, usando il valore "tokenUser" (1) nel campo "TOKEN_INFORMATION_CLASS" si ottengono informazioni sul nome utente memorizzate nel puntatore "TokenInformation".
La funzione ConvertSidToStringSid converte il SID dell'utente in formato binario in formato stringa.
La funzione LookupAccountSid prende il SID in formato stringa e restituisce il nome utente.


Ottieni l'accesso a un token e a un oggetto Policy e ottieni il nome utente con la funzione LsaLookupSids.
Le funzioni NtOpenProcessToken e NtQueryInformationToken vengono utilizzate come nel metodo 2, restituiscono un puntatore "TokenInformation" con il SID dell'utente in formato binario.
La funzione LsaOpenPolicy crea un handle per l'oggetto Policy nel sistema corrente.
La funzione LsaLookupSids prende un puntatore al SID e restituisce una struttura LSA_TRANSLATED_NAME contenente il nome utente.


Crea una named pipe e un thread secondario, scrivi e leggi dalla named pipe e ottieni il nome utente dalla funzione non documentata NpGetUsername.


Ottieni il nome utente se il computer è unito al dominio utilizzando la funzione CoCreateInstance come nell'esempio MSDN. Utilizza la classe ADSystemInfoClass e le interfacce ADSystemInfo e IADsADSystemInfo da ActiveDS.dll, che sono già nella cartella del progetto quindi non hai bisogno della DLL.
Se non c'è connessione con l'AD:

Se c'è connessione:
