
rewerse-engineering v1.3.0
Reverse engineering dell'API Rewe in Go
rewerse engineering
Questo repository mira a implementare tutti gli endpoint API pubblicamente accessibili (non autenticati) utilizzati dall'app Rewe per interrogare sconti correnti, prodotti, ricette e richiami.
Versione APK attualmente supportata: 5.15.2 (al 12.07.26)
[!CAUTION] I certificati necessari per comunicare con l'API Rewe non sono inclusi in questo repository. Devi estratti dall'APK. La documentazione e uno script di estrazione per Windows si trovano nella directory documentazione.
Vedi anche rewerse-ui.
avvio rapido
Estrai i certificati dall'APK Rewe; consulta documentazione per le istruzioni
Usa la libreria:
- Go:
go get github.com/ByteSizedMarius/rewerse-engineering– documentazione - Python:
pip install rewerse– documentazione
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 market:
$ 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 rotto le soluzioni esistenti che permettevano, ad esempio, di recuperare gli sconti per uno specifico market Rewe. L'utente GitHub @torbenpfohl è stato ossessionato abbastanza persistente da capirlo, 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.
dichiarazione di esclusione di responsabilità
Questo progetto non è affiliato, approvato o sponsorizzato da REWE-ZENTRALFINANZ eG. "REWE" è un marchio registrato del suo rispettivo proprietario.
Questo è un client non ufficiale basato sul traffico di rete pubblicamente osservabile dall'app mobile REWE. È fornito per scopi educativi e di ricerca. L'API sottostante non è documentata e può cambiare o rompersi 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 dell'API della libreria Go, inclusi esempi di utilizzo.
- Un wrapper Python FFI è disponibile come
rewersesu PyPI – vedi python/readme per dettagli e codice sorgente. - Il codice sorgente della CLI per la libreria Go si trova in cmd.
- Le release sono in releases.
[!NOTE] Nota bene: poiché questo è un binario Go non firmato che esegue alcune crittografia/decrittografia di 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.
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.
test
I test risiedono in pkg/*_test.go. Ce ne sono due tipi:
- I test unitari deserializzano i payload JSON nelle nostre strutture. I payload sono derivati da risposte API reali. Questi vengono eseguiti senza certificati e rilevano disallineamenti di tipo tra le nostre strutture e le forme effettive dell'API.
go test ./pkg/ -run Unmarshal - I test di integrazione colpiscono l'API live e richiedono certificati. Vengono saltati automaticamente se non vengono trovati certificati.
go test ./pkg/
Se contribuisci con una modifica alle strutture, considera l'aggiunta o l'aggiornamento di un test di deserializzazione. Usa una risposta API reale se riesci a catturarne una, altrimenti va bene un payload JSON sintetico che rifletta il comportamento effettivo dell'API.
contribuire
Sentiti libero di aprire issue su GitHub per suggerimenti, domande, bug. PR benvenuti. Email: rewe at byte dot rest.