Welche Methoden zur Analyse von Protobuf-Payloads in XHR-Requests sind am effizientesten, wenn keine .proto-Datei vorliegt?

Die Analyse von Protobuf-Payloads ohne vorliegende .proto-Datei basiert auf der Auswertung des binären Wire-Formats. Da Protobuf-Nachrichten keine Feldnamen, sondern lediglich Feldnummern und Wire-Types übertragen, ist eine semantische Rekonstruktion ein inverser Prozess.

Folgende Methoden stehen für die Analyse zur Verfügung:

MethodeTechnischer AnsatzVorteilNachteil
protoc --decode_rawBinär-Dump AnalyseSchnelle StrukturerkennungKeine Feldnamen, nur Nummern
JS-Reverse EngineeringAnalyse der Client-LogikExakte Feldnamen-ZuordnungZeitaufwendig bei Obfuskation
Differential AnalysisPayload-ManipulationKausale Zuordnung von WertenErfordert kontrollierte Tests
Heuristische AnalyseMustererkennungIdentifikation von Strings/IntsFehleranfällig bei komplexen Typen

Der erste Schritt ist die Nutzung von protoc --decode_raw. Dieses Tool zerlegt den binären Stream in seine Bestandteile und gibt die Feldnummern sowie die zugehörigen Werte aus. Wir sehen dann beispielsweise 1: "Wert", 2: 123. Die Zuordnung dieser Nummern zu semantischen Bezeichnungen erfolgt über die Analyse des JavaScript-Bundles der Web-Applikation. In modernen Frontends werden Protobuf-Definitionen oft in JS-Klassen oder Mapping-Objekte übersetzt. Durch die Suche nach Schlüsselwörtern wie encode, decode oder spezifischen Feldnamen im Quellcode lassen sich die Nummern eindeutig identifizieren.

Bei hochvolumigen Datenströmen integrieren wir diese Erkenntnisse in unsere Data Engineering Pipelines, um automatisierte Parser zu entwickeln, die die binären Daten in Echtzeit in JSON transformieren. Die Differential Analysis ergänzt diesen Prozess, indem gezielt Werte im Request geändert werden, um zu beobachten, welche Feldnummer im binären Payload reagiert.

Die effizienteste Vorgehensweise ist die Kombination aus protoc --decode_raw und dem Reverse Engineering des Client-seitigen JavaScript-Codes. Wer versucht, die Struktur rein über die binäre Analyse zu erraten, verliert bei verschachtelten Nachrichten (Nested Messages) zu viel Zeit. Die Wahrheit liegt im Client-Code, da dieser die Logik zur Serialisierung zwingend implementieren muss, um mit dem Server zu kommunizieren.

Sergej Wiens

Sergej Wiens

Gründer & Software Architekt