Protokolleinträge sortieren

Mit der Zeit musste ich leider feststellen, dass unterschiedliche Programme die einzelnen Ereignisse in einer Protokolldatei in unterschiedlicher Reihenfolge ausgeben. Die Ereignisanzeige in Microsoft Vista und Windows 2008 zum Beispiel sortiert beim Exportieren die Ereignisse in absteigender Reihenfolge von der höchsten zur niedrigsten EventRecordID. Mein eigenes Programm hingegen gibt die Ereignisse in der Reihenfolge wieder, wie es sie in der Datei findet. In den meisten Fällen wird dies in aufsteigender Reihenfolge von der niedrigsten zur höchsten EventRecordID sein. Allerdings lassen sich Protokolle auch in ihrer Größe beschränken; der älteste Teil wird dann bei Bedarf überschrieben. Die niedrigste EventRecordID findet man in diesem Fall mitten in der Datei. Wäre es nicht schön, wenn man diese Dateien einfach sortieren könnte?

Glücklicherweise ist die Protokolldatei bereits im XML Format. Es sollte also einfach sein, die einzelnen Einträge mit einer XML Transformation zu sortieren. Ein Artikel von Bob DuCharme führt gut in das Thema ein und enthält auch zahlreiche Code-Beispiele. Insbesondere das Beispiel xq437.xsl auf Seite 3 sah vielversprechend aus. Ich musste lediglich die Namen der XML-Elemente und den Namensraum etwas anpassen. Hier ist die fertige Transformation:

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:evtx="http://schemas.microsoft.com/win/2004/08/events/event">

<xsl:output method="xml" indent="yes" encoding="UTF-8"/> <xsl:strip-space elements="*" />

<xsl:template match="Events"> <xsl:copy> <xsl:apply-templates select="evtx:Event"> <xsl:sort select="evtx:System/evtx:EventRecordID" data-type="number" order="ascending"/> </xsl:apply-templates> </xsl:copy> </xsl:template> <xsl:template match="*"> <xsl:copy> <xsl:apply-templates/> </xsl:copy> </xsl:template> </xsl:stylesheet>

Sie sollten diese Transformation mit jedem XSLT Prozessor wie Sablotron, Xalan oder SAXON ausführen können. Da ich bereits die Programmbibliothek libxslt installiert hatte, konnte ich deren XSLT Prozessor xsltproc verwenden:

xsltproc evtxsort.xsl mylog.xml > mylog.sorted.xml

Die Protokolldatei ist jetzt übersichtlich mit Einrückungen formatiert und ihre Datensätze sind nach der EventRecordID in aufsteigender Reihenfolge sortiert.

Sie können diese Transformation leicht an Ihre eigenen Vorstellungen anpassen, zum Beispiel die Einträge in Absteigender Reihenfolge sortieren, oder nach der EventID (der Art des Ereignisses) sortieren, oder einen zusammenfassenden Bericht erstellen, usw. Den Möglichkeiten sind kaum Grenzen gesetzt.

Archiv

Impressum

Dieses Blog ist ein Projekt von:
Andreas Schuster
Im Äuelchen 45
D-53177 Bonn
impressum@forensikblog.de

Copyright © 2005-2012 by
Andreas Schuster
Alle Rechte vorbehalten.
Powered by Movable Type 5.12