Protobuf-Dekodierung

ApiCatcher unterstützt die Dekodierung von Protobuf-kodierten Binärdaten aus HTTP/HTTPS-Anfragen und -Antworten in Klartext zur einfachen Anzeige und Analyse.

Standardmäßig erkennt ApiCatcher automatisch, ob der Content-Type-Header der Anfrage/Antwort mit gängigen Protobuf-Inhaltstypen wie application/protobuf oder application/x-protobuf übereinstimmt. Wenn ja, wird ein Dekodierungsversuch unternommen.

private static func isProtobufContentType(_ contentType: String) -> Bool {
    let ct = contentType.lowercased().trimmingCharacters(in: .whitespacesAndNewlines)
    let mimeType = ct.components(separatedBy: ";").first?.trimmingCharacters(in: .whitespaces) ?? ct
    return mimeType == "application/protobuf"
        || mimeType == "application/x-protobuf"
        || mimeType == "application/x-google-protobuf"
        || mimeType == "application/grpc"
        || mimeType == "application/grpc+proto"
        || mimeType == "application/protobuf+json"
        || mimeType == "x-protobuf"
}

Wenn der Content-Type nicht zu den oben genannten Typen gehört, versucht ApiCatcher nicht automatisch zu dekodieren. Sie können jedoch das Dekodierungswerkzeug verwenden, um manuell zu dekodieren – klicken Sie auf das "Unlock"-Symbol auf der Body-Karte, wechseln Sie zu "Protobuf" und klicken Sie dann auf die Schaltfläche "Dekodieren".

Das Standard-Dekodierungsergebnis ist schwer lesbar, da keine Feldnamen vorhanden sind. Wenn Sie eine *.desc-Datei haben, können Sie diese importieren, um Feldnamen zu dekodieren. Wenn die *.desc-Datei korrekt ist, wird das Ergebnis in das JSON-Format konvertiert, das viel besser lesbar ist. Hier ist ein Vergleich der Dekodierungsergebnisse mit und ohne *.desc-Datei:

Vergleich der Protobuf-Dekodierungsergebnisse mit und ohne Deskriptordatei: links ohne Feldnamen, rechts mit vollständigen Feldnamen

Protobuf-Deskriptordateien (*.desc) importieren

Was ist eine *.desc-Datei?

Eine *.desc-Datei ist das binär serialisiertes Ergebnis eines Protobuf-Dateideskriptors (File Descriptor) und enthält alle Nachrichtenstrukturen, Enumerationen, Dienstdefinitionen und andere Metadaten, die in Proto-Dateien definiert sind. Sie ist für die Analyse von Protobuf-Binärdaten unerlässlich.

Wenn Sie nur *.proto-Dateien haben, müssen Sie diese zuerst in eine *.desc-Datei konvertieren, bevor Sie sie für die Protobuf-Dekodierung verwenden können.

Wie generiert man eine *.desc-Datei?

Wenn Sie mehrere *.proto-Dateien haben, können Sie das protoc-Befehlszeilentool verwenden, um eine oder mehrere *.desc-Dateien zu generieren. Schritte:

1. Protobuf-Befehlszeilentool installieren:

brew install protobuf

2. Proto-Dateien vorbereiten:

Erstellen Sie einen input-Ordner und kopieren Sie alle *.proto-Dateien hinein.

3. Generierungsbefehl ausführen:

protoc --descriptor_set_out=output.desc \
  --include_imports \
  -I=/path/to/input \
  /path/to/input/*.proto

Parameterbeschreibung:

ParameterBeschreibung
--descriptor_set_out=output.descGibt den Pfad der Ausgabe-Deskriptordatei an
--include_importsSchließt alle abhängigen Import-Dateien ein, sodass das Ergebnis ohne zusätzliche Abhängigkeiten sofort verwendbar ist
-I=/path/to/inputGibt den Suchpfad für Proto-Dateien an (Präfix für Import-Pfade)
/path/to/input/*.protoDie zu kompilierenden Proto-Dateien (unterstützt Platzhalter)

Nach der Ausführung wird eine output.desc-Datei im aktuellen Verzeichnis generiert. Übertragen Sie sie auf Ihr Telefon und importieren Sie sie in ApiCatcher zur späteren Verwendung.

*.desc-Dateien importieren und importierte *.desc-Dateien verwalten

Wenn der Anfrage-Body als Protobuf dekodiert werden kann, zeigt die Karte den Hinweis "Wählen Sie eine *.desc-Datei zum Dekodieren von Feldnamen" und bietet eine Auswahlschaltfläche an. Klicken Sie auf die Auswahlschaltfläche, um eine importierte *.desc-Datei auszuwählen, und die Feldnamen werden dekodiert. Sie können an dieser Stelle auch eine Datei importieren. Importierte Dateien werden lokal zwischengespeichert und können unter "Einstellungen → Protobuf-Dateiverwaltung" verwaltet werden.

Klicken Sie auf die Auswahlschaltfläche, um eine importierte *.desc-Datei zum Dekodieren von Feldnamen auszuwählen