You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
⭐ Give this repo a star if it's useful to you! ⭐
🚀 If it gets enough attention, I'll update and improve the source code.
⚠️ Archived — for educational purposes only. This project once worked but is no longer operational.
A high-performance HTTP service that solves ArkoseLabs FunCaptcha challenges. It reproduces a real browser's TLS/JA3 fingerprint, encrypts the browser environment (BDA) exactly like the JS client, drives the full Arkose challenge flow, and answers the visual waves via a pluggable recognition provider.
Written in Go, single binary, no external runtime dependencies beyond an image-recognition API.
Features
Browser-accurate TLS/JA3 + HTTP/2/HTTP/3 fingerprints via bogdanfinn/tls-client
Native BDA encryption (RSA-OAEP + AES-GCM) matching the Arkose client
Automatic RSA public-key recovery from obfuscated api.js
Multithreaded proof-of-work (PoW) engine, solved locally or offloaded to the caller
Per-solve fingerprint rotation with proxy-geo timezone/locale syncing
Async task API with owner-token auth, plus a synchronous /solve endpoint
Request lifecycle: a client posts a challenge to /createTask (async) or /solve (sync); the server picks a fingerprint, bootstraps api.js, mints a session token at /fc/gt2/, pulls game data from /fc/gfct/, answers each wave through the recognition provider, and (when PoW is required) either solves it locally or hands it back to the client via /submitPow. The final captcha token is returned.
File Reference
Entry points
File
Responsibility
cmd/server/main.go
Service entry point: seeds RSA keys into config and starts the HTTP API server.
cmd/probe/main.go
CLI diagnostic that issues one request through the TLS transport to inspect the emitted fingerprint.
API layer (internal/api)
File
Responsibility
server.go
HTTP routes and handlers; orchestrates async solves, PoW hand-off, concurrency limits, and owner-token auth.
session_store.go
In-memory task store with PoW hand-off channels and a background reaper that expires stale tasks.
Solver (internal/solver)
File
Responsibility
solver.go
Top-level orchestrator: validates the target, runs bootstrap, then the wave-answering loop.
Builds the JA3/TLS ClientHello profile per browser.
Config & Models
File
Responsibility
config.go
Central configuration loaded from environment variables and rsa_keys.json.
models.go
Shared request/response and task/challenge structs.
Quick Start
# Build
go build -o solver ./cmd/server
# Run (defaults: HOST=127.0.0.1, PORT=2323)
RECOGNITION_PROVIDER=<provider> RECOGNITION_API_KEY=<key> ./solver
Endpoints
Method
Path
Purpose
POST
/createTask
Start an async solve; returns a task_id.
GET
/getTask
Poll task status/result.
POST
/submitPow
Submit a client-solved PoW for a pending task.
POST
/abortPow
Abort a pending PoW.
POST
/solve
Synchronous solve.
POST
/solve/{id}/continue · /solve/{id}/abort
Continue or abort a running solve.
GET
/health
Liveness check.
Configuration
Variable
Description
HOST / PORT
Listen address (default 127.0.0.1:2323).
RECOGNITION_PROVIDER / RECOGNITION_API_KEY
Image-recognition backend and credentials.
NEGT_FP_PROFILE_SCOPE
Fingerprint scope (e.g. desktop, iOS, random).
NEGT_FP_RANDOM_WEIGHTS
Weights for random scope selection.
NEGT_ARID_SEED
Seed for the x-ark-arid header.
NEGT_RSA_PUBLIC_KEY / NEGT_RSA_PUBLIC_KEY_HEX
Override the RSA public key.
Security note: the server has no built-in authentication unless an owner token (X-API-Key) is supplied per task. Bind it to localhost or place it behind an authenticated gateway before exposing it.
Layout
cmd/ entry points (server, probe)
internal/ api · solver · recognition · arkcrypto · rsakey · pow · fingerprint · transport · config · models
fingerprint/ browser fingerprint records (per scope)
rsa_keys.json recovered/known Arkose RSA public keys
Disclaimer
This repository is published strictly for educational and research purposes — to document how browser fingerprinting, TLS/JA3 emulation, BDA encryption, and proof-of-work challenges work. The project was operational in the past and is no longer functional against current Arkose deployments.
It is shared as a reference for security researchers and learners. Do not use it to bypass protections on systems you do not own or are not authorized to test, or in any way that violates a service's terms of use or applicable law. The author accepts no liability for any misuse.