
rewerse-engineering v1.4.0
Go言語によるRewe APIのリバースエンジニアリング
リバースエンジニアリング
GoとPythonによる非公式のREWE APIクライアントです。REWEアプリが現在の割引情報(Angebote)、商品、店舗、リコール情報の照会に使用している、一般公開(認証不要)のエンドポイントを実装しています。
対応APKバージョン: 5.16.2(2026年8月6日時点)
[!CAUTION] rewe apiと通信するために必要な証明書は、このリポジトリには含まれていません。APKから抽出する必要があります。ドキュメントとWindows用の抽出スクリプトはdocsディレクトリにあります。
rewerse-uiもご覧ください。
クイックスタート
rewe apkから証明書を抽出します。手順はdocsを参照してください。
ライブラリを使用する場合:
- Go:
go get github.com/ByteSizedMarius/rewerse-engineering– ドキュメント - Python:
pip install rewerse– ドキュメント
または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.pem)
-key <path> 鍵ファイル (デフォルト: private.key)
-json JSONとして出力
Commands:
markets 店舗を検索し、詳細を取得
products 商品を検索、閲覧、情報を取得
discounts 店舗の割引情報を取得
categories 商品カテゴリを取得
recipes レシピを検索、詳細と人気の用語を取得
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 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
サブコマンドのヘルプは './rewerse.exe <command>' を実行してください。
テスト
テストはpkg/*_test.goにあります。2種類あります:
- ユニットテストはJSONペイロードを構造体にアンマーシャリングします。ペイロードは実際のAPIレスポンスから派生しています。これらは証明書なしで実行され、構造体と実際のAPI形式の間の型の不一致を検出します。
go test ./pkg/ -run Unmarshal - 統合テストはライブAPIにアクセスし、証明書が必要です。証明書が見つからない場合は自動的にスキップされます。
go test ./pkg/
構造体の変更に貢献する場合は、アンマーシャリングテストの追加または更新を検討してください。可能であれば実際のAPIレスポンスを使用し、それができない場合は実際のAPI動作を反映した合成JSONペイロードで問題ありません。
貢献
提案、質問、バグについては、お気軽にgithubのissueを開いてください。PRも歓迎します。メール: rewe at byte dot rest。