Substitution

Der Mechanismus der "Substitution" ermöglicht es, die XML Struktur von den eigentlichen Inhalten zu trennen. Die veränderlichen Daten werden dabei in eine Tabelle, das Substitution Array, ausgelagert. Platzhalter im XML-Datenstrom, die beiden NormalSubstitution und OptionalSubstitution genannten Token, stellen dann die Verbindung her.

Um beim Beispiel aus dem letzten Beitrag zu bleiben:

<EventID>1234</EventID>

Diese kurze XML-Sequenz wurde codiert als:

0x0f 0x01 EventID 0x02 1234 0x04 0x00

Der darin enthaltene Werte, die EventID, ist eine vorzeichenlose 16bit-Ganzzahl. Der interne Code für diesen Datentyp ist 0x06. Dieser Wert soll nun auf Speicherplatz Nr. 3 (die Zählung beginnt bei 0) des Substitution Arrays abgelegt werden.

Das Substitution Array enthält alle variablen Daten

Jetzt wird der Wert innerhalb der XML-Sequenz durch einen Platzhalter ersetzt, das NormalSubstitution Token. Auf das Token folgt dabei als DWORD die Nummer des Speicherplatzes und der Datentyp.

0x0f 0x01 EventID 0x02 0x0d 0x0003 0x06 0x04 0x00

Ein NormalSubstitution Token fügt den Wert aus dem entsprechenden Speicherplatz des Substitution Arrays in den Datenstrom ein, ohne dass weitere Bedingungen erfüllt sein müssten. In den frühen Beta-versionen von Vista war dies das normale Vorgehen, daher der Name NormalSubstitution. In der Endfassung ist es jedoch eher die Ausnahme, denn gewöhnlich kommt jetzt das OptionalSubstitution Token zum Einsatz.

Im Fall der OptionalSubstitution wird zunächst der im jeweiligen Speicherplatz des Substitution Arrays hinterlegte Datentyp überprüft. Ist er verschieden von TypeNull (0x00), dann verhält sich die OptionalSubstitution wie eine NormalSubstitution. In der Codierung ändert sich übrigens nur das Token:

0x0f 0x01 EventID 0x02 0x0e 0x0003 0x06 0x04 0x00

Handelt es sich allerdings um TypeNull, dann wird das gesamte Element unterdrückt, das die Substitution beinhaltet. Im oben genannten Beispiel wäre dies das <EventID> Element.

12.08.2007: Zwei Tippfehler in den Codeauszügen korrigiert.

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.