Foton
1.38.0
Collect captures live host state into a hashed case package. Baseline snapshots
stable configuration for later comparison. Parse, Carve, and Analyze run only
against already-collected data so work is reproducible and testable.
Windows PowerShell 5.1 compatible for Collect and Baseline. Parse/Ca
Collect captures live host state into a hashed case package. Baseline snapshots
stable configuration for later comparison. Parse, Carve, and Analyze run only
against already-collected data so work is reproducible and testable.
Windows PowerShell 5.1 compatible for Collect and Baseline. Parse/Carve/Analyze
may require PowerShell 7; if they do, it will be stated on those commands.
Minimum PowerShell version
5.1
Installation Options
Owners
Copyright
(c) JDI Consulting. Licensed under the MIT License.
Package Details
Author(s)
- JDI Consulting
Tags
DFIR Forensics Windows Baseline SecurityAudit Triage
Functions
Get-FotonVersion Get-FotonPackage Invoke-FotonAnalysis New-FotonReport Invoke-FotonTriage New-FotonBaseline New-FotonBaselineReport New-FotonBaselineCompareReport Compare-FotonBaseline Invoke-FotonIocMatch ConvertFrom-FotonPrefetch ConvertFrom-FotonLnk ConvertFrom-FotonEvtx ConvertFrom-FotonJumplist ConvertFrom-FotonAmcache Invoke-FotonParse Invoke-FotonExternalParse Install-FotonTool New-FotonParseReport Invoke-FotonCarve
PSEditions
Dependencies
This module has no dependencies.
Release Notes
1.38.0: First published release flow. Tagging vX.Y.Z builds, tests, and publishes a GitHub release with the Collect and Baseline scripts, a workstation zip (analyze without cloning the repo), SHA256SUMS.txt, and build provenance attestations, and publishes the module to the PowerShell Gallery (Install-Module Foton). build/Build-Release.ps1 produces the same assets locally. Scripts remain unsigned; USAGE documents hash and attestation verification and ExecutionPolicy handling. 1.37.1: Banner Updated date comes from PrivateData.Foton.ReleaseDate (was a literal stuck at 08-22-2026); Get-FotonVersion returns ReleaseDate. Foton.cmd tools (list) shows the catalog again. Public docs refreshed for 1.37.x. 1.37.0: services.csv records ServiceDll for svchost-hosted services (path, ServiceDllSource, user-writable flag, signature, signer, SHA-256); per-user instances get the template DLL, marked Template:<name>. Analyze adds a user-writable ServiceDll to the High user-writable service finding, a Medium finding for NotSigned/HashMismatch ServiceDll, and stops excluding a per-user service install event when that instance has its own ServiceDll or the DLL is outside System32, user-writable, or unsigned. Collect schema 1.13.0. 1.36.0: Compose and tools. Install-FotonTool -Name EZTools|Chainsaw|<tool> -Path <folder> registers an existing install in tools.json (observed SHA-256, not verified; PATH untouched), including EZ Tools per-tool subfolders; Foton.cmd tools EZTools <dir>. RECmd runs with BatchExamples\DFIRBatch.reb (or Kroll_Batch.reb), else NoBatch. Chainsaw runs hunt with rules/sigma beside the binary, else NoRules (no more EVTX dump). Hayabusa writes UTC (-U). Tool stdout is captured; a missing .NET runtime is recorded as MissingRuntime. Each tool runs into a staging folder; earlier output is swapped out by folder rename only when the run produced files, otherwise it is kept and listed as Retained (SwapError if the rename fails). Tool arguments are quoted so case paths with spaces survive. Banner and Triage/Baseline version fallbacks read the manifest instead of stale literals. 1.35.0: Analyze accuracy. EvtxECmd suspicious-command matching only on command-bearing events (4688, Sysmon 1, 4104, 4697, 7045, 4698, 4702), so lsass.exe as the image of 4673/4674 no longer counts; EvtxECmd rows inside the collection window are excluded from path/pattern counts with an Info methodology finding; the CSV is streamed. Service installs (native 7045 and EvtxECmd 4697/7045) exclude per-user service instances (Name_<hex>) and name the services; title no longer claims the collection window. Account findings separate create-then-delete within 60 s (Low) from persistent accounts and privileged group adds (Medium); adds to the default primary group are not privilege changes. Host baseline says days since last boot includes sleep/hibernation. New Low finding when Sysmon is set to Auto but not running; new Info finding listing Partial/Failed collection tasks. 1.33.0: Collect correctness from a real before/after-BIOS case. Loaded registry hives (SYSTEM, SOFTWARE, DEFAULT, signed-in users NTUSER/UsrClass) are exported with reg save instead of a FileShare copy that always failed; SAM and SECURITY are recorded as NotCollectedByDesign. Copy tasks report Partial/Failed (manifest, coverage, errors) instead of Good when files were not captured. Prefetch copy cap 200 -> 1024. Profile scans skip earlier Foton case folders. Local group membership falls back to ADSI on error 1789. os_info adds SMBIOS version, BIOS release date, EC version; boot_and_firmware adds Firmware-class devices (staged UEFI updates). Collect schema 1.12.0. 1.32.0: Collect -Deep opt-in (forces FileTimeline + UsnJournal; adds task_action_scripts, pnp_devices, driverstore_inventory, gpresult_html with raised budgets and 2 GiB free-space gate). Collect schema 1.11.0. 1.31.0: Analyze/Collect accuracy - local group enum errors no longer look empty; scheduled-task UserWritableTarget probes Arguments; firewall/Sysmon bool comparisons fixed; -enc pattern uses word boundaries; unreadable Defender exclusions are Info visibility gaps; PowerShell operational Highs exclude collector window. 1.30.0: Baseline operator path - Compare writes baseline_diff.csv; findings cite provider FalsePositives; Analyze lifts all High-attention baseline_diff rows with FP notes; USAGE temporal and fleet recipes. 1.29.0: Invoke-FotonAnalysis ingests PECmd and EvtxECmd compose CSV (coverage, user-writable path references, high-attention EventIds 1102/104/4697/7045/4698, and suspicious-command matches on ExecutableInfo); findings cite the tool. Chainsaw ingest still open. 1.28.0: Install-FotonTool + Foton.cmd tools provision pinned Hayabusa into %LOCALAPPDATA%\Foton\tools (tools.json); compose resolves -ToolPath then manifest then PATH and never mutates PATH; inventory/report carry tool Version and RulesVersion; NotOnPath points at Install-FotonTool. 1.27.0: External tools now run with their own install directory as the working directory, fixing Hayabusa reporting missing rules/config. Hayabusa hits caused by the Foton collection itself are attributed (collection window from collection.log, plus rows naming a Foton function) and excluded from the severity bands, with an Info methodology finding - on a real package this cut 350 medium-level hits to 60. Fix Defender AMSI blocking the Collect flatten as Trojan:PowerShell/PSAttackTool.A - the embedded suspicious-command pattern list is no longer inlined into dist. Collectors stop interpreting: SuspiciousHits/SuspiciousCmdHits are written empty and Analyze derives them from the raw Command/Actions/CommandLine columns, with an Info visibility-gap finding when no pattern list is loaded. New build/Test-FotonAmsiLoad.ps1 runs an AMSI load check in both flatten builds, since ParseFile never invokes AMSI. 1.26.0: ZIP analyze writes <zip-stem>_Report.html/_findings.csv beside the ZIP; New-FotonReport returns its path. Detect and skip packages that contain a copy of themselves. Analyze says when it is reproducing the endpoint Collect report. Hayabusa v4 (dfir-timeline, -w) supported and hits are banded by level with rule names instead of one generic row.
FileList
- Foton.nuspec
- Foton.cmd
- src\Private\Core\Get-FotonReportMarkSvg.ps1
- src\Private\Patterns\SuspiciousCommandPatterns.txt
- src\Public\Report\New-FotonReport.ps1
- Foton.psd1
- src\Private\Core\Get-FotonReportNavCss.ps1
- src\Private\Patterns\UserWritablePatterns.txt
- src\Public\Report\README.md
- Foton.psm1
- src\Private\Core\Get-FotonSafeHash.ps1
- src\Private\Schema\README.md
- src\Private\Baseline\Providers\ActiveSetup.ps1
- LICENSE
- src\Private\Core\Get-FotonSignatureInfo.ps1
- src\Private\Tools\ConvertTo-FotonCommandLine.ps1
- src\Private\Baseline\Providers\AppInitDll.ps1
- README.md
- src\Private\Core\Get-FotonStartupApprovedRows.ps1
- src\Private\Tools\Find-FotonComposeSupport.ps1
- src\Private\Baseline\Providers\Autorun.ps1
- SECURITY.md
- src\Private\Core\Get-FotonStartupApprovedState.ps1
- src\Private\Tools\FotonToolCatalog.json
- src\Private\Baseline\Providers\BitsJob.ps1
- dist\Foton-Baseline.ps1
- src\Private\Core\Get-FotonTaskActionScriptPath.ps1
- src\Private\Tools\Get-FotonToolCatalog.ps1
- src\Private\Baseline\Providers\Certificate.ps1
- dist\Foton-Collect.ps1
- src\Private\Core\Get-FotonUserHiveRoot.ps1
- src\Private\Tools\Get-FotonToolRoot.ps1
- src\Private\Baseline\Providers\CmdAutoRun.ps1
- docs\CARVE.md
- src\Private\Core\Get-FotonUserProfile.ps1
- src\Private\Tools\Register-FotonLocalTool.ps1
- src\Private\Baseline\Providers\DefenderPreference.ps1
- docs\USAGE.md
- src\Private\Core\Get-FotonWinEvent.ps1
- src\Private\Tools\Resolve-FotonExternalTool.ps1
- src\Private\Baseline\Providers\Driver.ps1
- src\README.md
- src\Private\Core\Get-FotonWinsockPackedPath.ps1
- src\Public\Analyze\Invoke-FotonAnalysis.ps1
- src\Private\Baseline\Providers\FirewallRule.ps1
- tools\Invoke-FotonEasy.ps1
- src\Private\Core\Import-FotonPackageData.ps1
- src\Public\Analyze\Invoke-FotonIocMatch.ps1
- src\Private\Baseline\Providers\HardeningRegistry.ps1
- src\Public\Get-FotonPackage.ps1
- src\Private\Core\Initialize-FotonCase.ps1
- src\Public\Analyze\README.md
- src\Private\Baseline\Providers\HostsEntry.ps1
- src\Public\Get-FotonVersion.ps1
- src\Private\Core\Initialize-FotonSession.ps1
- src\Public\Baseline\Compare-FotonBaseline.ps1
- src\Private\Baseline\Providers\ImageFileExecution.ps1
- src\Public\Install-FotonTool.ps1
- src\Private\Core\Invoke-FotonCollection.ps1
- src\Public\Baseline\New-FotonBaseline.ps1
- src\Private\Baseline\Providers\InstalledSoftware.ps1
- src\Public\Invoke-FotonTriage.ps1
- src\Private\Core\Mount-FotonOfflineUserHive.ps1
- src\Public\Baseline\README.md
- src\Private\Baseline\Providers\KnownDll.ps1
- src\Private\Analyze\Get-FotonEventSummaryHelpers.ps1
- src\Private\Core\README.md
- src\Public\Carve\Invoke-FotonCarve.ps1
- src\Private\Baseline\Providers\Listener.ps1
- src\Private\Core\Add-FotonFinding.ps1
- src\Private\Core\Register-FotonBaselineProvider.ps1
- src\Public\Carve\README.md
- src\Private\Baseline\Providers\LocalAccount.ps1
- src\Private\Core\ConvertFrom-FotonFileTimeUtc.ps1
- src\Private\Core\Resolve-FotonSuspiciousHits.ps1
- src\Public\Collect\Invoke-FotonEventLogCollection.ps1
- src\Private\Baseline\Providers\LocalGroupMember.ps1
- src\Private\Core\ConvertTo-FotonObservationHtml.ps1
- src\Private\Core\Save-FotonRegistryHive.ps1
- src\Public\Collect\Invoke-FotonFilesystemCollection.ps1
- src\Private\Baseline\Providers\LsaPackage.ps1
- src\Private\Core\ConvertTo-FotonSafeHtml.ps1
- src\Private\Core\Test-FotonCaseOutputPath.ps1
- src\Public\Collect\Invoke-FotonNetworkCollection.ps1
- src\Private\Baseline\Providers\MachineEnvironment.ps1
- src\Private\Core\ConvertTo-FotonSample.ps1
- src\Private\Core\Test-FotonCollectorAttributedEvent.ps1
- src\Public\Collect\Invoke-FotonPersistenceCollection.ps1
- src\Private\Baseline\Providers\NetshHelper.ps1
- src\Private\Core\Copy-FotonCappedHostFileList.ps1
- src\Private\Core\Test-FotonDeepDiskBudget.ps1
- src\Public\Collect\Invoke-FotonProcessCollection.ps1
- src\Private\Baseline\Providers\NetworkShare.ps1
- src\Private\Core\Copy-FotonCappedHostFiles.ps1
- src\Private\Core\Test-FotonElevated.ps1
- src\Public\Collect\Invoke-FotonSecurityCollection.ps1
- src\Private\Baseline\Providers\PrintMonitor.ps1
- src\Private\Core\Copy-FotonHostFile.ps1
- src\Private\Core\Test-FotonIsFalse.ps1
- src\Public\Collect\Invoke-FotonSoftwareCollection.ps1
- src\Private\Baseline\Providers\ProxyConfig.ps1
- src\Private\Core\Copy-FotonHostFileFamily.ps1
- src\Private\Core\Test-FotonPathAccessible.ps1
- src\Public\Collect\Invoke-FotonSystemCollection.ps1
- src\Private\Baseline\Providers\RemoteAccessConfig.ps1
- src\Private\Core\Dismount-FotonOfflineUserHive.ps1
- src\Private\Core\Test-FotonSuspiciousCommand.ps1
- src\Public\Collect\Invoke-FotonUserCollection.ps1
- src\Private\Baseline\Providers\ScheduledTask.ps1
- src\Private\Core\Get-FotonArtifactPath.ps1
- src\Private\Core\Test-FotonUserWritablePath.ps1
- src\Public\Collect\README.md
- src\Private\Baseline\Providers\Service.ps1
- src\Private\Core\Get-FotonBamDamRows.ps1
- src\Private\Core\Write-FotonBanner.ps1
- src\Public\Parse\ConvertFrom-FotonAmcache.ps1
- src\Private\Baseline\Providers\SessionManager.ps1
- src\Private\Core\Get-FotonBaselineChangeSeverity.ps1
- src\Private\Core\Write-FotonChainOfCustody.ps1
- src\Public\Parse\ConvertFrom-FotonEvtx.ps1
- src\Private\Baseline\Providers\SilentProcessExit.ps1
- src\Private\Core\Get-FotonBaselineJsonPath.ps1
- src\Private\Core\Write-FotonCollectionCoverage.ps1
- src\Public\Parse\ConvertFrom-FotonJumplist.ps1
- src\Private\Baseline\Providers\StartupApproved.ps1
- src\Private\Core\Get-FotonCloudJoinRows.ps1
- src\Private\Core\Write-FotonPackageFiles.ps1
- src\Public\Parse\ConvertFrom-FotonLnk.ps1
- src\Private\Baseline\Providers\StartupFile.ps1
- src\Private\Core\Get-FotonCollectionWindow.ps1
- src\Private\Core\Write-FotonStatus.ps1
- src\Public\Parse\ConvertFrom-FotonPrefetch.ps1
- src\Private\Baseline\Providers\SystemBinary.ps1
- src\Private\Core\Get-FotonCopyTaskStatus.ps1
- src\Private\Parse\ConvertFrom-FotonDestListBytes.ps1
- src\Public\Parse\Invoke-FotonExternalParse.ps1
- src\Private\Baseline\Providers\TimeProvider.ps1
- src\Private\Core\Get-FotonLocalGroupMemberAdsi.ps1
- src\Private\Parse\Get-FotonLnkParseFromBytes.ps1
- src\Public\Parse\Invoke-FotonParse.ps1
- src\Private\Baseline\Providers\UserAutorun.ps1
- src\Private\Core\Get-FotonOneDriveTeamsRows.ps1
- src\Private\Parse\Get-FotonOleCompoundStreams.ps1
- src\Public\Parse\README.md
- src\Private\Baseline\Providers\WdacApplockerPolicy.ps1
- src\Private\Core\Get-FotonPatternLines.ps1
- src\Private\Parse\Get-FotonRegfHiveWalk.ps1
- src\Public\Report\New-FotonBaselineCompareReport.ps1
- src\Private\Baseline\Providers\Winlogon.ps1
- src\Private\Core\Get-FotonRegValue.ps1
- src\Private\Patterns\HardeningRegistryChecks.csv
- src\Public\Report\New-FotonBaselineReport.ps1
- src\Private\Baseline\Providers\WinsockLsp.ps1
- src\Private\Core\Get-FotonRegValueList.ps1
- src\Private\Patterns\README.md
- src\Public\Report\New-FotonParseReport.ps1
- src\Private\Baseline\Providers\WmiPermanentEvent.ps1
- src\Private\Patterns\RemoteAccessToolNames.txt
Version History
| Version | Downloads | Last updated |
|---|---|---|
| 1.38.2 | 12 | 11/8/2026 |
| 1.38.1 | 12 | 11/6/2026 |
| 1.38.0 (current version) | 12 | 11/6/2026 |