cocacola-dev/onlyfans-reverse
GitHub: cocacola-dev/onlyfans-reverse
通过执行而非解析 OnlyFans 混淆脚本来提取 API 请求签名参数,解决目标站点定期重混淆导致提取器频繁失效的问题。
Stars: 0 | Forks: 0
# OnlyFans 逆向
从 OnlyFans 混淆的挑战脚本 (`2313.js`) 中恢复 OnlyFans 的请求签名配置,并针对实时公共 API 进行验证。
每当 OnlyFans 对其脚本重新进行混淆时,签名参数就会发生变化,因此提取器被设计为**运行脚本自身的逻辑**,而不是对其(被故意打乱的)源码进行模式匹配 —— 请参阅 [它如何保持鲁棒性](#how-it-stays-robust)。
## 工作原理
```
mod.py ──fetch──▶ _2313.js ──node extract_config.js──▶ result.json ──▶ signing params
│ ▲
└── 24h cache: reuse result.json if fresh ───────────────┘
```
| 文件 | 作用 |
| --- | --- |
| `mod.py` | 驱动程序。获取实时的 `2313.js`,进行缓存,并调用提取器。 |
| `extract_config.js` | 逆向器。反混淆脚本并写入 `result.json`。Node.js 环境。 |
| `test_sign.py` | 对发送到**公共** OF endpoint 的请求进行签名,并检查其是否被接受 (`200`)。 |
| `result.json` | 输出。包含 `staticParam`、`start`、`end`、`checksumIndexes`、`checksumConstant`。在运行时生成。 |
### 签名算法
```
payload = staticParam + "\n" + time_ms + "\n" + path + "\n" + user_id
hash = sha1(payload).hexdigest()
checksum = abs( sum(hash[i] for i in checksumIndexes) + checksumConstant )
sign = f"{start}:{hash}:{checksum:x}:{end}"
```
## 环境要求
- **Python 3.9+**
- 你的 `PATH` 中的 **Node.js**(供 `extract_config.js` 使用)
## 设置
```
python -m venv .venv
# Windows: .\.venv\Scripts\activate
# Unix: source .venv/bin/activate
pip install -r requirements.txt
```
## 用法
```
# 获取实时脚本并生成 result.json (复用 <24小时 的缓存):
python mod.py
# 强制全新提取:
# (先删除 result.json,然后运行 mod.py)
# 直接在任意已保存的脚本上运行提取器:
node extract_config.js
# 验证 result.json 是否生成被接受的签名:
python test_sign.py
```
## 它如何保持鲁棒性
OnlyFans 会定期对其 `2313.js` 重新运行混淆器。实际上,这只会**重命名标识符**并**重新排序 decoder-call 的参数**(例如 `i(n-744, W)` 变为 `i(W- -290, n)`)—— 这是同一个使用了新随机种子的混淆器。任何硬编码变量名或参数顺序的提取器在每次重新混淆后都会失效。
`extract_config.js` 完全避免了这种情况:
- 它**引导启动脚本自带的字符串解码器**并**执行**它,而不是手动重新推导解码后的字符串。
- 它通过**大括号匹配结构**来提取所需的代码片段,而不是通过匹配特定的压缩名称。
- 它将 checksum 重建为一个**实时函数**,并通过**黑盒探测**(有限差分法)来恢复索引和常量 —— 而不是在源码中计算 token。
- 然后,它针对数百个随机输入,在站点自身的 checksum 上**自验证**恢复出的参数,并且如果出现任何不匹配,它都会**拒绝输出** `result.json`。
结果是:重命名和重新排序都能直接正常运行。唯一会破坏它的因素是真正全新的反自动化措施(例如环境/DOM/`toString` 陷阱),在这种情况下,自检机制会明确报错并停止,而不是写出一个损坏的配置。
## 免责声明
本项目仅用于**教育和研究目的** —— 旨在了解客户端的请求签名 / 反爬虫混淆。它仅读取公开可用的数据,不会绕过身份验证、处理凭证或进行大规模抓取。
使用它可能违反 OnlyFans 的服务条款;您需对如何使用它自行承担责任。按“原样”提供,不提供任何担保。本项目与 OnlyFans 无关,也未获得其认可。
## 许可证
[MIT](LICENSE)
标签:API 接口, GNU通用公共许可证, MITM代理, Node.js, Python, 云资产清单, 反混淆, 数字取证, 无后门, 自动化脚本, 自定义脚本, 逆向工具, 逆向工程