chaser-gt
A high-performance Rust port of GeekedTest - a Geetest v4 captcha solver.
Features
- Automatic Deobfuscation: Constants are automatically updated when Geetest releases new versions - no manual intervention required!
- Multiple Captcha Types: Supports Slide, Gobang, Icon, and AI/Invisible captchas
- TLS Fingerprinting: Uses
rquestfor Chrome-like TLS fingerprinting - Proxy Support: HTTP and SOCKS5 proxy support with authentication
- Async/Await: Built on Tokio for efficient concurrent captcha solving
- Cross-Platform: Works on Windows, macOS, and Linux
Installation
Add to your Cargo.toml:
[]
= { = "https://github.com/ccheshirecat/chaser-gt" }
= { = "1", = ["full"] }
Quick Start
Basic usage:
use ;
async
With Proxy
let solver = builder
.proxy // HTTP proxy
// or: .proxy("socks5://127.0.0.1:1080") // SOCKS5 proxy
.build
.await?;
With User Info (Site-Specific Binding)
Some sites require a user_info parameter to bind captcha verification to a specific user/session:
let solver = builder
.user_info // Site-specific data
.proxy
.build
.await?;
With IPv6/Local Address Binding
For scenarios where you need to route captcha solving through a specific network interface or IPv6 address (e.g., BGP exit nodes):
use IpAddr;
let ipv6: IpAddr = "2a11:29c0:4f50::1".parse.unwrap;
let solver = builder
.local_address // Bind to specific IPv6
.build
.await?;
This is useful for:
- BGP exit nodes: Route each account through a unique /128 from your subnet
- Multi-IP setups: Distribute captcha solving across multiple IPs
- IP consistency: Ensure captcha and subsequent requests use the same IP
Supported Captcha Types
| Type | Enum | Description |
|---|---|---|
| Slide | RiskType::Slide |
Slide puzzle captcha |
| Gobang | RiskType::Gobang |
Five-in-a-row puzzle |
| Icon | RiskType::Icon |
Icon selection captcha (requires icon feature) |
| AI | RiskType::Ai |
AI/Invisible captcha |
Icon Captcha Support
To enable icon captcha support, add the icon feature:
[]
= { = "https://github.com/ccheshirecat/chaser-gt", = ["icon"] }
The icon solver uses:
- ONNX Runtime for neural network inference
- Image processing to detect icon regions
- A bundled classification model to identify arrow directions
The ONNX model (geetest_v4_icon.onnx) is embedded in the binary for easy distribution.
Key Improvements
Automatic Constant Updates
Unlike the Python version which requires manually running deobfuscate.py when Geetest updates, this Rust implementation:
- Checks for new versions on startup
- Automatically deobfuscates the Geetest script
- Caches constants to
~/.cache/chaser-gt/constants.json - Refreshes automatically when Geetest updates
This means the solver stays functional without any manual intervention!
Multi-Round Verification Support
Some sites use multi-round verification where Geetest returns result: "continue" with updated payload. This library automatically handles the retry loop, making it compatible with sites like shuffle.com that require multiple verification rounds.
Architecture
chaser-gt/
├── src/
│ ├── lib.rs # Public API exports
│ ├── client.rs # Main Geeked client
│ ├── deobfuscate.rs # Auto-deobfuscation system
│ ├── sign.rs # W parameter generation
│ ├── error.rs # Error types
│ ├── models.rs # Data structures
│ ├── crypto/
│ │ ├── aes_enc.rs # AES-CBC encryption
│ │ ├── rsa_enc.rs # RSA PKCS1v1.5
│ │ └── pow.rs # Proof of Work
│ └── solvers/
│ ├── slide.rs # Slide captcha solver
│ ├── gobang.rs # Gobang puzzle solver
│ └── icon.rs # Icon captcha solver
└── models/
└── geetest_v4_icon.onnx # ONNX model for icon detection
Building
# Without icon support
# With icon support (includes ONNX runtime)
# With C FFI bindings
C FFI Bindings
chaser-gt provides C FFI bindings for use from Python, Go, Node.js, C/C++, etc.
Building FFI Library
# Library outputs:
# - target/release/libchaser_gt.so (Linux)
# - target/release/libchaser_gt.dylib (macOS)
# - target/release/chaser_gt.dll (Windows)
# C header generated at:
# - include/chaser_gt.h
C Example
int
Compile with:
Python Example (ctypes)
# Load library
= # or .dylib on macOS
# Define result structure
=
# Or use the simpler JSON API
=
=
=
FFI Functions
// Solve captcha, returns struct with all fields
GeekedResult ;
// Solve captcha, returns JSON string
char* ;
// Free result struct
void ;
// Free string
void ;
// Get library version
const char* ;
Running Tests
# Test without icon feature
# Test with icon feature
Running Example
Dependencies
Key dependencies:
rquest- HTTP client with TLS fingerprintingtokio- Async runtimeaes,rsa,sha2- Cryptography (RustCrypto)image,imageproc- Image processing for slide captchaort- ONNX Runtime for icon captcha (optional)
API Reference
GeekedResult
The solve() method returns a GeekedResult containing all the fields needed for verification:
Error Handling
use ;
match solver.solve.await
Requirements
- Rust 1.70+ (for async traits)
- Internet connection (fetches Geetest scripts for deobfuscation)
- Optional: Proxy for production use
License
MIT License - same as the original GeekedTest project.
Acknowledgements
- GeekedTest - Original Python implementation by xKiian