Skip to content

.job-Dateien Forensik: Legacy-Aufgaben in Windows\Tasks

So lesen Sie alte .job-Dateien: fester und variabler Teil nach MS-TSCH, Trigger, letzte Ausführung als SYSTEMTIME in Ortszeit und .job-Dateien unter modernem Windows.

Veröffentlicht am 5 Min. Lesezeit

Kurz gesagt. .job-Dateien sind das Format von Task Scheduler 1.0 und liegen in C:\Windows\Tasks. Microsoft spezifiziert sie in MS-TSCH: ein fester Abschnitt von 68 Bytes (Versionen, Job-UUID, Priorität, Status, Flags, letzte Ausführung als SYSTEMTIME) und ein variabler Abschnitt (Befehl, Parameter, Arbeitsverzeichnis, Autor, Kommentar, Trigger). Unter modernem Windows sind sie selten, und genau deshalb verdient eine dort gefundene .job-Datei Aufmerksamkeit.

Dieser Artikel gehört zur Grundlagenserie, die mit dem Leitfaden zur Forensik geplanter Aufgaben beginnt.

Woher .job-Dateien stammen

ÄraPrimärer Aufgabenspeicher.job-Dateien
Windows 2000, XP, Server 2003C:\Windows\Tasks\*.jobJede Aufgabe
Vista, 7, Server 2008 (R2)XML in System32\Tasks + TaskCacheAufgaben, die über die 1.0-API oder at.exe angelegt werden, können aus Kompatibilitätsgründen zusätzlich eine .job erhalten
Windows 8 und neuerXML + TaskCacheUngewöhnlich; at.exe ist zugunsten von schtasks veraltet

Die Übersicht von Cyber Triage beschreibt dieselbe Entwicklung. Auf einem Rechner mit Windows 10 oder 11 bedeutet eine .job-Datei daher eines von dreien: eine sehr alte Anwendung, die noch die 1.0-Schnittstelle nutzt, ein Überbleibsel eines In-Place-Upgrades oder den bewussten Einsatz alter Werkzeuge. Nichts davon ist für sich genommen bösartig; alles davon sollte erklärt werden.

Das KapeFiles-Target ScheduledTasks sichert C:\Windows\Tasks\*.job und das Gegenstück unter Windows.old, zusammen mit SchedLgU.txt, dem Textprotokoll des 1.0-Schedulers.

Der Abschnitt fester Länge

MS-TSCH nennt ihn FIXDLEN_DATA. Die Dokumentation des Job-Dateiformats von libyal beschreibt ihn mit 68 Bytes:

OffsetGrößeFeldForensischer Nutzen
02ProduktversionBetriebssystem, das die Datei geschrieben hat (z. B. 0x0501 XP, 0x0600 Vista, 0x0a00 Windows 10)
22Version des Dateiformats
416Job-UUIDEindeutig pro Job
202Offset des AnwendungsnamensBeginn des variablen Abschnitts
222Offset der Trigger
244Anzahl und Intervall der Wiederholungsversuche bei Fehlern
284Leerlauf-Frist und Wartezeit
324PrioritätsklasseNormal, hoch, Leerlauf, Echtzeit
364Maximale Laufzeit (ms)
404Exit-CodeLetzter Exit-Code des Programms
444StatusBereit, wird ausgeführt, deaktiviert, noch nicht ausgeführt ...
484FlagsEnthält u. a. die Bits für deaktiviert und versteckt
5216Letzte AusführungSYSTEMTIME

Die Produktversion ist eine schnelle Herkunftsprüfung: Eine .job-Datei auf einem Windows-10-Rechner, deren Produktversion auf XP verweist, wurde vermutlich von anderswo kopiert und nicht lokal erstellt.

Die letzte Ausführungszeit

Die letzte Ausführungszeit ist eine SYSTEMTIME (Jahr, Monat, Wochentag, Tag, Stunde, Minute, Sekunde, Millisekunde), keine FILETIME. Sie enthält keine Zeitzone. Allgemein wird sie als Ortszeit behandelt, und die Dokumentation von libyal kennzeichnet das ausdrücklich als noch zu bestätigen. Halten Sie den Wert so fest, wie er gespeichert ist, benennen Sie die Annahme und belegen Sie ihn mit einer weiteren Quelle, bevor Sie eine Zeitachse darauf aufbauen. Ein Nullwert bedeutet, dass der Job nie ausgeführt wurde.

Der Abschnitt variabler Länge

Auf den festen Abschnitt folgen in dieser Reihenfolge:

  1. Anzahl laufender Instanzen.
  2. Anwendungsname (der Befehl), UTF-16 mit Längenpräfix.
  3. Parameter.
  4. Arbeitsverzeichnis.
  5. Autor.
  6. Kommentar.
  7. Benutzerdaten und reservierte Daten (undurchsichtige Blobs).
  8. Trigger: eine Anzahl, dann Trigger-Datensätze fester Größe mit Startdatum, Enddatum, Startzeit, Dauer, Intervall, Flags und einem Typ (einmalig, täglich, wöchentlich, monatlich, bei Leerlauf, beim Systemstart, bei Anmeldung).
  9. Optional eine Job-Signatur.

Trigger speichern Datumsangaben als getrennte Words für Jahr, Monat und Tag, ohne Zeitzone. Es gilt derselbe Vorbehalt wie oben: per Konvention Ortszeit.

Eine .job-Datei in der Praxis auswerten

Der Scheduled Tasks Parser extrahiert aus jeder .job-Datei: Befehl, Parameter, Arbeitsverzeichnis, Autor, Kommentar, Flags (deaktiviert, versteckt), Status, Exit-Code, die Trigger mit Start- und Enddatum sowie die letzte Ausführungszeit wie gespeichert, als Ortszeit gekennzeichnet. Die .job-Zeilen erscheinen neben den XML- und TaskCache-Aufgaben und sind als Legacy-Aktionen markiert, damit sie auf einem modernen System auffallen.

Fragen, die Sie jeder Datei stellen sollten:

  • Liegt der Befehl in einem für Benutzer beschreibbaren Pfad? Hier gilt dieselbe Regel wie bei XML-Aufgaben, siehe bösartige geplante Aufgaben erkennen.
  • Entspricht der Autor einem echten Konto? Wie das XML-Feld Author ist er Freitext.
  • Gibt es eine passende XML-Aufgabe? Unter Vista und 7 sollte ein über die Kompatibilitätsschicht registrierter Job eine haben. Eine .job ohne XML- oder TaskCache-Eintrag wurde nicht vom aktuellen Dienst registriert oder nur teilweise bereinigt.
  • Passen die Zeitstempel des Dateisystems dazu? Die $MFT-Zeiten der .job-Datei und von C:\Windows\Tasks selbst grenzen ihre Erstellung und letzte Änderung ein. Der Scheduler aktualisiert die Datei, wenn der Job läuft, daher folgt die Änderungszeit oft der letzten Ausführungszeit. Ein USN-Journal kann zeigen, wann die Datei erstellt oder gelöscht wurde.

Alte Werkzeuge und moderne Erkennung

at.exe existiert aus Gründen der Abwärtskompatibilität auch unter aktuellem Windows noch, ist aber veraltet; Microsoft verweist stattdessen auf schtasks. Taucht at.exe auf einer modernen Workstation in Ausführungsspuren auf (Prefetch, Amcache), ist das ungewöhnlich und sollte Anlass sein, C:\Windows\Tasks und den TaskCache nach Aufgabennamen im Stil von At1 zu durchsuchen.

FAQ

Was ist eine .job-Datei?

Eine binäre Datei für geplante Aufgaben, die von Task Scheduler 1.0 verwendet und in C:\Windows\Tasks abgelegt wird. Microsoft dokumentiert das Format in MS-TSCH als Abschnitt fester Länge, gefolgt von einem Abschnitt variabler Länge mit Befehl, Argumenten, Autor, Kommentar und Triggern.

Verwenden Windows 10 und 11 noch .job-Dateien?

Selten. Moderne Aufgaben bestehen aus XML plus TaskCache. Eine .job-Datei kann dennoch auftauchen, wenn Aufgaben über die alten Schnittstellen von Task Scheduler 1.0 oder den veralteten Befehl at registriert wurden, sowie auf Systemen, die von alten Versionen aktualisiert wurden. Sichern Sie C:\Windows\Tasks trotzdem.

Ist die letzte Ausführungszeit in einer .job-Datei UTC?

Sie wird als SYSTEMTIME-Struktur ohne Zeitzoneninformation gespeichert und gilt allgemein als Ortszeit. Die Dokumentation von libyal kennzeichnet das weiterhin als noch zu bestätigen, belegen Sie den Wert also mit weiteren Quellen, bevor Sie sich darauf stützen.

Verwandte Artikel

Schritt für Schritt: Task-XML, .job-Dateien und SOFTWARE-Hive im kostenlosen Browser-Parser auswerten, versteckte Tasks finden, Zeitzonen klären, exportieren.
Checkliste für bösartige geplante Aufgaben: beschreibbare Pfade, kodiertes PowerShell, LOLBins, SYSTEM, Zufallsnamen, versteckte Tasks, XML/Registry-Abweichungen.
Was der TaskCache-Schlüssel im SOFTWARE-Hive zu jeder geplanten Aufgabe speichert: Tree mit Id/Index/SD, Tasks-Werte, DynamicInfo, Actions, Triggers und Hash.