nilprovai/funcaptcha-proof-of-work
GitHub: nilprovai/funcaptcha-proof-of-work
基于 Go 语言实现的 Arkose Labs FunCaptcha 工作量证明求解器,支持双模式 PoW 解析与序列脚本处理。
Stars: 2 | Forks: 1
# FunCaptcha PoW 求解器(Go 语言实现)
这是一个基于 Go 语言实现的 FunCaptcha PoW 求解器,FunCaptcha 工作量证明 (proof of work) 求解器,以及用于 Arkose Labs 挑战流程的 Arkose PoW 求解器,包括 Roblox Arkose proof-of-work。
致谢:nilcute,Discord UID `1207080226019086438`。
也可通过以下关键词搜索:funcaptcha pow, funcaptcha pow solver, funcaptcha proof of work, fun captcha proof of work, arkose pow, arkose pow solver, arkose labs pow, roblox funcaptcha pow, golang funcaptcha solver。
搜索关键词:funcaptcha proof of work solver, arkose labs proof of work, golang captcha pow solver, roblox arkose pow, work_type 0, work_type 1, arkose sequence javascript, pows/setup parser, funcaptcha pow golang, arkose proof of work go。
## 概述
本仓库包含一个基于 Go 语言实现的 FunCaptcha 工作量证明求解器,专为 Arkose Labs 工作量证明挑战设计。如果您正在搜索 `funcaptcha pow`、`funcaptcha proof of work`、`arkose pow` 或 `arkose labs pow solver` 等术语,本项目正是针对这一具体问题领域。
该求解器依赖于:
- 由 `pows/setup` 端点返回的 PoW 设置数据
- 用于推导最终工作逻辑的 JavaScript `sequence` 文件
- 两种受支持的 Arkose 工作模式之一
受支持的模式:
- `work_type = 0`:前缀难度工作量证明
- `work_type = 1`:分割目标哈希工作量证明
该项目还包含用于 JavaScript 反混淆的辅助代码以及示例用法,这些示例会记录接近最终提交格式的 payload。
## 功能
- 使用 Go 编写,易于嵌入 Go 服务或工具中
- 支持本仓库中使用的两种已知 Arkose PoW 变体
- 接受 `seed` 和 `splits` 输入的原始 JSON
- 使用获取的 `sequence` JavaScript 作为运行时输入进行求解
- 包含 PoW 类型 0 和 PoW 类型 1 的示例流程
- 包含用于处理混淆 sequence 脚本的 JavaScript 反混淆步骤
## 项目结构
```
.
├── main.go
├── deobfuscate/
├── logger/
├── proof-of-work/
└── tmp-js/
```
- `main.go`:两种受支持工作量证明模式的示例运行器
- `proof-of-work/`:核心求解器实现
- `deobfuscate/`:JavaScript 反混淆辅助工具
- `logger/`:日志工具
- `tmp-js/`:用于 JavaScript 处理的临时目录
## 环境要求
- Go
- Node.js
- `obfuscator-io-deobfuscator`
全局安装 JavaScript 反混淆器:
```
npm install -g obfuscator-io-deobfuscator
```
## 求解器工作原理
1. 从兼容 Arkose 的 `pows/setup` 端点获取 PoW 设置数据。
2. 从响应中读取所需字段。
3. 从返回的 `sequence` URL 获取 JavaScript。
4. 将 JavaScript 源代码传递给相应的 Go 求解器。
5. 根据返回的 nonce / attempts / transform 数据构建最终 payload。
设置数据中应包含的核心字段:
- `pow_token`
- `sequence`
- `timeout`
- `work_type`
- `work_config`
示例设置 URL:
```
https://arkoselabs.roblox.com/pows/setup?session_token=
```
## Arkose PoW 设置示例
示例响应结构:
```
{
"pow_token": "524189bb8be339ed1.0603384505",
"url": "https://arkoselabs.roblox.com/cdn/fc/assets/pow/2.2.0/standard/index.html",
"sequence": "https://arkoselabs.roblox.com/powseq/2vv3c40c-96b3-4f8f-bd86-49c2cec773fa/target/2164.js?Expires=1773217606&Signature=...&Key-Pair-Id=K2GG2TVX8JMCPF",
"timeout": 75000,
"work_type": 1,
"transparent": false,
"embedded_session_id_enabled": true,
"work_config": {
"seed": [
{
"2VwNqD8MlHPo70ZvQ6": "EGydinrV5FFO3zA82t",
"EWRLwH2j6FKVo98BAL": "GR57pEsPHFipdsLl9d",
"iXXSY2LIF9lGxoQwEd": "0hdj6nuLRhB3ab4HWz"
}
],
"splits": [
{
"target_hash": "884e5d85d3c0388697d8e0c0213d184a76fb14c178746c14ed6126c2d117932798e1e0354858741154c3017e8a38e1b9a68fdbce05bfc119ec7be8f3174be55b"
}
],
"starting_nonce": 34565
}
}
```
## Work Type 映射
- `work_type = 0` -> 调用 `SolveType0WithScript`
- `work_type = 1` -> 调用 `SolveType1WithScript`
- `jsCode` -> 从 `sequence` URL 获取的 JavaScript
## 用法:Type 0
对于 `work_type = 0`,需读取:
- `work_config.seed`
- `work_config.count`
示例:
```
solution, err := solver.SolveType0WithScript(ctx, jsCode, captcha.POWType0Config{
Seed: seedRaw,
Difficulty: int(count),
})
```
预期结果 payload 结构:
```
{
"pow_token": "...",
"session_token": "...",
"hash_rate": 0,
"execution_time": 0,
"result": {
"result": "nonce",
"iteration_count": 12345
}
}
```
## 用法:Type 1
对于 `work_type = 1`,需读取:
- `work_config.seed`
- `work_config.splits`
- `work_config.starting_nonce`
示例:
```
solution, err := solver.SolveType1WithScript(ctx, jsCode, captcha.POWType1Config{
Seed: seedRaw,
StartingNonce: int(startingNonce),
Splits: splitsRaw,
})
```
预期结果 payload 结构:
```
{
"pow_token": "...",
"session_token": "...",
"hash_rate": 0,
"execution_time": 0,
"transform": [],
"result": [
{
"target_hash": "...",
"attempt_count": 12345
}
]
}
```
## 最小集成流程
```
setupURL := "https://arkoselabs.roblox.com/pows/setup?session_token=" + sessionToken
// 1. Fetch setup JSON from setupURL
// 2. Extract work_type, pow_token, sequence, and work_config
// 3. Fetch jsCode from the sequence URL
// 4. Call the correct solver based on work_type
// 5. Build or submit the final payload
```
## 示例运行器
仓库中的 `main.go` 已包含以下示例调用:
- PoW Type 0 求解
- PoW Type 1 求解
- 将输出记录为格式化的 JSON
## 注意事项
- Type 0 接受 `seed` 的原始 JSON。
- Type 1 接受 `seed` 和 `splits` 的原始 JSON。
- 求解器构造函数接受一个 JavaScript 临时目录和超时秒数。
- 当前示例记录的 payload 接近最终提交格式。
## 免责声明
本项目仅供教育、研究和授权安全测试目的使用。
请勿在未获得所有者明确许可的情况下,对本仓库所涉及的系统、服务或账户进行测试或使用。作者和贡献者不对因使用本代码而导致的误用、滥用、服务违规或损害负责。
## SEO 相关主题
本 README 专门针对以下相关搜索进行了优化:
- Go FunCaptcha solver
- Golang Arkose Labs proof-of-work
- Roblox Arkose PoW
- Arkose `pows/setup` 响应处理
- Arkose `sequence` JavaScript 处理
- `work_type 0` 和 `work_type 1` 工作量证明求解
标签:Arkose Labs, arkose-pow, EVTX分析, FunCaptcha, funcaptcha-pow, Golang, Go语言, JavaScript反混淆, JS逆向, MITM代理, pows/setup解析, PoW求解器, Roblox验证, T1059.007, Web安全, 加密挑战, 反爬虫对抗, 哈希计算, 安全工具包, 安全编程, 工作类型0, 工作类型1, 工作量证明, 序列脚本处理, 授权安全研究, 数字取证, 数据可视化, 日志审计, 程序破解, 自动化脚本, 蓝队分析, 验证码求解器, 验证码绕过, 验证码识别