
Différentes méthodes pour obtenir le nom d'utilisateur actuel sans utiliser whoami
Quelques expériences pour récupérer le nom d'utilisateur actuel sans appeler whoami.exe ou des binaires similaires.
Obtenir les variables d'environnement depuis la structure PEB et les analyser pour trouver le nom d'utilisateur.
La fonction NtQueryInformationProcess renvoie une structure "PROCESS_BASIC_INFORMATION" contenant un pointeur vers l'adresse de base du PEB.
La structure PEB contient un pointeur "ProcessParameters" vers une structure RTL_USER_PROCESS_PARAMETERS.
À partir de cette structure, vous pouvez obtenir un pointeur "Environment" vers les variables d'environnement et un pointeur "EnvironmentSize" vers la taille des variables d'environnement.
En lisant le nombre d'octets indiqué dans "EnvironmentSize" depuis l'adresse "Environment" sous forme de texte UNICODE, analysez les variables d'environnement et affichez celle appelée "USERNAME". Si vous voulez toutes les variables d'environnement, consultez ce dépôt


Obtenir un accès à un jeton, trouver le SID de l'utilisateur au format chaîne et le traduire à l'aide de la fonction LookupAccountSid.
La fonction NtOpenProcessToken crée un jeton d'accès associé au processus en cours.
La fonction NtQueryInformationToken obtient des informations à partir du jeton que nous avons créé, en utilisant la valeur "tokenUser" (1) dans le champ "TOKEN_INFORMATION_CLASS" nous obtenons des informations sur le nom d'utilisateur qui sont stockées dans le pointeur "TokenInformation".
La fonction ConvertSidToStringSid convertit le SID du nom d'utilisateur au format binaire en format chaîne.
La fonction LookupAccountSid prend le SID au format chaîne et renvoie le nom d'utilisateur.


Obtenir un accès à un jeton et à un objet Policy et obtenir le nom d'utilisateur avec la fonction LsaLookupSids.
Les fonctions NtOpenProcessToken et NtQueryInformationToken sont utilisées comme dans la méthode 2, renvoient un pointeur "TokenInformation" avec le SID de l'utilisateur au format binaire.
La fonction LsaOpenPolicy crée un handle vers l'objet Policy dans le système actuel.
La fonction LsaLookupSids prend un pointeur vers le SID et renvoie une structure LSA_TRANSLATED_NAME contenant le nom d'utilisateur.


Créer un tube nommé (named pipe) et un thread secondaire, écrire et lire depuis le tube nommé et obtenir le nom d'utilisateur à partir de la fonction non documentée NpGetUsername.


Obtenir le nom d'utilisateur si l'ordinateur est joint à un domaine en utilisant la fonction CoCreateInstance comme dans l'exemple MSDN. Elle utilise la classe ADSystemInfoClass et les interfaces ADSystemInfo et IADsADSystemInfo provenant d'ActiveDS.dll, qui se trouvent déjà dans le dossier du projet, vous n'avez donc pas besoin de la DLL.
S'il n'y a pas de connexion avec l'AD :

S'il y a connexion :
