
rewerse-engineering v1.3.0
Rewe API 逆向工程(Go 语言)
rewerse engineering
本仓库旨在实现 Rewe 应用中所有公开可访问(无需认证)的 API 端点,用于查询当前折扣、产品、食谱和召回信息。
当前支持的 APK 版本:5.15.2(截至 12.07.26)
[!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 开始使用 Cloudflare MTLS 来保护其 API 端点,这破坏了原有的 解决方案,例如允许获取特定 Rewe 市场的折扣。GitHub 用户 @torbenpfohl 痴迷 坚持不懈地解决了这个问题,找到了证书及其密码。本仓库基于他的 工作,旨在记录所需的流程并实现部分端点。
免责声明
本项目与 REWE-ZENTRALFINANZ eG 无关,也未获其认可或赞助。"REWE" 是其各自所有者的注册商标。
这是一个基于 REWE 移动应用公开可观察的流量制作的非官方客户端。仅供教育及研究目的使用。底层 API 未经文档化,可能随时变更或失效,恕不另行通知。
使用此软件风险自负。用户有责任确保其使用符合适用的服务条款。
内容
- 基本的 Go 语言实现的 Rewe API 位于 pkg 目录中;参见 pkg/readme 了解 Go 库的 API 文档,包括使用示例。
- 基于 FFI 的 Python 封装以
rewerse名称发布在 PyPI 上 – 参见 python/readme 了解详情和源代码。 - Go 库的 CLI 源代码位于 cmd 中。
- 发布版本在 releases 中。
[!NOTE] 请注意,由于这是一个未签名的 Go 二进制文件,它会进行一些证书加密/解密并向 Rewe API 发送网络请求,因此很可能被你的杀毒软件标记。它没有依赖项,因此你可以轻松自行编译——从安全角度来看,这始终是推荐的做法。
CLI
Usage: ./rewerse.exe [flags] <command> [subcommand] [flags]
Flags:
-cert <path> 证书文件(默认:certificate.pem)
-key <path> 密钥文件(默认:private.key)
-json 以 JSON 格式输出
Commands:
markets 搜索并获取市场详情
products 搜索、浏览并获取产品信息
recipes 搜索并浏览食谱
discounts 获取市场折扣
categories 获取产品类别
recalls 获取产品召回信息
services 按邮政编码获取服务组合
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.
测试
测试位于 pkg/*_test.go 中。有两种类型:
- 单元测试将 JSON 负载反序列化到我们的结构体中。负载来自真实的 API 响应。这些测试不需要证书,用于捕获结构体与实际 API 形状之间的类型不匹配。
go test ./pkg/ -run Unmarshal - 集成测试会调用真实的 API,需要证书。如果找不到证书,它们会自动跳过。
go test ./pkg/
如果你贡献了结构体变更,请考虑添加或更新反序列化测试。如果可能,请使用真实的 API 响应捕获文件,否则,使用反映实际 API 行为的合成 JSON 负载即可。
贡献
欢迎通过 GitHub Issues 提出建议、问题或 Bug。欢迎 Pull Request。邮箱:rewe at byte dot rest。