
rewerse-engineering v1.3.0
Reverse Engineering der Rewe-API in Go
rewerse engineering
Dieses Repository zielt darauf ab, alle öffentlich zugänglichen (nicht authentifizierten) API-Endpunkte der Rewe-App zu implementieren, mit denen aktuelle Rabatte, Produkte, Rezepte und Rückrufe abgefragt werden können.
Aktuell unterstützte APK-Version: 5.15.2 (Stand: 12.07.26)
[!CAUTION] Die für die Kommunikation mit der Rewe-API erforderlichen Zertifikate sind nicht in diesem Repository enthalten. Sie müssen sie aus der APK extrahieren. Dokumentation und ein Extraktionsskript für Windows finden Sie im docs-Verzeichnis.
Siehe auch rewerse-ui.
Schnellstart
Zertifikate extrahieren aus der Rewe-APK; siehe docs für Anweisungen
Bibliothek verwenden:
- Go:
go get github.com/ByteSizedMarius/rewerse-engineering– Dokumentation - Python:
pip install rewerse– Dokumentation
Oder die CLI installieren:
- Download eines Releases
- Oder installieren via 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€
...
Einleitung
Im März 2024 begann Rewe, Cloudflare MTLS zu verwenden, um ihre API-Endpunkte zu sichern, was bestehende Lösungen zunichtemachte, die es beispielsweise ermöglichten, Rabatte für einen bestimmten Rewe-Markt abzurufen. Der GitHub-Benutzer @torbenpfohl war besessen beharrlich genug, um 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 nicht dokumentiert und kann jederzeit ohne Vorankündigung geändert oder unterbrochen werden.
Die Nutzung dieser Software erfolgt auf eigenes Risiko. Die Benutzer sind dafür verantwortlich, dass ihre Nutzung mit den geltenden Nutzungsbedingungen übereinstimmt.
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 mit Nutzungsbeispielen.
- 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 sind in releases.
[!NOTE] Bitte beachten Sie, dass es sich um eine unsignierte Go-Binärdatei handelt, die einige Ver-/Entschlüsselungen von Zertifikaten durchführt und Webanfragen an die Rewe-API sendet. Daher wird sie wahrscheinlich von Ihrem Antivirenprogramm markiert. Es gibt keine Abhängigkeiten, sodass Sie sie leicht selbst kompilieren können – was aus Sicherheitssicht immer empfohlen wird.
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
recipes Search and browse recipes
discounts Get market discounts
categories Get product categories
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 recipes search -term Pasta
./rewerse.exe discounts -market 840174
./rewerse.exe categories -market 831002
./rewerse.exe services -zip 50667
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 Typinkonsistenzen zwischen unseren Strukturen und den tatsächlichen API-Formaten.
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 Sie eine Strukturänderung beitragen, denken Sie bitte daran, einen Unmarshal-Test hinzuzufügen oder zu aktualisieren. Verwenden Sie eine echte API-Antwort, wenn Sie eine erfassen können, andernfalls ist ein synthetischer JSON-Payload, der das tatsächliche API-Verhalten widerspiegelt, in Ordnung.
Mitwirken
Eröffnen Sie gerne GitHub-Issues für Vorschläge, Fragen, Fehler. PRs sind willkommen. E-Mail: rewe at byte dot rest.