
rewerse-engineering v1.4.0
Ingeniería inversa de la API de Rewe en Go
rewerse engineering
Un cliente no oficial de la API de REWE en Go y Python. Implementa los endpoints de acceso público (sin autenticación) que la aplicación REWE utiliza para consultar descuentos actuales (Angebote), productos, mercados y retiradas de productos.
Versión de APK compatible actual: 5.16.2 (a fecha de 06.08.26)
[!CAUTION] Los certificados necesarios para comunicarse con la API de rewe no están incluidos en este repositorio. Debes extraerlos del APK. La documentación y un script de extracción para Windows se encuentran en el directorio docs.
Consulta también rewerse-ui.
inicio rápido
Extrae los certificados del APK de rewe; consulta docs para obtener instrucciones
Usa la librería:
O instala la CLI:
- Descarga una versión
- O instala vía Go:
go install github.com/ByteSizedMarius/rewerse-engineering/cmd@latest - O clona y compila:
go build -o rewerse ./cmd
Verifica: rewerse --help
Ejemplo: Obtén los descuentos actuales de un mercado:
$ 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€
...
introducción
En marzo de 2024, Rewe comenzó
a usar Cloudflare MTLS para proteger sus endpoints de API, lo que
rompió las soluciones existentes que permitían, por ejemplo, obtener descuentos para un mercado específico de Rewe.
El usuario de Github @torbenpfohl fue obsesivo lo bastante persistente para resolver esto, encontrar el certificado y su contraseña. Este repositorio se basa en
su trabajo y tiene como objetivo documentar los procedimientos necesarios e implementar algunos de los endpoints.
aviso legal
Este proyecto no está afiliado, respaldado ni patrocinado por REWE-ZENTRALFINANZ eG. "REWE" es una marca registrada de su respectivo propietario.
Este es un cliente no oficial basado en el tráfico de red públicamente observable de la aplicación móvil de REWE. Se proporciona con fines educativos y de investigación. La API subyacente no está documentada y puede cambiar o dejar de funcionar en cualquier momento sin previo aviso.
El uso de este software es bajo tu propio riesgo. Los usuarios son responsables de garantizar que su uso cumpla con los términos de servicio aplicables.
contenido
- Una implementación básica en go de la API de rewe está disponible en el directorio pkg; consulta pkg/readme para la documentación de la API de la librería de go, incluidos ejemplos de uso.
- Un wrapper de Python mediante ffi está disponible como
rewerseen PyPI – consulta python/readme para más detalles y el código fuente. - El código fuente de la CLI para la librería de go está en cmd.
- Las versiones están en releases.
[!NOTE] Ten en cuenta que, dado que se trata de un binario de go sin firmar que realiza cifrado/descifrado de certificados y envía solicitudes web a la API de rewe, es probable que tu antivirus lo marque. No tiene dependencias, por lo que puedes compilarlo fácilmente tú mismo, lo cual siempre es recomendable desde una perspectiva de seguridad.
endpoints eliminados
La aplicación ya no tiene un endpoint de autocompletado y simplemente usa la búsqueda normal de productos, por lo que las sugerencias de productos han desaparecido.
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.
pruebas
Las pruebas se encuentran en pkg/*_test.go. Hay dos tipos:
- Las pruebas unitarias deserializan cargas JSON en nuestras estructuras. Las cargas se derivan de respuestas reales de la API. Estas se ejecutan sin certificados y detectan desajustes de tipos entre nuestras estructuras y las formas reales de la API.
go test ./pkg/ -run Unmarshal - Las pruebas de integración acceden a la API en vivo y requieren certificados. Se omiten automáticamente si no se encuentran certificados.
go test ./pkg/
Si contribuyes con un cambio de estructura, considera añadir o actualizar una prueba de deserialización. Usa una respuesta real de la API si puedes capturar una; de lo contrario, una carga JSON sintética que refleje el comportamiento real de la API es suficiente.
contribuciones
No dudes en abrir issues de github para sugerencias, preguntas o errores. Las PR son bienvenidas. Correo electrónico: rewe at byte dot rest.