Zurück zu den Updates
New releaseSep 6, 2026

rewerse-engineering v1.4.0

Reverse Engineering der Rewe-API in Go

Teilen

Reverse Engineering

Projektlogo

Ein inoffizieller REWE-API-Client in Go und Python. Er implementiert die öffentlich zugänglichen (nicht authentifizierten) Endpunkte, die die REWE-App zum Abfragen aktueller Rabatte (Angebote), Produkte, Märkte und Rückrufe verwendet.

Aktuell unterstützte APK-Version: 5.16.2 (Stand: 06.08.26)

[!CAUTION] Die für die Kommunikation mit der REWE-API erforderlichen Zertifikate sind nicht in diesem Repository enthalten. Du musst sie aus der APK extrahieren. Dokumentation und ein Extraktionsskript für Windows findest du im docs-Verzeichnis.

Siehe auch rewerse-ui.

Schnellstart

Zertifikate extrahieren aus der REWE-APK; siehe docs für Anweisungen

Die Bibliothek verwenden:

Oder die CLI installieren:

  • Download eines Releases
  • Oder Installation über Go: go install github.com/ByteSizedMarius/rewerse-engineering/cmd@latest
  • Oder klonen und bauen: go build -o rewerse ./cmd

Überprüfen: rewerse --help

Beispiel: Aktuelle Rabatte für einen Markt abrufen:

$ rewerse discounts -market 840174

Top-Angebote in deinem Markt
	Haribo Goldbären oder Color-Rado, 0.77€
	Coca-Cola, Fanta oder Sprite, 0.99€
Obst & Gemüse
	Heidelbeeren, 1.49€
	Rispentomaten, 0.99€
...

Einführung

Im März 2024 begann Rewe, Cloudflare MTLS zur Sicherung seiner API-Endpunkte zu verwenden, was bestehende Lösungen brach, die beispielsweise das Abrufen von Rabatten für einen bestimmten Rewe-Markt ermöglichten. Der GitHub-Nutzer @torbenpfohl war besessen beharrlich genug, dies herauszufinden, das Zertifikat und sein Passwort zu finden. Dieses Repository basiert auf seiner Arbeit und zielt darauf ab, die erforderlichen Verfahren zu dokumentieren und einige der Endpunkte zu implementieren.

Haftungsausschluss

Dieses Projekt ist nicht mit der REWE-ZENTRALFINANZ eG verbunden, wird von ihr nicht unterstützt oder gesponsert. „REWE“ ist eine eingetragene Marke des jeweiligen Inhabers.

Dies ist ein inoffizieller Client, der auf öffentlich beobachtbarem Netzwerkverkehr der REWE-Mobil-App basiert. Er wird zu Bildungs- und Forschungszwecken bereitgestellt. Die zugrunde liegende API ist undokumentiert und kann sich jederzeit ohne Vorankündigung ändern oder ausfallen.

Die Nutzung dieser Software erfolgt auf eigenes Risiko. Die Nutzer sind dafür verantwortlich, dass ihre Nutzung den geltenden Nutzungsbedingungen entspricht.

Inhalt

  • Eine grundlegende Go-Implementierung der REWE-API ist im pkg-Verzeichnis verfügbar; siehe pkg/readme für die API-Dokumentation der Go-Bibliothek einschließlich Verwendungsbeispielen.
  • Ein FFI-Python-Wrapper ist als rewerse auf PyPI verfügbar – siehe python/readme für Details und Quellcode.
  • Der Quellcode der CLI für die Go-Bibliothek befindet sich in cmd.
  • Releases befinden sich in releases.

[!NOTE] Bitte beachte, dass diese unsignierte Go-Binärdatei, die eine Ver-/Entschlüsselung von Zertifikaten durchführt und Webanfragen an die REWE-API sendet, wahrscheinlich von deinem Antivirenprogramm markiert wird. Es gibt keine Abhängigkeiten, sodass du sie leicht selbst kompilieren kannst – was aus Sicherheitssicht immer empfohlen wird.

Entfernte Endpunkte

Die App hat keinen Autovervollständigungs-Endpunkt mehr und verwendet nur noch die normale Produktsuche, daher sind Produktvorschläge weggefallen.

CLI

Usage: ./rewerse.exe [flags] <command> [subcommand] [flags]

Flags:
  -cert <path>    Certificate file (default: certificate.pem)
  -key <path>     Key file (default: private.key)
  -json           Output as JSON

Commands:
  markets         Search and get market details
  products        Search, browse, and get product info
  discounts       Get market discounts
  categories      Get product categories
  recipes         Search recipes, get details and popular terms
  recalls         Get product recalls
  services        Get service portfolio by zip

Examples:
  ./rewerse.exe markets search -query Köln
  ./rewerse.exe products search -market 831002 -query Milch
  ./rewerse.exe products category -market 831002 -slug obst-gemuese
  ./rewerse.exe discounts -market 840174
  ./rewerse.exe categories -market 831002
  ./rewerse.exe services -zip 50667
  ./rewerse.exe recipes search -term Lachs -difficulties 1
  ./rewerse.exe recipes details -id blt4aaa7361ba69f8c8

Run './rewerse.exe <command>' for subcommand help.

Tests

Tests befinden sich in pkg/*_test.go. Es gibt zwei Arten:

  • Unit-Tests entpacken JSON-Payloads in unsere Strukturen. Die Payloads stammen aus echten API-Antworten. Diese laufen ohne Zertifikate und erkennen Typabweichungen zwischen unseren Strukturen und den tatsächlichen API-Formen. go test ./pkg/ -run Unmarshal
  • Integrationstests greifen auf die Live-API zu und erfordern Zertifikate. Sie werden automatisch übersprungen, wenn keine Zertifikate gefunden werden. go test ./pkg/

Wenn du zu einer Strukturänderung beiträgst, ziehe bitte in Betracht, einen Unmarshal-Test hinzuzufügen oder zu aktualisieren. Verwende eine echte API-Antwort, wenn du eine erfassen kannst, andernfalls ist ein synthetischer JSON-Payload, der das tatsächliche API-Verhalten widerspiegelt, in Ordnung.

Mitwirken

Du kannst gerne GitHub-Issues für Vorschläge, Fragen und Fehler eröffnen. Pull Requests sind willkommen. E-Mail: rewe at byte dot rest.

Namensnennung

Kategorien