Identificar o host de um arquivo modo de despejo do usuário do Windows
-
01-07-2019 - |
Pergunta
Existe uma maneira fácil de descobrir o nome do host de uma máquina que gerou um arquivo de despejo de modo de usuário via WinDbg?
Ou, pelo menos, qualquer peça de informação de identificação para tentar confirmar que dois arquivos de despejo veio do mesmo sistema.
Solução
Você pode fazê-lo através da análise do arquivo de despejo do usuário com WinDbg. Execute o comando !peb
e olhar para o valor da COMPUTERNAME
em sua saída.
Outras dicas
De Debugger.chm:
Encontrar o nome do computador em um arquivo de despejo Kernel-Mode
Se você precisa para determinar o nome do computador em que o despejo foi feito, você pode usar a extensão! Peb e olhar para o valor de COMPUTERNAME que a sua saída.
Ou você pode usar o seguinte comando:
0: kd> x srv!SrvComputerName
be8ce2e8 srv!SrvComputerName = _UNICODE_STRING "AIGM-MYCOMP-PUB01"
Localizar o endereço IP em um arquivo de despejo Kernel-Mode
Para determinar o endereço IP do computador em que o despejo foi feito, encontrar uma pilha segmento que mostra alguns enviar / receber atividade de rede. Abra um dos pacotes de enviar ou receber pacotes. O endereço IP será visível nesse pacote.
EDIT: eu vou notar que, dependendo de como o arquivo de despejo foi criado, a informação PEB podem não estar disponíveis e assim você não irá sempre ser capaz de encontrar o nome do computador. Especialmente se algo veio através do site da Microsoft Winqual, tem sido higienizado.
Usando o atalho para variáveis ??de ambiente no PEB: envvar COMPUTERNAME
para lista de endereços IP:
3: kd> du poi (! Poi (srvnet SrvAdminIpAddressList))
ffffe001d3d58450 "127.0.0.1"
3: kd> du
d3d58464 ":: 1"
ffffe001
3: kd>
ffffe001d3d5846c "169.254.66.248"
d3d5848a ""
3: kd>
ffffe001
3: kd>
ffffe001d3d5848c "fe80::f0cb:5439:f12f:42f8"
d3d584c0 ""
3: kd>
ffffe001
3: kd>
ffffe001d3d584c2 "192.168.104.249"
3: kd>
ffffe001
d3d584e2 ""
3: kd>
ffffe001`d3d584e4 "fe80 :: fc6f: AE16: b336: 83dc"
3: kd>
Em ambos modo kernel e usuário,
10: kd> !envvar COMPUTERNAME
COMPUTERNAME = a-host-name
Recupera o nome do computador aka nome do host do PC alvo.
Ela exige extensão EXTS.dll
a ser carregado e Windows XP + (W10 RS3 no momento da escrita).
No modo kernel, isso não funciona diretamente, !envvar
voltará vazia
10: kd> !peb
PEB NULL...
O contexto atual é um thread inactivo.
WinDbg (Windows 10 RS3 16.299,15 SDK) ajuda para !process
apenas listas pedaços 0-4, no entanto, achamos bit 5 despeja ambiente totalmente quando usado com 0 e 4. Flags = 0b110001
. Então, eu uso isso durante roteiro WinDbg inicialização para registrar automaticamente o nome do computador.
!process 0 0x31 wininit.exe
vai despejar as todas as variáveis ??de ambiente:
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
Você pode clicar em um link PEB DML, ou contexto switch via .process /p <PROCESS_ADDRESS>
, então !envvar COMPUTERNAME
também funcionaria.