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, 工作量证明, 序列脚本处理, 授权安全研究, 数字取证, 数据可视化, 日志审计, 程序破解, 自动化脚本, 蓝队分析, 验证码求解器, 验证码绕过, 验证码识别