Identifier l'hôte à partir d'un fichier de vidage en mode utilisateur Windows
-
01-07-2019 - |
Question
Existe-t-il un moyen simple de connaître le nom d’hôte d’une machine ayant généré un fichier de vidage en mode utilisateur via WinDbg?
Ou au moins tout élément d'identification permettant de confirmer que deux fichiers de vidage proviennent du même système.
La solution
Vous pouvez le faire en analysant le fichier de vidage d’utilisateur avec WinDbg. Exécutez la commande !peb
et recherchez la valeur de COMPUTERNAME
dans sa sortie.
Autres conseils
De debugger.chm:
Recherche du nom de l'ordinateur dans un fichier de vidage en mode noyau
Si vous devez déterminer le nom de l'ordinateur sur lequel le vidage sur incident a été effectué, vous pouvez utiliser l'extension! peb et rechercher la valeur de COMPUTERNAME dans sa sortie.
Ou vous pouvez utiliser la commande suivante:
0: kd> x srv!SrvComputerName
be8ce2e8 srv!SrvComputerName = _UNICODE_STRING "AIGM-MYCOMP-PUB01"
Recherche de l'adresse IP dans un fichier de vidage en mode noyau
Pour déterminer l'adresse IP de l'ordinateur sur lequel le vidage sur incident a été effectué, recherchez une pile de threads indiquant une activité réseau d'envoi / réception. Ouvrez l'un des paquets d'envoi ou recevez des paquets. L’adresse IP sera visible dans ce paquet.
EDIT: Je noterai que, selon la manière dont le fichier de vidage a été créé, les informations PEB peuvent ne pas être disponibles et vous ne pourrez donc pas toujours trouver le nom de l'ordinateur. Surtout si quelque chose est passé par le site Microsoft Winqual, il a été nettoyé.
Utilisation du raccourci pour les variables d'environnement dans le PEB:! envvar COMPUTERNAME
Pour la liste d'adresses IP:
3: kd & Gt; du poi (poi (srvnet! SrvAdminIpAddressList))
ffffe001 d3d58450 "127.0.0.1"
3: kd> du
d3d58464 " :: 1 "
ffffe001
3: kd & Gt;
ffffe001 d3d5846c "169.254.66.248"
d3d5848a & "; &";
3: kd>
ffffe001
3: kd & Gt;
ffffe001 d3d5848c "fe80::f0cb:5439:f12f:42f8"
d3d584c0 " "
3: kd>
ffffe001
3: kd & Gt;
ffffe001 d3d584c2 "192.168.104.249"
3: kd>
ffffe001
d3d584e2 " "
3: kd & Gt;
ffffe001`d3d584e4 & "; fe80 :: fc6f: ae16: b336: 83dc &";
3: kd & Gt;
En mode noyau et utilisateur,
10: kd> !envvar COMPUTERNAME
COMPUTERNAME = a-host-name
Récupère le nom de l'ordinateur ou nom d'hôte du PC cible.
Il faut EXTS.dll
l'extension pour être chargée et Windows XP + (W10 RS3 au moment de l'écriture).
En mode noyau, cela ne fonctionne pas directement, !envvar
renverra vide
10: kd> !peb
PEB NULL...
Votre contexte actuel est un fil inactif.
L’aide de
WinDbg (Windows 10 RS3 16299.15 SDK) pour !process
ne répertorie que les bits 0 à 4, mais j’ai trouvé le bit 5 vide l’environnement complet lorsqu’il est utilisé avec 0 et 4. Flags = 0b110001
. Je l’utilise donc pendant le script de démarrage WinDbg pour enregistrer automatiquement le nom de l’ordinateur.
!process 0 0x31 wininit.exe
Dumpera toutes les variables d'environnement:
10: kd> !process 0 0x31 wininit.exe
PROCESS ffffc485c82655c0
SessionId: 0 Cid: 02d0 Peb: 8d04c6b000 ParentCid: 0258
DirBase: 40452f000 ObjectTable: ffffe30b1150fb40 HandleCount: 163.
Image: wininit.exe
VadRoot ffffc485c862b990 Vads 61 Clone 0 Private 326. Modified 12. Locked 2.
DeviceMap ffffe30b0a817880
Token ffffe30b1150f060
ElapsedTime 00:00:18.541
UserTime 00:00:00.000
KernelTime 00:00:00.015
QuotaPoolUsage[PagedPool] 121696
QuotaPoolUsage[NonPagedPool] 11448
Working Set Sizes (now,min,max) (1750, 50, 345) (7000KB, 200KB, 1380KB)
PeakWorkingSetSize 1697
VirtualSize 2097239 Mb
PeakVirtualSize 2097239 Mb
PageFaultCount 2104
MemoryPriority BACKGROUND
BasePriority 13
CommitCharge 470
PEB at 0000008d04c6b000
InheritedAddressSpace: No
ReadImageFileExecOptions: No
BeingDebugged: No
ImageBaseAddress: 00007ff7be3d0000
Ldr 00007ff8dff4f3a0
Ldr.Initialized: Yes
Ldr.InInitializationOrderModuleList: 000001be470e1c10 . 000001be47128d60
Ldr.InLoadOrderModuleList: 000001be470e1d80 . 000001be47128d40
Ldr.InMemoryOrderModuleList: 000001be470e1d90 . 000001be47128d50
Base TimeStamp Module
7ff7be3d0000 600d94df Jan 24 10:40:15 2021 C:\Windows\system32\wininit.exe
7ff8dfdf0000 493793ea Dec 04 03:25:14 2008 C:\Windows\SYSTEM32\ntdll.dll
...
SubSystemData: 0000000000000000
ProcessHeap: 000001be470e0000
ProcessParameters: 000001be470e1460
CurrentDirectory: 'C:\Windows\system32\'
WindowTitle: '< Name not readable >'
ImageFile: 'C:\Windows\system32\wininit.exe'
CommandLine: 'wininit.exe'
DllPath: '< Name not readable >'
Environment: 000001be47104460
ALLUSERSPROFILE=C:\ProgramData
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=a-host-name
ComSpec=C:\Windows\system32\cmd.exe
NUMBER_OF_PROCESSORS=16
OS=Windows_NT
Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=AMD64 Family 23 Model 1 Stepping 1, AuthenticAMD
PROCESSOR_LEVEL=23
PROCESSOR_REVISION=0101
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
PUBLIC=C:\Users\Public
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\temp
TMP=C:\temp
USERNAME=SYSTEM
USERPROFILE=C:\Windows\system32\config\systemprofile
windir=C:\Windows
Vous pouvez cliquer sur un lien dml PEB ou changer de contexte via .process /p <PROCESS_ADDRESS>
, alors !envvar COMPUTERNAME
fonctionnerait également.