System Information¶
What it is¶
A system's four machine hives say what an analyst needs before reading its timeline:
- its names (NetBIOS, DNS host name, DNS domain) and the domain or workgroup it is in;
- its Windows version, build and update revision, and when Windows was installed or last upgraded;
- its time zone, which tells you the local times the system kept;
- when it last shut down cleanly;
- its processor architecture and code pages;
- the user who last signed in, and the profiles of every user who has signed in;
- its SIDs: the computer's (local accounts are it plus a RID) and its domain's;
- the Windows versions it was upgraded from.
parse-registry system-info writes one record per system with all of these.
Best conclusion: the configuration as it stood when the hives were collected (or last written). The key times say when parts of it last changed.
Location¶
C:\Windows\System32\config\SYSTEM (the control set Windows used last: Select\Current)
ControlSet00N\Control\ComputerName\ComputerName ComputerName
ControlSet00N\Services\Tcpip\Parameters Hostname, Domain
ControlSet00N\Control\TimeZoneInformation TimeZoneKeyName, Bias, ActiveTimeBias, …
ControlSet00N\Control\Windows ShutdownTime
ControlSet00N\Control\Session Manager\Environment PROCESSOR_ARCHITECTURE
ControlSet00N\Control\Nls\CodePage ACP, OEMCP
Setup\Source OS (Updated on M/D/YYYY HH:MM:SS) the version before each upgrade
C:\Windows\System32\config\SOFTWARE
Microsoft\Windows NT\CurrentVersion ProductName, EditionID, DisplayVersion,
CurrentBuild, UBR, InstallDate, InstallTime, …
Microsoft\Windows NT\CurrentVersion\ProfileList one key per profile (SID)
Microsoft\Windows\CurrentVersion\Authentication\LogonUI LastLoggedOnUser, …
C:\Windows\System32\config\SAM
SAM\Domains\Account V: the computer's SID at its end
C:\Windows\System32\config\SECURITY
Policy\PolAcDmN, PolAcDmS the computer's name and SID
Policy\PolPrDmN, PolPrDmS its domain (or workgroup) and the domain's SID
Policy\PolDnDDN, PolDnTrN, PolDnDmG the domain's and forest's DNS names, GUID
Policy\PolMachineAccountS the computer account's SID in the domain
Collect the four hives with their transaction logs. Any of them alone gives what it holds.
Analyst cautions¶
- Registry times are UTC; the time zone is for everything else. Key times, FILETIMEs and most
event times are UTC. Text logs, some application logs, and dates written into names or strings
(such as
Source OS (Updated on …)) may be local.Biasis the minutes from local standard time to UTC (UTC = local + Bias).UtcOffsetandDaylightUtcOffsetgive the two offsets, andTimeZoneDescriptionsays when daylight time begins and ends. - The time zone can change.
TimeZoneLastWrittenUTCis the key's last write. Windows also rewrites the key on its own when it updatesActiveTimeBias(the offset in force then), so a recent time doesn't prove someone changed the zone. Compare with event logs: Security 4616 (the system time changed) and the System log'sMicrosoft-Windows-Kernel-Generalevents. StandardStartandDaylightStartare the kernel'sTIME_FIELDS, notSYSTEMTIMEs. The weekday is their last field, not their third (as in the zone'sTZIvalue inSOFTWARE). In US zones both layouts read the same, because the weekday is Sunday (0). Juntei decodes them asTIME_FIELDS: a public Easter Island system (first Saturday at 22:00) shows the difference. A month of 0 means no daylight saving time.- Windows 11 says "Windows 10".
ProductNamekeepsWindows 10 …on Windows 11. Builds 22000 and later are Windows 11, and the summary says so.CurrentVersionis6.3on Windows 8.1, 10 and 11;VersionusesCurrentMajorVersionNumber(10) when it is there. InstallDatemoves with feature upgrades. An in-place upgrade to a new release (1809 to 21H2, for example) resets it. The release each upgrade replaced, with its ownInstallDate, is inPreviousVersions(Setup\Source OS). Their earliestInstallDateis the closest to the original installation. The date in aSource OSkey's name doesn't say its time zone.ShutdownTimeis the last clean shutdown. A crash or power loss doesn't update it. Compare it with event logs (6006, 6008, 1074) and with the times of the last writes to the hives.LastLoggedOnUseris the sign-in screen's last user, not every logon. Remote Desktop,runas, services and scheduled tasks don't all set it.LogonUiLastWrittenUTCis about when it was last set.- Profiles:
ProfileListlists every user (and service) that has had a profile on the system, deleted accounts included until their profile is removed. Windows 10 and later writeLocalProfileLoadTimeandLocalProfileUnloadTime: about the last sign-in and sign-out. - SIDs: local accounts are
MachineSid-<RID>, domain accountsDomainSid-<RID>.MachineSidcomes from theSAM(else fromSECURITY'sPolAcDmS). The two should match; when they don't,Problemssays so, as hives of different systems would.DomainSidis empty in a workgroup. - One directory, one system. With
-d, the hives in one directory are one system's.RegBackcopies and a second hive of the same kind (SYSTEM.old) are records of their own. With-f, the hives given are one system's, and the others are looked for next to them. - Control sets: only the control set Windows used last is read.
parse-registry readshows the others.
Parse with Juntei¶
Usage: juntei parse-registry system-info <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SYSTEM, SOFTWARE, SAM and SECURITY hives
-f, --file <FILE> A hive of one system; repeat for each
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry system-info -d collection/ -o system-info.csv
juntei parse-registry system-info -f SYSTEM -f SOFTWARE -t jsonl \
| jq '{Host, TimeZoneDescription, ProductName, Build, LastShutdown}'
The summary gives, for each system: its Windows version, when it was installed, its time zone in
words, the offset in force when the key was last written, its last shutdown, its domain or
workgroup, the last user who signed in, its SID, how many profiles it has, and the versions it
was upgraded from. auto-parse also prints each system's time zone when it lists the systems it
found.
Output fields¶
| Field | Interpretation |
|---|---|
Host, SourcePath, SoftwarePath, SamPath, SecurityPath |
Host, and the hives read (SourcePath is the SYSTEM hive, else the first one read). |
CompName, Hostname, Domain |
The NetBIOS name (SYSTEM, else SECURITY's PolAcDmN), the DNS host name and DNS domain (Tcpip\Parameters). |
PrimaryDomain, DNS-Domain |
The domain the computer is joined to, or its workgroup (PolPrDmN), and the domain's DNS name (PolDnDDN). |
ProductName, Edition, DisplayVersion, Version, Build, Ubr, ServicePack, InstallationType |
CurrentVersion: the product name as written, EditionID, DisplayVersion (else ReleaseId), the major and minor version (else CurrentVersion), the build, the update build revision, CSDVersion, and Client, Server or Server Core. |
InstallDateUTC, InstallTimeUTC |
InstallDate (to the second) and InstallTime (to the 100 ns, Windows 10 and later): installation or the last feature upgrade. |
RegisteredOwner, RegisteredOrganization, SystemRoot |
As written. |
TimeZone, TimeZoneDescription |
TimeZoneKeyName (else StandardName), and the zone in words with its offsets and daylight saving dates. |
UTC-Offset, DaylightUTC-Offset |
Local standard time's offset from UTC, and daylight time's (empty without daylight saving time). |
BiasMinutes, ActiveBiasMinutes, StandardBiasMinutes, DaylightBiasMinutes |
Bias, ActiveTimeBias (in force when the key was written), StandardBias, DaylightBias. |
StandardName, DaylightName |
As written, often a resource reference (@tzres.dll,-112). |
StandardStart, DaylightStart |
When standard and daylight time begin, in words (first Sunday of November, 02:00). |
DynamicDaylightTimeDisabled, RealTimeIsUniversal |
Dynamic daylight saving time turned off; the hardware clock keeps UTC. |
TimeZoneLastWrittenUTC |
The time zone key's last write. |
LastShutdownUTC |
ShutdownTime: the last clean shutdown. |
CurrentControlSet, ProcessorArchitecture, AnsiCodePage, OemCodePage |
The control set read, PROCESSOR_ARCHITECTURE, ACP and OEMCP. |
LastLoggedOnUser, LastLoggedOnSamUser, LastLoggedOnUserSID, LastLoggedOnDisplayName, LogonUiLastWrittenUTC |
The sign-in screen's last user, and its key's last write. |
MachineSID, DomainSID, MachineAccountSID |
The computer's SID, its domain's SID (PolPrDmS) and the computer account's SID in the domain (PolMachineAccountS). |
CompNameLastWrittenUTC, PrimaryDomainLastWrittenUTC, VersionLastWrittenUTC |
About when the computer was last named, last joined a domain or workgroup, and last updated (CurrentVersion's key). |
PreviousVersions |
Each Source OS key: the version, its install date, and the date in the key's name (JSON: one object each). |
Profiles |
Each profile: SID, folder, key time, last load and unload (JSON: one object each). |
TransactionLogStatus, LogsApplied |
Registry recovery context, over all four hives. |
Problems |
Values of the wrong type or size (their bytes kept), and a SAM and SECURITY whose computer SIDs differ. |
Investigation strategy¶
- Read the time zone first: note
UtcOffset, the daylight saving dates, and whether the zone was changed recently. Convert local-time logs with it. - Note the version, build and install date. Check
PreviousVersionsfor upgrades, and compare the install date with the oldest file system and event log times. - Note
LastShutdownUTC: activity after it with no new shutdown time suggests a crash, a power loss or a live collection. - Use
MachineSidandDomainSidto tell local from domain accounts in SIDs elsewhere (BAM,ProfileList, event logs), and the profiles' load and unload times for the last sign-ins. - Correlate the computer and domain names with event logs, and with
CompNameLastWrittenUTCandPrimaryDomainLastWrittenUTCfor renames and domain joins.