
rewerse-engineering v1.4.0
Reverse engineering dell'API Rewe in Go
rewerse engineering
Un client API REWE non ufficiale in Go e Python. Implementa gli endpoint pubblicamente accessibili (senza autenticazione) che l'app REWE utilizza per interrogare sconti correnti (Angebote), prodotti, mercati e richiami.
Versione APK attualmente supportata: 5.16.2 (al 06.08.26)
[!CAUTION] I certificati necessari per comunicare con l'API REWE non sono inclusi in questo repository. Devi estrarli dall'APK. La documentazione e uno script di estrazione per Windows sono disponibili nella directory docs.
Vedi anche rewerse-ui.
avvio rapido
Estrai i certificati dall'APK REWE; consulta docs per le istruzioni
Usa la libreria:
Oppure installa la CLI:
- Scarica una release
- Oppure installa tramite Go:
go install github.com/ByteSizedMarius/rewerse-engineering/cmd@latest - Oppure clona e compila:
go build -o rewerse ./cmd
Verifica: rewerse --help
Esempio: Recupera gli sconti correnti per un mercato:
$ 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€
...
introduzione
Nel marzo 2024, Rewe ha iniziato
a utilizzare Cloudflare MTLS per proteggere i propri endpoint API, il che
ha interrotto le soluzioni esistenti che consentivano, ad esempio, di recuperare gli sconti per uno specifico mercato Rewe.
L'utente GitHub @torbenpfohl è stato ossessionato abbastanza persistente da capire come funzionasse, trovare il certificato e la sua password. Questo repository si basa sul
suo lavoro e mira a documentare le procedure necessarie e implementare alcuni degli endpoint.
disclaimer
Questo progetto non è affiliato, approvato o sponsorizzato da REWE-ZENTRALFINANZ eG. "REWE" è un marchio registrato del rispettivo proprietario.
Questo è un client non ufficiale basato sul traffico di rete pubblicamente osservabile dell'app mobile REWE. È fornito a scopo educativo e di ricerca. L'API sottostante non è documentata e può cambiare o interrompersi in qualsiasi momento senza preavviso.
L'uso di questo software è a proprio rischio. Gli utenti sono responsabili di garantire che il loro utilizzo sia conforme ai termini di servizio applicabili.
contenuti
- Un'implementazione Go di base dell'API REWE è disponibile nella directory pkg; consulta pkg/readme per la documentazione API della libreria Go, inclusi esempi di utilizzo.
- Un wrapper Python FFI è disponibile come
rewersesu PyPI – consulta python/readme per dettagli e codice sorgente. - Il codice sorgente della CLI per la libreria Go si trova in cmd.
- Le release sono disponibili in releases.
[!NOTE] Tieni presente che, trattandosi di un binario Go non firmato che esegue operazioni di crittografia/decrittografia dei certificati e invia richieste web all'API REWE, è probabile che venga segnalato dal tuo antivirus. Non ci sono dipendenze, quindi puoi facilmente compilarlo da solo – cosa sempre consigliata dal punto di vista della sicurezza.
endpoint rimossi
L'app non ha più un endpoint di completamento automatico e utilizza semplicemente la normale ricerca prodotti, quindi i suggerimenti di prodotto sono spariti.
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.
test
I test si trovano in pkg/*_test.go. Esistono due tipi:
- I test unitari deserializzano i payload JSON nelle nostre strutture. I payload derivano da risposte API reali. Questi test vengono eseguiti senza certificati e rilevano discrepanze di tipo tra le nostre strutture e le forme API effettive.
go test ./pkg/ -run Unmarshal - I test di integrazione accedono all'API live e richiedono i certificati. Vengono saltati automaticamente se non vengono trovati certificati.
go test ./pkg/
Se contribuisci con una modifica alle strutture, considera di aggiungere o aggiornare un test di deserializzazione. Usa una risposta API reale se riesci a catturarne una, altrimenti un payload JSON sintetico che rifletta il comportamento API effettivo va bene.
contributi
Sentiti libero di aprire issue GitHub per suggerimenti, domande, bug. Le PR sono benvenute. Email: rewe at byte dot rest.