Skip to content

TheRemote/PSEndpointForensics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

PSEndpointForensics

PSEndpointForensics

A PowerShell-based endpoint forensics tool that provides a graphical interface for investigating Windows systems. It collects and displays data across seven focused views, helping analysts quickly identify indicators of compromise, suspicious persistence, and unusual network activity.

Author: James A. Chambers

Overview

PSEndpointForensics aggregates forensic-relevant data from a living Windows system and presents it in a tabbed WinForms GUI. The tool filters out default Windows components to surface third-party services, scheduled tasks, and processes — then supplements that view with registry persistence artifacts and live network connection data, including async DNS resolution.

Full blog post available at https://jamesachambers.com/psendpointforensics-fast-windows-triage-without-the-noise/

Features

Non-default Services

PSEndpointForensics Services Tab

Enumerates all installed Windows services via WMI (win32_service) and filters out built-in Windows, Edge, and gaming services. Displays the following columns for each remaining service:

  • Name – Service identifier
  • ProcessId – Associated PID
  • StartMode – Startup type (Automatic, Manual, Disabled)
  • State – Running or Stopped
  • Status – Operational state
  • AcceptStop – Whether the service accepts a stop request
  • Caption – Display name
  • Description – Service description
  • PathName – Full executable path

Non-default Scheduled Tasks

Queries all registered scheduled tasks using Get-ScheduledTask and excludes \Microsoft\Windows* paths and Microsoft Edge/Xbox tasks. Displays:

  • TaskName – Scheduled task name
  • TaskPath – Task folder path
  • Author – Task creator
  • State – Current state (Ready, Running, Disabled)
  • Date – Last modification date
  • Triggers – Trigger collection (schedule, event-based, etc.)
  • Description – Task description

Non-default Processes

PSEndpointForensics Processes Tab

Lists all running processes, excludes Microsoft-signed OS components and well-known system processes, and enriches each entry with the full command line from WMI (Win32_Process). Displays:

  • Name – Process executable name
  • Id – Process ID
  • Company – Product company
  • Path – Executable file path
  • Description – Product description
  • MainWindowTitle – Main window title (if applicable)
  • Product – Product name
  • CommandLine – Full command-line arguments (via CIM/WMI)

Persistence Registry

Scans well-known Windows registry persistence locations for autorun and startup entries. Covers these hives and keys:

Registry Path Purpose
HKLM\...\CurrentVersion\Run System-wide autorun
HKLM\...\CurrentVersion\RunOnce One-time system autorun
HKCU\...\CurrentVersion\Run User-level autorun
HKCU\...\CurrentVersion\RunOnce One-time user autorun
HKLM\...\CurrentVersion\RunOnceEx Advanced one-time autorun
HKLM/HKCU\...\Policies\Explorer\Run Group Policy-run keys
HKLM\...\Wow6432Node\...\Run / RunOnce 32-bit autorun on 64-bit systems
HKLM\...\Winlogon Userinit / Shell hijack detection
HKLM\...\Image File Execution Options IFEO debugger injection (per child key)
HKLM\...\Session Manager BootExecute, SafeBoot, PendingFileRenameOperations, Execute

Each discovered entry reports the hive, full path, value name, and value data.

TCP

PSEndpointForensics TCP Tab

Shows all established TCP connections with local/remote address and port, connection state, owning process ID, and resolved process name. Includes a Resolve DNS button that performs asynchronous reverse-DNS lookups on all remote IPs (excluding 127.0.0.1) using background jobs, appending the hostname directly to the grid cell.

UDP

Lists all active UDP endpoints (excluding system PID 4) with local address, local port, owning process ID, and process name.

TCP Listen

PSEndpointForensics TCP Listen Tab

Displays all TCP sockets in the LISTEN state, showing the local port, owning process ID, and process name — useful for identifying services waiting for inbound connections.

Requirements

  • Operating System: Windows 10/11 or Windows Server (2016+)
  • PowerShell: 5.1 (Windows PowerShell) or PowerShell 7+
  • Execution: Must be run with administrative privileges for full access to WMI, registry hives, and network connection data
  • Dependencies: None — uses only built-in PowerShell cmdlets and .NET Framework assemblies (System.Windows.Forms, System.Drawing)

Usage

Quick Start

# Open an elevated PowerShell session, then:
.\PSEndpointForensics.ps1

A GUI window will appear with seven tabs. Data is collected at launch — progress is shown in the console as each category loads.

DNS Resolution

On the TCP tab, click the Resolve DNS button to perform reverse-DNS lookups against all remote IP addresses. Resolved hostnames are appended in parentheses next to the IP address column. The button is disabled while resolution is in progress.

Grid Interaction

All data grids support the following:

  • Column reordering – drag column headers to rearrange
  • Auto-resize – columns auto-fit when switching tabs
  • Sorting – network tabs sort by local address on load; all grids can be sorted by clicking column headers

Tab Reference

Tab Data Source Key Cmdlets
Non-default Services Installed services (non-Windows) Get-WmiObject win32_service
Non-default Scheduled Tasks Third-party scheduled tasks Get-ScheduledTask
Non-default Processes Running third-party processes Get-Process, Get-CimInstance Win32_Process
Persistence Registry Autorun and startup registry keys Get-ItemProperty, Test-Path
TCP Established TCP connections Get-NetTCPConnection
UDP Active UDP endpoints Get-NetUDPEndpoint
TCP Listen TCP listener sockets Get-NetTCPConnection

Architecture

PSEndpointForensics.ps1
├── Get-NetworkConnections()          # TCP, UDP, TCP listener collection
│   ├── Pre-fetches process name map
│   ├── Queries Get-NetTCPConnection (Established + Listen)
│   └── Queries Get-NetUDPEndpoint
│
├── Get-PersistenceRegistryKeys()     # Registry persistence scan
│   ├── Iterates known autorun paths
│   ├── Enumerates IFEO child keys
│   └── Checks Session Manager + Winlogon values
│
└── WinForms GUI                      # Seven-tab interface
    ├── Tab 1: Non-default Services (DataGridView)
    ├── Tab 2: Non-default Scheduled Tasks (DataGridView)
    ├── Tab 3: Non-default Processes (DataGridView)
    ├── Tab 4: Persistence Registry (DataGridView)
    ├── Tab 5: TCP (DataGridView + DNS resolve button)
    ├── Tab 6: UDP (DataGridView)
    └── Tab 7: TCP Listen (DataGridView)

Notes

  • The tool is designed for authorized, defensive use — use only on systems you own or have explicit permission to investigate.
  • DNS resolution may take several seconds depending on the number of established connections and network latency. Unreachable IPs will show "Unable to resolve".
  • The process filtering lists are heuristic-based and focus on excluding Microsoft/Windows default components. Adjust the filter lists in the script if your environment has additional trusted processes you wish to exclude (or include).
  • The tool collects a point-in-time snapshot — data reflects the system state at the moment the script runs.

About

PSEndpointForensics is a lightweight PowerShell triage tool for Windows that quickly surfaces suspicious services, processes, persistence mechanisms, and network activity in a clean tabbed GUI. No dependencies, no install—just run a single script and start investigating.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors