b-erdem/rekit

GitHub: b-erdem/rekit

一套集成了流量捕获、客户端生成、指纹识别及认证分析等功能的移动端 API 逆向工程一站式工具包。

Stars: 1 | Forks: 0

# rekit [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/7da3ce6722152109.svg)](https://github.com/b-erdem/rekit/actions/workflows/ci.yml) [![Alpha](https://img.shields.io/badge/status-alpha-orange.svg)]() Mobile API 逆向工程工具包。 14 个专注于 Mobile API 逆向工程流程的工具:捕获流量、映射端点、测试指纹、检测机器人防护、对比 schema、生成客户端、模拟服务器、分析 token、映射认证流程、解码 protobuf、扫描 JS 包、探测速率限制、绕过证书锁定以及 HTTP/2 指纹。 ## 为什么选择 rekit? 逆向工程 Mobile API 是一个多步骤的过程,且每个步骤之间包含大量手动工作。现有工具(mitmproxy、jadx、frida)在单个步骤中表现出色,但无法连接整个流程。rekit 填补了这些空白: - **不再需要手动将 HAR 转换为客户端** — `hargen` 可自动生成类型化的 Python 客户端 - **不再需要为代理/证书锁定而头疼** — `apktap` 在 TLS 之上的应用层进行挂钩;`certpatch` 生成针对性的绕过脚本 - **不再需要在 40,000 个反编译文件中搜索** — `apkmap` 和 `jsbundle` 帮你发现 API 表面 - **不再需要猜测为何收到 403 错误** — `ja3probe`、`botwall` 和 `headerprint` 会告诉你具体是什么阻止了你 - **不再需要手动映射 25 种不同的响应 schema** — `schemadiff` 构建统一模型 - **不再需要将 JWT 复制粘贴到 jwt.io** — `tokendump` 解码你流量中的每个 token - **不再需要手动弄清楚认证流程** — `authmap` 映射 OAuth2、会话 cookie、API keys,并生成认证模块 - **不再需要在开发期间调用真实的 API** — `mockapi` 将捕获的流量作为本地服务器进行回放 - **不再需要面对二进制 protobuf 乱码** — `protorev` 从 gRPC 流量中解码并推断 schema - **不再需要猜测速率限制** — `ratelim` 找出精确的阈值 ## 工具 ### 核心流程 | 工具 | 功能 | 输入 | 输出 | |------|-------------|-------|--------| | **hargen** | 从捕获的流量生成类型化的 Python API 客户端 | HAR / mitmproxy dump | Python client + dataclasses | | **apktap** | 通过 Frida 挂钩进入 Android app HTTP 层 | Package name | HAR file | | **apkmap** | 扫描反编译的 APK 以发现 API 端点和认证 | APK 或反编译源码 | Endpoint map (table/JSON) | | **schemadiff** | 对比不同来源的 API 响应 schema | JSON files | Unified model + diff table | ### 安全与指纹 | 工具 | 功能 | 输入 | 输出 | |------|-------------|-------|--------| | **ja3probe** | 测试目标接受哪些 TLS 指纹 | URL | Accept/reject matrix | | **botwall** | 识别机器人防护系统和难度 | URL | Detection report | | **headerprint** | 分析 HTTP/2 和 header-order 指纹 | HAR file | Fingerprint match + anomalies | | **certpatch** | 扫描证书锁定,生成 Frida 绕过脚本 | Decompiled source | Bypass script + config | ### 流量分析 | 工具 | 功能 | 输入 | 输出 | |------|-------------|-------|--------| | **tokendump** | 提取并解码所有认证 token(JWT、OAuth 等) | HAR file | Token report + decoded JWTs | | **authmap** | 映射认证流程,生成认证模块 | HAR file | Flow diagram + Python auth code | | **mockapi** | 将捕获的流量作为本地模拟服务器进行回放 | HAR file | Running HTTP server | | **ratelim** | 使用二分搜索探测速率限制 | URL | Limits table + safe RPS | ### App 分析 | 工具 | 功能 | 输入 | 输出 | |------|-------------|-------|--------| | **jsbundle** | 扫描 React Native / JS 包以发现 API 端点 | APK / IPA / bundle | Endpoints + secrets + GraphQL | | **protorev** | 解码 protobuf/gRPC,推断 .proto schema | HAR file / raw bytes | Decoded messages + .proto file | ## 安装 ``` # 从源码 git clone https://github.com/b-erdem/rekit.git cd rekit pip install -e . # 使用 TLS fingerprint 测试 pip install -e ".[tls]" # 使用 Frida hooking pip install -e ".[frida]" # 所有内容 pip install -e ".[all]" ``` ## 快速开始 ### 检测机器人防护 ``` $ rekit botwall detect https://www.example.com ╭──────────────── Cloudflare (Under Attack Mode) ────────────────╮ │ Confidence: 100% Difficulty: IMPRACTICAL │ │ │ │ Evidence: │ │ - cf-ray header present │ │ - server header is 'cloudflare' │ │ - cf-mitigated header (challenge) │ │ - __cf_bm cookie (Bot Management) │ │ │ │ Bypass hints: │ │ - Requires solving Cloudflare JS challenge or Turnstile. │ │ - Use curl_cffi with chrome impersonation for TLS. │ ╰────────────────────────────────────────────────────────────────╯ ``` ### 测试 TLS 指纹 ``` $ rekit ja3probe probe https://api.example.com ┏━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━┓ ┃ Profile ┃ Status ┃ HTTP ┃ Time (ms) ┃ ┡━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━┩ │ chrome_120 │ ACCEPTED │ 200 │ 45 │ │ safari_15_5 │ ACCEPTED │ 200 │ 38 │ │ firefox_133 │ CHALLENGE │ 403 │ 42 │ │ python_req │ REJECTED │ 403 │ 29 │ └──────────────┴───────────┴──────┴───────────┘ 3/26 accepted. Protection: Akamai. Recommended: chrome_120 ``` ### 从捕获的流量生成 API 客户端 ``` $ rekit hargen generate traffic.har -o ./client/ --name MyApiClient Generated: client.py (3 endpoints), models.py (8 dataclasses) ``` ### 从捕获的流量运行模拟服务器 ``` $ rekit mockapi serve traffic.har --port 8080 Mock server running on http://127.0.0.1:8080 Endpoints: GET /api/v1/users (3 responses) POST /api/v1/users (1 response) GET /api/v1/users/{id} (5 responses) ``` ### 提取并解码 token ``` $ rekit tokendump extract traffic.har ┏━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓ ┃ Type ┃ Source ┃ Value ┃ Expires ┃ ┡━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩ │ JWT │ Bearer │ eyJhbGci...kpXV │ 2h from now │ │ OAUTH_REFRESH │ body │ dGhpcyBp...c2Vj │ 30 days │ │ SESSION_COOKIE │ cookie │ sess_abc...xyz9 │ session │ └────────────────┴─────────┴──────────────────────────┴─────────────┘ ``` ### 映射认证流程 ``` $ rekit authmap detect traffic.har OAuth2 Authorization Code + PKCE 1. POST /oauth/authorize → redirect with code 2. POST /oauth/token (code + code_verifier) → access_token + refresh_token 3. GET /api/* (Bearer token) × 47 requests 4. 401 → POST /oauth/token (refresh_token) → new access_token ``` ### 扫描 React Native apps 中的 JS 包 ``` $ rekit jsbundle scan ./app.apk API Endpoints: 12 found Hardcoded Secrets: 3 found (use --show-secrets to reveal) GraphQL Operations: 5 queries, 2 mutations ``` ### 解码 protobuf 流量 ``` $ rekit protorev extract traffic.har ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━┓ ┃ gRPC Method ┃ Fields Found ┃ Type ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━┩ │ /user.UserService/GetUser │ 5 │ gRPC │ │ /feed.FeedService/GetFeed │ 12 │ gRPC │ └────────────────────────────────────┴──────────────┴────────┘ ``` ### 探测速率限制 ``` $ rekit ratelim probe https://api.example.com/v1/search Probed 50 requests at 5.0 rps Successful: 42 Rate-limited: 8 Errors: 0 First 429 at request #43 Rate limit: 100 req/min (from headers) Cooldown: 60s Recommended: 1.5 rps with 0.7s jitter ``` ### 生成证书锁定绕过脚本 ``` $ rekit certpatch bypass ./decompiled/ -o bypass.js Detected 3 pinning implementations: - OkHttp CertificatePinner (api.example.com) → easy bypass - network_security_config.xml (*.example.com) → easy bypass - Custom X509TrustManager → medium bypass Generated: bypass.js (load with: frida -U -f com.example.app -l bypass.js) ``` ## 流程 ``` ┌─────────┐ │ apktap │──────────────┐ └────┬────┘ │ │ HAR │ v v ┌─────────┐ ┌─────────────────┐ ┌────────────┐ │ apkmap │ │ hargen │ │ mockapi │ │jsbundle │ │ (generate API │ │ (mock srv) │ └────┬────┘ │ client) │ └────────────┘ │ └────────┬────────┘ │ │ v v ┌─────────┐ ┌─────────────────┐ ┌────────────┐ │certpatch│ │ tokendump │ │ ratelim │ │ │ │ authmap │ │ │ └─────────┘ └─────────────────┘ └────────────┘ │ ┌──────────────────┼──────────────────┐ v v v ┌─────────┐ ┌─────────────────┐ ┌────────────┐ │ja3probe │ │ schemadiff │ │ protorev │ │ botwall │ │ │ │ │ │headerpr.│ └─────────────────┘ └────────────┘ └─────────┘ ``` 1. **捕获**:使用 `apktap` 挂钩进入 app 并捕获流量,或使用 mitmproxy 2. **分析 app**:使用 `apkmap`、`jsbundle`、`certpatch` 来理解 app 3. **生成**:将 HAR 文件输入 `hargen` 以获得类型化的 Python 客户端 4. **理解认证**:使用 `tokendump` 和 `authmap` 映射认证流程 5. **调试拦截**:当请求被拦截时,使用 `ja3probe`、`botwall` 和 `headerprint` 6. **模拟与测试**:使用 `mockapi` 基于捕获的流量进行开发 7. **标准化**:在构建跨多个 API 的统一模型时使用 `schemadiff` 8. **解码二进制**:对于 protobuf/gRPC API 使用 `protorev` 9. **安全扩展**:使用 `ratelim` 找出速率限制边界 ## 依赖项 - Python 3.9+ - `curl_cffi` 用于 TLS 指纹测试 (`pip install curl_cffi`) - `frida-tools` 用于 app 流量捕获 (`pip install frida-tools`) - `jadx` 用于 APK 反编译(单独安装) ## 贡献 参见 [CONTRIBUTING.md](CONTRIBUTING.md) 了解开发设置和指南。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。
标签:API测试, Bot检测, HTTP/2指纹, iOS逆向, JSBundle扫描, JWT分析, Mock服务器, OAuth2, Protobuf解码, Radare2, Schema比对, TLS指纹, WAF绕过, 中间人攻击, 云资产清单, 代码生成, 令牌分析, 协议分析, 安卓逆向, 客户端生成, 权限提升, 流量抓包, 渗透测试工具, 移动端API, 网络安全, 网络调试, 自动化, 认证与授权, 证书绑定绕过, 逆向工具, 逆向工程, 限流探测, 隐私保护