wulu-shumei-bypass
| English | 简体中文 |
A Python framework for interacting with Shumei (数美) CAPTCHA service — handles registration, image fetching, parameter encryption, and verification submission.
The framework itself is fully open-source. Reverse-engineered solvers for specific captcha modes are distributed as private extension modules (see Private Extensions).
Features
- 🧩 Protocol-level integration — handles captcha registration, image fetching, field encryption, and verification submission against the Shumei (数美) API
- 🔐 Correct encryption out of the box — DES-encrypted protocol fields (
selectData,mouseData,duration, etc.) with the right parameter names per protocol version - 🖱️ Realistic trajectory generation — human-like mouse movement paths for slide captchas
- 🧠 Pluggable solver architecture — register your own solver per mode with
@Shumei.add_solver, or use the private extensions - 📦 Multi-mode support —
slide,auto_slide,select,icon_select,seq_select,spatial_select
Installation
uv add "wulu-shumei-bypass[all]"
# or
pip install "wulu-shumei-bypass[all]"
Optional extras
| Mode | Status | Extra |
|---|---|---|
slide |
✅ | wulu-shumei-bypass[cv] |
spatial_select |
✅ | wulu-shumei-bypass[cv] |
auto_slide |
✅ | — |
icon_select |
🔒 | — |
seq_select |
🔒 | — |
select |
❌ | — |
Legend: ✅ = open source · 🔒 = private extension · ❌ = not available
Quick Start
Register & verify (slide)
import asyncio
from wulu_shumei_bypass import Shumei
async def main():
s = Shumei(
organization='your-organization-id',
mode='slide',
)
result = await s.solve()
print(result)
asyncio.run(main())
Register manually & fetch images
import asyncio
from wulu_shumei_bypass import Shumei
async def main():
s = Shumei(organization='your-organization-id', mode='icon_select')
reg = await s.register() # -> RegisterResult (rid, bg, fg, ...)
bg = await s.fetch_img(reg['bg']) # raw bytes of background image
fg = await s.fetch_img(reg['fg']) # raw bytes of foreground image
asyncio.run(main())
Low-level verify with a custom solver
import asyncio
from wulu_shumei_bypass import Shumei
@Shumei.add_solver('seq_select')
def solve_seq(bg: bytes) -> list[list[float]]:
# return a list of [x_ratio, y_ratio] click points in click order
...
async def main():
s = Shumei(organization='your-organization-id', mode='seq_select')
reg = await s.register()
result = await s.fverify(reg)
print(result) # {'code': 1100, 'riskLevel': 'PASS', ...}
asyncio.run(main())
API Overview
Shumei(**params)
| Param | Type | Default | Description |
|---|---|---|---|
organization |
str |
(required) | Organization ID assigned by Shumei |
app_id |
str |
default |
Application ID |
channel |
str |
default |
Channel identifier |
version |
str |
1.0.4 |
Protocol version (rversion) |
sdkver |
str |
1.1.3 |
SDK version |
mode |
Mode |
slide |
Captcha mode |
lang |
str |
zh-cn |
Language |
os_type |
OSType |
web_pc |
OS type (web_pc / web_mobile) |
captcha_uuid |
str |
auto | Session UUID (auto-generated) |
xhr_hooked |
bool |
True |
Whether the target site hooks XHR |
custom_data |
dict |
{} |
Extra data sent with registration |
Methods
await s.register() -> RegisterResult— obtain a new captcha challengeawait s.fetch_img(path: str) -> bytes— download a captcha imageawait s.fverify(reg: RegisterResult) -> VerifyResult— submit a solutionawait s.solve(retry: int = 3) -> VerifyResult— register → solve → verify until PASS@Shumei.add_solver(mode)— register a custom solver for a mode
Solver contract
Each solver receives the image bytes and returns click coordinates as ratios (0.0–1.0 relative to image dimensions), in click order:
| Mode | Signature |
|---|---|
slide |
(bg: bytes, fg: bytes) -> float (slide ratio) |
auto_slide |
(no solver needed) |
spatial_select |
(bg: bytes, order: str) -> tuple[float, float] |
icon_select |
(bg: bytes, fg: bytes) -> list[list[float]] |
select |
(bg: bytes, order: list[str]) -> list[list[float]] |
seq_select |
(bg: bytes) -> list[list[float]] |
Private Extensions
Solvers for icon_select, seq_select, and select are not bundled with this open-source package. They live in private repositories and are loaded automatically when installed:
wulu-shumei-bypass-iconwulu-shumei-bypass-seq
Contact the author for access to the private extensions.
Development
uv sync --dev
uv run pytest
Disclaimer
⚠️ For educational and research purposes only. Use at your own risk.
This project is intended solely for security research, reverse-engineering education, and interoperability testing. The author is not responsible for any misuse, unauthorized access, or violation of third-party terms of service. Always ensure your use complies with applicable laws and the terms of the services you interact with.
License
Metadata
Release files for wulu-shumei-bypass 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| wulu_shumei_bypass-0.1.1.tar.gz | 48.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| wulu_shumei_bypass-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 62.5 kB
Release files / wulu_shumei_bypass-0.1.1.tar.gz
| Download URL | wulu_shumei_bypass-0.1.1.tar.gz |
|---|---|
| Size | 48.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6ad3e1fddad7453d9933702ea05b3e0319055cab58fc4ea0ceb35dbf83d73c1c
|
|
BLAKE2b-256 checksum How to use checksums |
9c6773a95b03758d32d1553388a3adf171ec70b859642bb91658c49245add60b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / wulu_shumei_bypass-0.1.1-py3-none-any.whl
| Download URL | wulu_shumei_bypass-0.1.1-py3-none-any.whl |
|---|---|
| Size | 14.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2e6aa24ae0fdb0e0ac87de0615450da8f2b53690e6046bb6340ec48c44aac083
|
|
BLAKE2b-256 checksum How to use checksums |
f8589e403a39f316f49b5afced954e3406c1005e14f653b31d3b40dae11e73f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for wulu-shumei-bypass 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.