Voltar às atualizações
New releaseSep 6, 2026

rewerse-engineering v1.4.0

Engenharia reversa da API Rewe em Go

Compartilhar

rewerse engineering

Project Logo

Um cliente não oficial da API da REWE em Go e Python. Ele implementa os endpoints publicamente acessíveis (não autenticados) que o aplicativo da REWE usa para consultar descontos atuais (Angebote), produtos, mercados e recalls.

Versão atual do APK suportada: 5.18.1 (em 29.09.26)

[!CAUTION] Os certificados necessários para se comunicar com a API da rewe não estão incluídos neste repositório. Você precisa extraí-los do APK. A documentação e um script de extração para Windows podem ser encontrados no diretório docs.

Veja também rewerse-ui.

início rápido

Extraia os certificados do apk da rewe; consulte docs para instruções

Use a biblioteca:

  • Go: go get github.com/ByteSizedMarius/rewerse-engineering – docs
  • Python: pip install rewerse – docs

Ou instale a CLI:

  • Baixe uma release
  • Ou instale via Go: go install github.com/ByteSizedMarius/rewerse-engineering/cmd@latest
  • Ou clone e compile: go build -o rewerse ./cmd

Verifique: rewerse --help

Exemplo: Obtenha os descontos atuais de um 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€
...

introdução

Em março de 2024, a Rewe começou a usar Cloudflare MTLS para proteger seus endpoints de API, o que quebrou soluções existentes que permitiam, por exemplo, obter descontos de um mercado Rewe específico. O usuário do Github @torbenpfohl foi obcecado persistente o suficiente para descobrir isso, encontrar o certificado e sua senha. Este repositório é baseado no trabalho dele e tem como objetivo documentar os procedimentos necessários e implementar alguns dos endpoints.

Este projeto não é afiliado, endossado ou patrocinado pela REWE-ZENTRALFINANZ eG. "REWE" é uma marca registrada de seu respectivo proprietário.

Este é um cliente não oficial baseado em tráfego de rede publicamente observável do aplicativo móvel da REWE. Ele é fornecido para fins educacionais e de pesquisa. A API subjacente não é documentada e pode mudar ou quebrar a qualquer momento sem aviso prévio.

O uso deste software é por sua conta e risco. Os usuários são responsáveis por garantir que seu uso esteja em conformidade com os termos de serviço aplicáveis.

conteúdo

  • Uma implementação básica em go da API da rewe está disponível no diretório pkg; consulte pkg/readme para a documentação da API da biblioteca go, incluindo exemplos de uso.
  • Um wrapper ffi em python está disponível como rewerse no PyPI – consulte python/readme para detalhes e código-fonte.
  • O código-fonte da cli para a biblioteca go está em cmd.
  • As releases estão em releases.

[!NOTE] Observe que, como este é um binário go não assinado que faz alguma criptografia/descriptografia de certificados e envia requisições web para a API da rewe, ele provavelmente será sinalizado pelo seu antivírus. Não há dependências, então você pode compilá-lo facilmente por conta própria – o que é sempre recomendado do ponto de vista de segurança.

endpoints removidos

O aplicativo não possui mais um endpoint de autocomplete e usa apenas a busca normal de produtos, então as sugestões de produtos foram removidas.

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.

testes

Os testes ficam em pkg/*_test.go. Existem dois tipos:

  • Testes unitários fazem unmarshal de payloads JSON em nossas structs. Os payloads são derivados de respostas reais da API. Eles rodam sem certificados e detectam incompatibilidades de tipo entre nossas structs e os formatos reais da API. go test ./pkg/ -run Unmarshal
  • Testes de integração acessam a API ao vivo e exigem certificados. Eles são ignorados automaticamente se nenhum certificado for encontrado. go test ./pkg/

Se você estiver contribuindo com uma alteração de struct, considere adicionar ou atualizar um teste de unmarshal. Use uma resposta real da API se conseguir capturar uma, caso contrário, um payload JSON sintético que reflita o comportamento real da API é suficiente.

contribuindo

Sinta-se à vontade para abrir issues no github para sugestões, perguntas, bugs. PRs são bem-vindos. Email: rewe at byte dot rest.

atribuição

Categorias