Automatic Collection Parsing¶
auto-parse is the quickest way to turn a multi-computer Windows triage collection into a
structured analysis directory. Give it the evidence root and a new output directory. It discovers
the collected systems, identifies their computer names, and runs every compatible Juntei parser in
parallel.
The default output is CSV. Add a JSONL timeline for jq or SIEM import while keeping those CSV
results:
Keep the output and evidence trees separate
Juntei refuses an output directory that is inside <EVIDENCE> or contains <EVIDENCE>. This
prevents generated data from being rediscovered as evidence and prevents --clobber from
touching files in the source collection.
VHDX disk images¶
With --vhdx, auto-parse reads VHDX images natively on Linux, macOS and Windows, using
ys-vhdx-parser. No OS mount, FUSE driver,
or administrator privileges are needed.
# A directory of images, searched recursively
juntei auto-parse -d /cases/vhdx --vhdx -o parsed
# One image
juntei auto-parse -d host1.vhdx --vhdx -o parsed -j timeline.jsonl
The artifact parsers need filesystem paths. Juntei therefore copies the files they read from the reader's NTFS volumes into a private staging workspace, then runs the usual parsers: registry hives and their transaction logs, NTFS metadata files, databases, prefetch files, shortcuts, jump lists, Outlook files and Defender quarantine folders. Every other file is an empty placeholder with its original modification time, so directories and paths look as they do on the disk. persistence-hunter reads a placeholder's content from the image only when it needs it, such as an executable that a persistence entry refers to. Allow enough temporary disk space for the copied files, in addition to the results. Reads use bounded buffers; zero-filled regions are written as holes where the host filesystem supports them. Original filenames, directory structure, hard links, and file modification times are preserved. LNK and Jump List source creation/modification/access times come from a snapshot of the original NTFS metadata, never the temporary files. The workspace is removed on normal completion, including reported parser errors; a forced termination can leave temporary files. The source image is opened read-only, and pending VHDX log updates are applied in memory only.
Computer discovery, per-host output, CSV/JSON/JSONL, and -j use the same parsing pipeline as
ordinary evidence directories. Image in manifest.json identifies the original image and
EvidenceRoot identifies the relative path inside the prepared image tree. Unreadable images,
volumes, files, and filenames that cannot be represented safely are reported in ImageErrors
and failed rows of manifest.csv. Readable evidence is still parsed, and the process exits with
status 1 if any image input was incomplete. Unsafe or ambiguous names are rejected rather than
silently renamed. Named NTFS streams are not synthesized as extra files; already-collected
artifacts stored as ordinary files inside a triage image remain available.
The separate mount command exposes a filesystem to other programs and still needs
Linux FUSE. It is not used by auto-parse --vhdx.
Staging uses a private directory on the output filesystem by default. Use --temp-dir to choose an existing staging directory on another disk. Original source metadata is kept separately on the output filesystem, so a full staging disk does not prevent parsing already-readable files. Reserve space for both staged files and results; if the output filesystem itself is full, results cannot be saved. Ctrl+C stops parser processes, cleans the private workspace and exits with code 130. A forced termination such as SIGKILL or power loss can still leave copies. Inaccessible subdirectories are skipped during image discovery; an unreadable input root remains an error.
The staging directory must be outside the output directory. On Linux and macOS, SIGTERM and SIGHUP also stop parser processes and clean up the workspace.
E01 and Ex01 disk images¶
--e01 reads physical EWF1 (.E01) and EWF2 (.Ex01) images natively on Linux, macOS and Windows, without FUSE, an OS mount, or administrator privileges. It uses ys-e01-parser and the same NTFS parsing pipeline described above.
Provide the first segment of a split image. Keep all companions, including .E02, beside it with their original names. Both whole disks (MBR/GPT) and single NTFS volumes are supported. Use --vhdx --e01 for a directory containing both formats.
The same temporary-space and source-metadata requirements apply. E01 images usually hold whole disks, and every image is staged before parsing starts, but only the files the parsers read are copied: usually a small part of the used space. Images are read-only. Acquisition gaps and damage found during opening or reading appear in ImageErrors and manifest.csv; readable results are retained with exit status 1. This checks accessed data, not every chunk or the image's full-media hash. Logical .L01 and .Lx01 files are rejected; there is no password option.
The separate mount command still requires Linux FUSE; native automatic parsing does not.
juntei auto-parse --e01 -d evidence -o parsed
juntei auto-parse --e01 -d disk.E01 -o parsed
juntei auto-parse --vhdx --e01 -d evidence -o parsed -j timeline.jsonl
Output time zone¶
Parsed timestamps default to UTC, independent of the analyst computer's local time zone. UTC
uses the Windows event-log form 2026-10-20T08:46:38.2001668Z: an ISO 8601 date/time, T
between the date and time, and Z for UTC. The available fractional digits are preserved.
manifest.json's GeneratedUTC uses this form too. The console's Start time and End time
are the analyst computer's local time, such as 2026-11-04 09:15:02, whatever the output time
zone.
Choose a fixed display offset with -Z, --timezone:
juntei auto-parse -d evidence/ -o parsed-jst/ --timezone "+09:00"
juntei auto-parse -d evidence/ -o parsed-offset/ -Z "-01:00"
juntei auto-parse -d evidence/ -o parsed-half-hour/ -Z "+02:30"
An offset is a signed, two-digit HH:MM value (hours 00–23, minutes 00–59). Names such as
JST, shortened values such as +9, and invalid ranges produce an error with example syntax.
Omit the option or use --timezone "+00:00" for UTC. A fixed offset does not apply daylight
saving rules.
The option applies to parsed timestamps in the per-artifact CSV, JSON and JSONL results and
the additional -j JSONL export. For example, 2026-10-20T08:46:38.2001668Z becomes
2026-10-20T17:46:38.2001668+09:00; both describe the same instant.
Field names stay stable, including existing names ending in UTC. Converted values explicitly
carry the selected offset. OutputTimeZone in both manifests records the requested display
offset, while GeneratedUTC remains UTC run metadata. Per-parser logs retain the parsers' native UTC summaries.
Raw FILETIME/epoch numbers, registry-value dictionaries, source time-zone configuration, text
metadata, date-only values and local clock values without a known offset are preserved. Juntei
does not add Z to an unknown local time. FAT-derived shell-item clocks (Item*UTC in
ShellBags/OpenSaveMRU and LNK/Jump List TargetItems) have no recorded offset; their legacy
UTC labels or rendered Z suffix do not prove UTC, so the offset option preserves them.
CSV columns containing free-text summaries retain
their recorded text; JSON/JSONL preserves nested parsed timestamps as structured fields.
UTC uses the existing parser output directly. An explicit nonzero offset adds a streaming formatting pass within each parser worker; it changes display values without changing evidence.
If an offset would move a timestamp outside years 0000–9999, that value keeps its original
explicit offset. Values with more than nine fractional digits also stay unchanged rather than
being rounded. Juntei records a warning in the parser's *-logs.txt file and converts the other
timestamps. Malformed CSV/JSON or an output error still fails the task and leaves the affected
original result file unchanged.
What it discovers¶
Juntei searches recursively for directories named Windows that contain a System32, Prefetch,
or AppCompat directory, case-insensitively. Recognizing the latter two also supports targeted
collections that contain only Prefetch or Amcache. This excludes user-profile directories such as
AppData\Roaming\Microsoft\Windows. Nested legacy installations such as
C:\Windows.old\Windows are assigned to the outer collected volume instead of becoming duplicate
computers. The default maximum depth is 10. This covers common Velociraptor paths such as:
Change the limit only when the collection is nested more deeply:
For each discovered system, the computer name is chosen in this order:
hostnamein the nearest ancestorclient_info.json(with its value retained asFQDNin the manifest).ComputerNamein a collectedSYSTEMregistry hive.- The nearest useful collection-directory name, with drive and Velociraptor
uploads/autoscaffolding skipped and a suffix such as_F.…removed.
Names are made safe for use as directory names. Duplicate names receive a numeric suffix in both
their output directory and Comp value so separate systems remain distinguishable in JSON.
The manifest keeps the hostname exactly as discovered in a separate Hostname field.
After listing the systems, auto-parse prints one Timezone: line directly above
Parser tasks. It shows the selected output timezone: UTC by default, or a value such as
UTC+09:00 when --timezone "+09:00" is used. The label is green and the value uses the
terminal's default text color, like the other summary values. -K, --no-color keeps the line plain.
Collected systems' time-zone configuration is available in the
System Information results.
Parsers it runs¶
One parser failing does not stop the others. auto-parse runs these jobs for every discovered
computer. Jobs use the same source-grouped commands as manual parsing, such as
parse-ntfs mft, parse-registry amcache, parse-ese srum, and parse-file prefetch:
- Amcache
$MFT$LogFileNTFS redo/undo records- Prefetch records and a separate Prefetch execution timeline
- USN Journal
$I30directory indexes$Bootboot sectors and$Secure:$SDSsecurity descriptors- SRUM
- User Access Logging (UAL)
- Web browser history, downloads, cookies and form history (Chromium- and Firefox-based browsers)
- Internet Explorer and legacy Edge's WebCache: history, downloads, cookies and cache entries
- Outlook PST, OST, MSG and OFT files: folders, items, recipients, attachments, contacts, calendar items and tasks
- LNK shortcuts
- Jump Lists
- ShimCache
- Persistence Hunter (131 cross-source persistence checks with allow/block profiles)
- Defender quarantine metadata
- Open and Save As dialog history
- all registry keys and values, including recoverable deleted data
- services, RecentDocs, TaskCache, SAM accounts, registry autostart locations, UserAssist, BAM, installed programs, MuiCache, ShellBags, and USB devices
- system information: names, Windows version, time zone, last shutdown, profiles and SIDs
- the audit policy: which security events the system was set to log
- boot configuration (BCD and BCD-Template)
- network profiles, interfaces, shares, port proxies and routes
- LSA secrets' names and times, and cached domain logons in use (nothing is decrypted)
Persistence Hunter retains every severity (--min-severity info), including partial allow matches.
LOW is a classification to investigate; missing signature metadata can produce it for malicious
commands too. The automatic inventory does not discard these entries using the manual command's
default medium threshold.
The hunter uses one worker inside each automatic parser process. This keeps auto-parse -T <N>
from multiplying its process budget by another CPU-sized pool in every child. Standalone
persistence-hunter -T <N> controls the hunter's own worker threads.
CSV $MFT output includes all timestamps and short names. Registry output includes raw data and a
FILETIME interpretation of REG_QWORD values. JSON and JSONL SRUM output includes value-state
metadata. Defender files and resident $MFT streams are not extracted automatically.
With --mft-slack, the $MFT output also includes the file names left in the slack of FILE
records, as parse-ntfs mft -x writes them: rows marked FromSlack in
CSV, and SlackFileNames in JSON and JSONL. --code-page applies to LNK files, Jump Lists,
ShellBags and OpenSaveMRU.
An artifact that was not collected is a normal skipped task, not a failure.
Output layout¶
Results are organized by computer and investigative category. Category directories use
PascalCase, such as Accounts and FileAndFolderOpening. Amcache and Jump Lists tables sit
directly in their categories with filename prefixes. Computer directory names retain their discovered spelling. Existing output
directories are not migrated; choose a new output directory when switching from the older naming. Each parser writes an
<artifact>-logs.txt file beside its results, including when the artifact was not collected.
CSV keeps separate tables because each artifact has different columns:
<OUTPUT>/
├── manifest.json
├── manifest.csv
├── HOST1/
│ ├── Accounts/
│ │ ├── Registry-LsaSecrets.csv
│ │ ├── Registry-LsaSecrets-logs.txt
│ │ ├── Registry-SAM.csv
│ │ └── Registry-SAM-logs.txt
│ ├── Applications/
│ │ ├── Registry-AppHistory.csv
│ │ ├── Registry-AppHistory-logs.txt
│ │ ├── Registry-InstalledPrograms.csv
│ │ └── Registry-InstalledPrograms-logs.txt
│ ├── BrowserActivity/
│ │ ├── Browser-Cookies.csv
│ │ ├── Browser-Downloads.csv
│ │ ├── Browser-FormHistory.csv
│ │ ├── Browser-History.csv
│ │ ├── Browser-logs.txt
│ │ ├── WebCache-Containers.csv
│ │ ├── WebCache-Cookies.csv
│ │ ├── WebCache-Downloads.csv
│ │ ├── WebCache-Entries.csv
│ │ ├── WebCache-History.csv
│ │ └── WebCache-logs.txt
│ ├── Communication/
│ │ ├── Outlook-Attachments.csv
│ │ ├── Outlook-Calendar.csv
│ │ ├── Outlook-Contacts.csv
│ │ ├── Outlook-Files.csv
│ │ ├── Outlook-Folders.csv
│ │ ├── Outlook-Items.csv
│ │ ├── Outlook-Recipients.csv
│ │ ├── Outlook-Tasks.csv
│ │ └── Outlook-logs.txt
│ ├── ExternalDevices/
│ │ ├── Registry-USB.csv
│ │ └── Registry-USB-logs.txt
│ ├── FileAndFolderOpening/
│ │ ├── JumpLists-AutomaticDestinations.csv
│ │ ├── JumpLists-CustomDestinations.csv
│ │ ├── JumpLists-logs.txt
│ │ ├── LNK.csv
│ │ ├── LNK-logs.txt
│ │ ├── Registry-Office.csv
│ │ ├── Registry-Office-logs.txt
│ │ ├── Registry-MRU.csv
│ │ ├── Registry-MRU-logs.txt
│ │ ├── Registry-OpenSaveMRU.csv
│ │ ├── Registry-OpenSaveMRU-logs.txt
│ │ ├── Registry-RecentDocs.csv
│ │ ├── Registry-RecentDocs-logs.txt
│ │ ├── Registry-ShellBags.csv
│ │ └── Registry-ShellBags-logs.txt
│ ├── FileExistence/
│ │ ├── Registry-Amcache-Devices.csv
│ │ ├── Registry-Amcache-Files.csv
│ │ ├── Registry-Amcache-Findings.csv
│ │ ├── Registry-Amcache-Summary.csv
│ │ ├── Registry-Amcache-logs.txt
│ │ ├── Registry-ShimCache.csv
│ │ └── Registry-ShimCache-logs.txt
│ ├── FileSystem/
│ │ ├── Boot.csv
│ │ ├── Boot-logs.txt
│ │ ├── I30.csv
│ │ ├── I30-logs.txt
│ │ ├── LogFile.csv
│ │ ├── LogFile-logs.txt
│ │ ├── MFT.csv
│ │ ├── MFT-logs.txt
│ │ ├── SecureSDS.csv
│ │ ├── SecureSDS-logs.txt
│ │ ├── UsnJournal.csv
│ │ └── UsnJournal-logs.txt
│ ├── NetworkActivity/
│ │ ├── Registry-Networks.csv
│ │ ├── Registry-Networks-logs.txt
│ │ ├── SRUM-NetworkConnections.csv
│ │ ├── SRUM-NetworkUsages.csv
│ │ └── SRUM-PushNotifications.csv
│ ├── LateralMovement/
│ │ ├── Registry-RemoteAccess.csv
│ │ ├── Registry-RemoteAccess-logs.txt
│ │ ├── UAL-Clients.csv
│ │ ├── UAL-RoleAccess.csv
│ │ ├── UAL-SystemIdentity.csv
│ │ └── UAL-logs.txt
│ ├── Persistence/
│ │ ├── Registry-BCD.csv
│ │ ├── Registry-BCD-logs.txt
│ │ ├── Registry-Persistence.csv
│ │ ├── Registry-Persistence-logs.txt
│ │ ├── Registry-Services.csv
│ │ ├── Registry-Services-logs.txt
│ │ ├── Registry-TaskCache.csv
│ │ └── Registry-TaskCache-logs.txt
│ ├── ProcessExecution/
│ │ ├── Registry-AppCompat.csv
│ │ ├── Registry-AppCompat-logs.txt
│ │ ├── Registry-FeatureUsage.csv
│ │ ├── Registry-FeatureUsage-logs.txt
│ │ ├── Registry-BAM.csv
│ │ ├── Registry-BAM-logs.txt
│ │ ├── Registry-MuiCache.csv
│ │ ├── Registry-MuiCache-logs.txt
│ │ ├── Prefetch.csv
│ │ ├── Prefetch-logs.txt
│ │ ├── PrefetchTimeline.csv
│ │ ├── PrefetchTimeline-logs.txt
│ │ ├── SRUM-AppResourceUseInfo.csv
│ │ ├── SRUM-AppTimelineProvider.csv
│ │ ├── Registry-UserAssist.csv
│ │ └── Registry-UserAssist-logs.txt
│ ├── Registry/
│ │ ├── Registry-Dump.csv
│ │ └── Registry-Dump-logs.txt
│ ├── SecurityProducts/
│ │ ├── Registry-SecuritySettings.csv
│ │ ├── Registry-SecuritySettings-logs.txt
│ │ ├── DefenderQuarantine.csv
│ │ ├── DefenderQuarantine-logs.txt
│ │ └── DefenderQuarantined/ # only with -x
│ └── SystemInformation/
│ ├── Registry-AuditPolicy.csv
│ ├── Registry-AuditPolicy-logs.txt
│ ├── Registry-SystemInfo.csv
│ ├── Registry-SystemInfo-logs.txt
│ ├── SRUM-IdentityMap.csv
│ ├── SRUM-VfuProvider.csv
│ └── SRUM-logs.txt
└── HOST2/
└── …
| Category | Artifacts |
|---|---|
Accounts |
SAM local accounts, LSA secrets' names and times |
Applications |
Application history (third-party tools' traces) |
Applications |
Installed programs |
BrowserActivity |
Web browser history, downloads, cookies and form history, with recovered deleted entries; Internet Explorer and legacy Edge's WebCache |
Communication |
Outlook PST, OST, MSG and OFT files: folders, items, recipients, attachments, contacts, calendar items and tasks |
ExternalDevices |
USB devices and volumes |
FileAndFolderOpening |
Jump Lists, LNK shortcuts, Microsoft Office, MRU lists, Open and Save As dialogs, RecentDocs, ShellBags |
FileExistence |
Amcache, ShimCache |
FileSystem |
$Boot, $I30, $LogFile, $MFT, $Secure:$SDS, USN Journal |
NetworkActivity |
Network profiles, interfaces, shares, port proxies and routes; SRUM connections, traffic and push notifications |
LateralMovement |
Users' outbound Remote Desktop, PuTTY and WinSCP connections, mapped drives and shares; User Access Logging (the clients of a server's roles) |
Persistence |
Boot configuration (BCD), registry autostarts, services, TaskCache |
ProcessExecution |
Application compatibility, BAM and DAM, FeatureUsage and pins, MuiCache, Prefetch, Prefetch timeline, SRUM application/CPU activity, UserAssist |
Registry |
General hive keys and values, including recovered records |
SecurityProducts |
Defender quarantine metadata and optional extracted content; security settings (Defender, UAC, credential protection, RDP, firewall, logging) |
SystemInformation |
Names, Windows version, time zone, last shutdown, profiles, SIDs and audit policy; SRUM energy/capacity, identity maps and unknown providers |
Categories help organize investigations; they are not proof of a particular activity. For example, Amcache and ShimCache entries alone do not establish execution. SRUM records resource usage; consult the artifact guide before drawing conclusions about a program running.
CSV, JSON, and JSONL use the same categories. One <artifact>-logs.txt file per parser job contains its
exact command and messages; for example, HOST1/FileSystem/MFT-logs.txt and
HOST1/ProcessExecution/Prefetch-logs.txt. JSON and JSONL use the same log filenames.
Amcache and Jump Lists each have one shared log beside their prefixed tables. SRUM provider tables are placed directly
in NetworkActivity, ProcessExecution and SystemInformation, with a shared
SystemInformation/SRUM-logs.txt file. No logs/ subdirectories are created.
Default CSV filenames are Registry-SAM.csv, LNK.csv, Registry-RecentDocs.csv, Registry-ShimCache.csv, LogFile.csv,
I30.csv, MFT.csv, UsnJournal.csv, Boot.csv, SecureSDS.csv, Registry-Networks.csv, Registry-Persistence.csv, Registry-Services.csv, Registry-TaskCache.csv, Registry-BCD.csv,
Registry-SecuritySettings.csv,
PrefetchTimeline.csv, Prefetch.csv, Registry-UserAssist.csv, Registry-AppCompat.csv, Registry-Office.csv, Registry-FeatureUsage.csv, Registry-AppHistory.csv, Registry-MRU.csv, Registry-SystemInfo.csv, Registry-RemoteAccess.csv, Registry-OpenSaveMRU.csv, Registry-InstalledPrograms.csv, Registry-BAM.csv, Registry-MuiCache.csv, Registry-ShellBags.csv, Registry-USB.csv, Registry-SecuritySettings.csv, Registry-AuditPolicy.csv, Registry-Dump.csv, and
DefenderQuarantine.csv. Registry-derived tables use the Registry- prefix, including
Registry-ShimCache.csv, Registry-UserAssist.csv, Registry-BAM.csv and Registry-SystemInfo.csv.
General hive keys and values are in Registry-Dump.csv. Amcache tables are
FileExistence/Registry-Amcache-Devices.csv, Registry-Amcache-Files.csv,
Registry-Amcache-Findings.csv and Registry-Amcache-Summary.csv. Jump Lists use
FileAndFolderOpening/JumpLists-AutomaticDestinations.csv and
JumpLists-CustomDestinations.csv. There are no Amcache or Jump Lists subdirectories.
SRUM tables use SRUM- filenames directly under their category, for example
NetworkActivity/SRUM-NetworkConnections.csv.
User Access Logging tables are in LateralMovement, one file per table, such as
UAL-Clients.csv and UAL-SystemIdentity.csv, with UAL-logs.txt; see
User Access Logging (UAL).
Web browser tables are in BrowserActivity: Browser-History.csv, Browser-Downloads.csv,
Browser-Cookies.csv and Browser-FormHistory.csv, with Browser-logs.txt; see
Web Browsers. Internet Explorer and legacy Edge's
WebCache tables are there too: WebCache-History.csv, WebCache-Downloads.csv,
WebCache-Cookies.csv, WebCache-Entries.csv and WebCache-Containers.csv, with
WebCache-logs.txt; see Internet Explorer and Legacy Edge.
Outlook tables are in Communication: Outlook-Files.csv, Outlook-Folders.csv,
Outlook-Items.csv, Outlook-Recipients.csv, Outlook-Attachments.csv, Outlook-Contacts.csv,
Outlook-Calendar.csv and Outlook-Tasks.csv, with Outlook-logs.txt; see
Outlook.
See the complete SRUM placement table.
Logs match the capitalized artifact name, such as Registry-SAM-logs.txt, PrefetchTimeline-logs.txt,
and Registry-UserAssist-logs.txt. JSON/JSONL files use the same stems, for example MFT.jsonl; the
record's Artifact identifier is mft for queries. Multi-table outputs have
Registry-Amcache-logs.txt or JumpLists-logs.txt beside their tables. The shared SRUM log is
in SystemInformation.
manifest.json records the original discovered Hostname, the unique output/record Comp
identity, hostname provenance, evidence paths, artifact Category, command lines, duration, exit
code, result path, log path, the requested JSONL timeline and any export error, whether Defender extraction was requested,
and whether each task
succeeded, was skipped, or failed.
Auto-parse writes no absolute path, so results can be shared without showing where the evidence, the results or Juntei are on the analysis system:
- Evidence paths are relative to the evidence directory. The terminal lists each computer with its
directory in the evidence (
HOST1: ./HOST1_F), and the parsers run in the evidence directory and are given such paths. The results' source path columns (SourceFile,SourcePath, …), the logs and the manifests'EvidenceRootandWindowsDirectoriesshow where each file is in the evidence (./HOST1_F/C/Windows/Prefetch/CMD.EXE-6D6290C5.pf). - The manifests' and logs' result paths (
Output,OutputFiles,Log,JSON-Timeline, the output paths inCommand) and Defender'sExtractedFileare relative to the output directory (./HOST1/ProcessExecution/Prefetch.csv,../siem.jsonlfor a timeline beside it).Commandstarts with the program's name (juntei); its evidence paths are relative to the evidence directory and its output paths to the output directory. EvidenceDirectoryandOutputDirectoryare the two directories' names.ManifestVersion2 marks manifests that record result paths from the output directory; earlier manifests have noManifestVersionand record them as given to-o. A-Crerun reads both.- The terminal shows an output or timeline path as given when it is relative, and from the
current directory when it is absolute (
../results/).
After the number of parallel processes, the terminal shows the total size of the files of the
Windows systems found (Total filesize: 26.1 MiB).
The progress message shows the active computer and artifact followed by an approximate input
size, for example HOST1 / prefetch (~2.0 MiB). A group of files uses their combined size; each
MFT, LogFile or USN Journal task shows its individual input size. Estimates exclude auxiliary transaction
logs and enrichment files and do not predict the size of the parsed output.
manifest.csv provides the same task index as a spreadsheet-friendly table, with one row per
parser task. It includes Comp, original Hostname, FQDN, HostnameSource, EvidenceRoot,
Artifact, Category, OutputType, Purpose, Status, DurationMs, ExitCode, Output, OutputFiles, Log,
Error, and Command. Purpose is artifact for the categorized results or json_timeline for
the additional native JSONL pass used with CSV. OutputType is the actual parser output format.
Command is a JSON array of the executable and its arguments, preserving spaces and quoting.
For SRUM, Output is the computer directory, OutputFiles is a JSON array of its exact
provider output paths, and Category names the shared log location (SystemInformation).
Files are categorized individually; OutputFiles also appears in the JSON manifest.
Filter Status to skipped or failed to find tasks requiring review; a skipped task's Error
may be empty, with the explanation in its Log file.
The terminal summary includes the total number and size of regular files currently beneath the
output directory, including both manifests, parser logs, and extracted files. Symbolic links are
not followed. Sizes scale automatically using the same formatter as Total filesize, with
units such as KiB, MiB, and GiB:
Amcache and SRUM tables use -Source1, -Source2, etc. when several source databases
were collected. The shared parser log records the original-to-final paths, and JSON/JSONL
records retain source provenance. CSV Amcache/Jump Lists tasks list their exact table paths in
manifest OutputFiles; their Output is the investigative category directory. JSON and JSONL
Amcache and Jump Lists exports are already single files named Registry-Amcache.json[l] and
JumpLists.json[l]. The combined -j timeline keeps the same record contents and Artifact values.
--clobber uses the preceding manifest to clear recorded outputs, including earlier names,
while preserving unrelated category files. A normal single-volume collection writes $MFT and USN Journal records directly to
FileSystem/MFT.csv and FileSystem/UsnJournal.csv. Additional collected volumes use numbered
sibling files such as FileSystem/MFT-2.csv and FileSystem/MFT-2-logs.txt.
JSON and SIEM ingestion¶
Every JSON or JSONL record receives two top-level fields:
Comp: the source system.Artifact: the Juntei parser that produced the record, such asmftorprefetch-timeline.
-j, --json-timeline <FILE> creates one additional JSONL file, regardless of the individual
result format. All categorized outputs and their logs are retained:
# Default CSV tables plus a SIEM timeline
juntei auto-parse -d evidence -o parsed -j parsed/timeline.jsonl
# Pretty JSON results plus a SIEM timeline
juntei auto-parse -d evidence -o parsed-json -t json -j parsed-json/timeline.jsonl
# Individual JSONL results plus a consolidated JSONL timeline
juntei auto-parse -d evidence -o parsed-jsonl -t jsonl -j parsed-jsonl/timeline.jsonl
The filename is used as supplied; relative paths are relative to the current working directory.
It may be in the output root, another non-reserved output subdirectory, or outside the output
directory. Evidence, manifests, per-computer results/logs, and temporary parser directories cannot
be used as the destination. An existing file requires -C; a failed export leaves it intact.
In CSV mode, Juntei performs an additional native JSONL pass so the SIEM file preserves
numeric and boolean types, nested data, raw fields, and metadata that CSV tables can omit. The
extra jobs share the same -T concurrency limit, do not extract quarantine contents again, and
have separate *-json-timeline-logs.txt sidecar logs. Both manifests distinguish their purpose and
output format. Temporary JSONL files are removed after a successful run; they are retained if a
parser or export fails. Plan for the extra processing time and temporary disk space.
In JSON mode, Juntei streams the existing results into compact JSONL without reparsing the evidence. Amcache reports are expanded into the same individual summary, finding, file, and device records as native JSONL. In JSONL mode, the existing annotated records are combined directly. All modes use the same SIEM record structure. The dataset keeps native timestamps and artifact fields; it does not invent a common event timestamp or globally sort heterogeneous artifacts.
jq -c 'select(.Comp == "HOST1" and .Artifact == "prefetch")' parsed/timeline.jsonl
jq -r 'select(.Artifact == "mft") | .FullPath? // empty' parsed/timeline.jsonl
manifest.json records the requested JSON-Timeline path and any JSON-TimelineError. Its task
records, and manifest.csv, still point to retained artifact outputs. Successful CSV timeline-only
jobs reference the final JSONL file instead of deleted temporary files. If any parser fails, the
run exits unsuccessfully and the timeline contains only successful results; inspect the manifests
and category logs before treating it as complete. The file-count/size summary covers files inside
the output directory; an external timeline is reported separately as JSONL timeline: <FILE>.
Performance¶
Parser jobs are separate processes, so CPU-heavy artifacts can run at the same time and damage in one parser cannot terminate the complete run. By default, Juntei uses the logical CPU count. Limit concurrency when evidence is on a slow disk or the system has little memory:
Usage¶
Version: 1.1.0 (CODE BLUE Release)
Yamato Security (https://github.com/Yamato-Security/juntei - @SecurityYamato)
Usage:
juntei auto-parse -d <EVIDENCE> -o <OUTPUT> [OPTIONS]
Input:
-d, --directory <EVIDENCE> Evidence directory containing one or more collected Windows systems
--max-depth <DEPTH> Maximum directory depth at which to discover a Windows directory [default: 10]
--vhdx Parse VHDX images natively on Linux, macOS and Windows (read-only; temporary disk space required)
--e01 Parse E01/Ex01 images natively (split images from their first segment; temporary disk space required)
--temp-dir <DIR> Directory for private image staging (default: output filesystem)
Output:
-o, --output <DIR> New directory in which to create per-computer results
-t, --output-type <TYPE> Output type: csv (default), json, or jsonl [default: csv]
-j, --json-timeline <FILE> Create a single JSONL timeline to import into a SIEM
-Z, --timezone <OFFSET> Display parsed timestamps using a fixed UTC offset (UTC by default) [default: +00:00]
-C, --clobber Overwrite outputs in an existing directory (never deletes unrelated files)
-x, --extract-defender-quarantined Extract Defender-quarantined files
Performance:
-T, --threads <N> Parser processes to run at once (default: logical CPU count)
Parsing:
--code-page <NUMBER> Windows code page for ANSI strings in LNK files, Jump Lists, ShellBags and OpenSaveMRU [default: 1252]
--mft-slack Recover the file names left in the slack of $MFT records
General Options:
-h, --help Show the help menu
Display Settings:
-K, --no-color Disable color output
-q, --quiet Quiet mode: do not display the launch banner
Use a new output directory when practical. -C removes or overwrites only the exact generated
targets for this run, so a now-missing artifact cannot leave a stale result. It does not delete
unrelated files or the complete output tree. It also removes each computer's
SecurityProducts/DefenderQuarantined/ directory, and the reserved defender-quarantined/
directory from the previous flat layout, before parsing, whether or not the new run uses -x.
Use a fresh output directory when switching from an older flat layout. Earlier CSV/JSON files are not relocated or deleted automatically.
Treat extracted Defender content as malware
-x, --extract-defender-quarantined writes quarantined content to disk under each computer's
SecurityProducts/DefenderQuarantined/ directory. Recovered binary streams end in .quarantined, and Juntei
removes execute permission. Each binary security descriptor also gets a readable .security_descriptor.txt
report with ownership, permissions and SDDL. Never execute recovered payloads. Use an isolated
analysis system and expect antivirus or EDR software to alert on or remove the recovered content.
See reading the recovered security descriptor for the report fields and their forensic limitations.
Auto-parse also reads users' remote connections (RDP, PuTTY, WinSCP and mapped drives).
Build a chronological super timeline¶
After parsing, use super-timeline to expand the recorded timestamps
into labeled events. Add --sort to sort them across computers and artifacts:
The existing -j, --json-timeline export remains a combined native-record JSONL file.
It preserves parser schemas; it does not expand timestamp fields or sort events. Keep it and
the individual parser results for evidence-level review.