b-erdem/rekit
GitHub: b-erdem/rekit
一套集成了流量捕获、客户端生成、指纹识别及认证分析等功能的移动端 API 逆向工程一站式工具包。
Stars: 1 | Forks: 0
# rekit
[](LICENSE)
[](https://www.python.org/downloads/)
[](https://github.com/b-erdem/rekit/actions/workflows/ci.yml)
[]()
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, 网络安全, 网络调试, 自动化, 认证与授权, 证书绑定绕过, 逆向工具, 逆向工程, 限流探测, 隐私保护