
rewerse-engineering v1.4.0
Reverse Engineering der Rewe-API in Go
Reverse Engineering
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:
- Go:
go get github.com/ByteSizedMarius/rewerse-engineering– Dokumentation - Python:
pip install rewerse– Dokumentation
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
rewerseauf 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.