Cmd ploppt auf und verschwindet instant wieder?


12.05.2025, 20:51

weis irgendjemand was die alle bedeuten?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Von einem Programm/Script, welches sich öffnet und gleich wieder schließt bekommt man im Taskmanager (in der Regel) nichts zu sehen.

Werden irgendwelche Scripte in cmd oder powershell ausgeführt, bekommt AV-Software oft auch nichts mit (solange die Scripte keine auffälligen Techniken verwenden).

Ich hatte schon öffter Fragen zu sporadisch öffnenden cmd/powershell -Fenstern. Solche "aufflackernden" Fenster lassen sich mit herkömmlichen Mitteln nur selten dingfest machen. um derartiger "Übeltäter" habhaft zu werden, habe ich mir ein kleines Script gebastellt, welches auf Programmstart/-schließen -Systemereignisse lauert und diese in seinem Fenster und Logdateien aufzeichnet .

ProcWatch.cmd

# : Begin of batch section
@echo off
pushd "%~dp0"
set "thisPath=%~f0" 
start "ProcessWatcher" powershell "&([Scriptblock]::Create((gc '%thisPath%' -enc UTF8 -raw )))"    &rem führe diese Datei in Powershell aus
exit /b
: End of batch sec<tion#>

$queryProcessStart = "SELECT * FROM __InstanceCreationEvent WITHIN 0.1 WHERE TargetInstance ISA 'Win32_Process'"
$queryProcessClose = "SELECT * FROM __InstanceDeletionEvent WITHIN 0.1 WHERE TargetInstance ISA 'Win32_Process'"

$Start_Action = {
  $ProcName = $event.SourceEventArgs.NewEvent.TargetInstance.Name
  $ProcCreated = $event.SourceEventArgs.NewEvent.TargetInstance.CreationDate
  $ProcCmdLine = $event.SourceEventArgs.NewEvent.TargetInstance.CommandLine
  $LogString ='Start Process: "{1}" starttime: @{0:dd.MM.yyyy HH:mm:ss,ffffff} commandline: {2}' -f $ProcCreated,$ProcName,$ProcCmdLine
  write-host $LogString -fo green
  $LogString | Out-File 'procStarts.txt' -Append
}

$Close_Action = {
  $ProcName = $event.SourceEventArgs.NewEvent.TargetInstance.Caption
  $ProcCreated = $event.SourceEventArgs.NewEvent.TargetInstance.CreationDate
  $EventTime=[DateTime]::FromFileTime($event.SourceEventArgs.NewEvent.TIME_CREATED)
  $LogString ='Close Process: "{1}" starttime: @{0:dd.MM.yyyy HH:mm:ss,ffffff} approx.closetime: @{2:dd.MM.yyyy HH:mm:ss,ff}' -f $ProcCreated,$ProcName,$EventTime
  write-host $LogString -fo yel
  $LogString | Out-File 'procCloses.txt' -Append
}

$null = Register-CimIndicationEvent -Query $queryProcessStart -Action $Start_Action
$null = Register-CimIndicationEvent -Query $queryProcessClose -Action $Close_Action
Write-Host 'waiting for process-events ...'
while ($True) {Wait-Event}

Bei einem Programmstart wird auch dessen Kommandozeile gelistet, so das auch ersichtlich ist, mit welchen Parametern Programme starten. Dazu gehören auch eventuelle Namen von Scripten oder Powershell-Einzeiler.das sieht dann so aus.

Start Process: "powershell.exe" starttime: @13.05.2025 09:01:25,295540  commandline: powershell  -WindowStyle hidden "&([Scriptblock]::Create((gc 'C:\Users\Erzesel Secure\Desktop\clock.cmd' -enc UTF8 -raw )))"

...und für das Beenden des Prozesses:

Close Process: "powershell.exe" starttime: @13.05.2025 09:01:25,295540 approx.closetime: @13.05.2025 09:01:34,97

Da dieses Script normalerweise mit Nutzerrechten ausgeführt wird, hat es keinen Einblick bezüglich der Kommandozeilen von Prozessen auf Admin- oder Systemlevel.

Aus technischen Gründen (und der Einfacheit halber) verwende ich für öffnen und schließen getrennte Logs, um zu vermeiden, das sich nahezu gleichzeitige Ereignisse die jeweils andere Ereignisroutine blockieren.

Da in beiden Logs sie Startzeiten auf Microsekunden genau angegeben sind, kann man relativ leicht ermitteln was zueinander gehört.

Ich hoffe dies bringt Dir etwas Erleuchtung welche Prozesse auf Deinem Rechner ihr "Unwesen" treiben.

Woher ich das weiß:eigene Erfahrung – Ich mach das seit über 30 Jahren