Welche Techniken zur Extraktion von Daten aus WebAssembly (WASM)-Modulen sind verfügbar, wenn die Daten nicht im DOM landen?

Die Extraktion von Daten aus WebAssembly (WASM)-Modulen erfolgt primär über den Zugriff auf den linearen Speicher, da WASM keinen direkten Zugriff auf JavaScript-Objekte besitzt. Wenn Daten nicht im DOM landen, verbleiben sie im WebAssembly.Memory-Objekt, das als ArrayBuffer implementiert ist.

Wir unterscheiden dabei folgende technische Ansätze:

TechnikFunktionsweiseKomplexität
Direct Memory AccessZugriff auf WebAssembly.Memory.buffer via TypedArraysGering
Exported FunctionsAbfrage von Pointern und Längen via exportierten FunktionenMittel
Import HookingInterzeption von JS-Funktionen im importObjectHoch
Memory DumpingSnapshot des gesamten Speicherbereichs zur Offline-AnalyseGering

Beim Direct Memory Access greifen wir direkt auf den Buffer des Memory-Objekts zu. Da die Daten dort als binärer Stream vorliegen, müssen wir die Speicherstruktur (Offsets und Datentypen) kennen, um die Werte korrekt zu interpretieren. Dies erfordert oft die Analyse der .wat-Datei oder den Einsatz von Debugging-Tools, um die Speicherbelegung zu identifizieren.

Über Exported Functions stellt das Modul Funktionen bereit, die Speicheradressen (Pointer) zurückgeben. Wir nutzen diese Adressen, um gezielt Teilbereiche des Buffers auszulesen. Dies ist der präziseste Weg, sofern das Modul diese Schnittstellen explizit bereitstellt.

Import Hooking wird eingesetzt, wenn das Modul Daten an externe JavaScript-Funktionen sendet. Wir überschreiben die im importObject definierten Funktionen, um die übergebenen Argumente mitzuloggen oder zu speichern. Dieser Ansatz ist besonders effektiv bei der Analyse von proprietären Modulen, bei denen die interne Speicherstruktur unbekannt ist.

Für komplexe Extraktionsprozesse im Rahmen von Data Engineering ist die Kombination aus Memory-Dumps und statischer Analyse der Binärdatei notwendig, um die Speicherbelegung zu rekonstruieren.

Wir empfehlen den Einsatz von Import Hooking in Verbindung mit einer Analyse der Speicher-Offsets. Der reine Zugriff auf den Memory-Buffer ist ohne Kenntnis des Speicherlayouts ineffizient und fehleranfällig. Die Interzeption der Kommunikation zwischen WASM und der JavaScript-Runtime bietet die höchste Datensicherheit und Präzision bei der Extraktion.

Sergej Wiens

Sergej Wiens

Gründer & Software Architekt