
rewerse-engineering v1.4.0
Rewe API 리버스 엔지니어링 (Go)
리버스 엔지니어링
Go와 Python으로 작성된 비공식 REWE API 클라이언트입니다. REWE 앱이 현재 할인(Angebote), 제품, 매장 및 리콜 정보를 조회하는 데 사용하는 공개적으로 접근 가능한(인증되지 않은) 엔드포인트를 구현합니다.
현재 지원되는 APK 버전: 5.16.2 (2026년 8월 6일 기준)
[!CAUTION] rewe api와 통신하는 데 필요한 인증서는 이 저장소에 포함되어 있지 않습니다. APK에서 직접 추출해야 합니다. 문서 및 Windows용 추출 스크립트는 docs 디렉토리에서 찾을 수 있습니다.
rewerse-ui도 참조하세요.
빠른 시작
rewe apk에서 인증서 추출: 지침은 docs를 참조하세요.
라이브러리 사용:
또는 CLI 설치:
- 릴리스 다운로드
- 또는 Go로 설치:
go install github.com/ByteSizedMarius/rewerse-engineering/cmd@latest - 또는 클론 후 빌드:
go build -o rewerse ./cmd
확인: rewerse --help
예시: 특정 매장의 현재 할인 정보 가져오기:
$ 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€
...
소개
2024년 3월, Rewe는
api 엔드포인트를 보호하기 위해 Cloudflare MTLS를 사용하기 시작했으며,
이로 인해 특정 Rewe 매장의 할인 정보를 가져오는 등의 기능을 제공했던 기존 솔루션이
작동하지 않게 되었습니다.
Github 사용자 @torbenpfohl은 이를 해결하고, 인증서와 비밀번호를 찾아내기 위해 집착에 가까울 만큼 끈기 있게 노력했습니다. 이 저장소는 그의 작업을 기반으로 하며, 필요한 절차를 문서화하고 일부 엔드포인트를 구현하는 것을 목표로 합니다.
면책 조항
이 프로젝트는 REWE-ZENTRALFINANZ eG와 제휴, 보증 또는 후원 관계가 아닙니다. "REWE"는 해당 소유주의 등록 상표입니다.
이는 REWE 모바일 앱의 공개적으로 관찰 가능한 네트워크 트래픽을 기반으로 한 비공식 클라이언트입니다. 교육 및 연구 목적으로 제공됩니다. 기본 API는 문서화되어 있지 않으며 사전 통지 없이 언제든지 변경되거나 중단될 수 있습니다.
이 소프트웨어의 사용은 사용자 본인의 책임입니다. 사용자는 자신의 사용이 해당 서비스 약관을 준수하는지 확인할 책임이 있습니다.
내용
- rewe api의 기본 go 구현은 pkg 디렉토리에서 확인할 수 있습니다. go 라이브러리의 api 문서와 사용 예제는 pkg/readme를 참조하세요.
- ffi python 래퍼는 PyPI에서
rewerse로 제공됩니다. 자세한 내용과 소스 코드는 python/readme를 참조하세요. - go 라이브러리용 cli의 소스 코드는 cmd에 있습니다.
- 릴리스는 releases에서 확인할 수 있습니다.
[!NOTE] 이 프로그램은 인증서의 암호화/복호화를 수행하고 rewe api에 웹 요청을 보내는 서명되지 않은 go 바이너리이므로 바이러스 백신에 의해 플래그가 지정될 가능성이 높습니다. 종속성이 없으므로 직접 쉽게 컴파일할 수 있으며, 보안 관점에서 항상 권장됩니다.
제거된 엔드포인트
앱에는 더 이상 자동 완성 엔드포인트가 없으며 일반 제품 검색만 사용하므로 제품 제안 기능은 사라졌습니다.
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.
테스트
테스트는 pkg/*_test.go에 있습니다. 두 가지 종류가 있습니다:
- 단위 테스트는 JSON 페이로드를 우리의 구조체로 역직렬화합니다. 페이로드는 실제 API 응답에서 파생됩니다. 이러한 테스트는 인증서 없이 실행되며 구조체와 실제 API 형태 간의 유형 불일치를 포착합니다.
go test ./pkg/ -run Unmarshal - 통합 테스트는 라이브 API에 접속하며 인증서가 필요합니다. 인증서가 없으면 자동으로 건너뜁니다.
go test ./pkg/
구조체 변경에 기여하는 경우 unmarshal 테스트를 추가하거나 업데이트하는 것을 고려해 주세요. 가능하면 실제 API 응답을 캡처하여 사용하고, 그렇지 않으면 실제 API 동작을 반영하는 합성 JSON 페이로드를 사용해도 괜찮습니다.
기여
제안, 질문, 버그에 대해 github 이슈를 자유롭게 열어 주세요. PR 환영합니다. 이메일: rewe at byte dot rest.