Skip to main content

wulu-shumei-bypass

PyPI PyPI - Python Version License GitHub Repo stars

| 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 supportslide, auto_slide, select, icon_select, seq_select, spatial_select

Installation

uv add wulu-shumei-bypass
# or
pip install wulu-shumei-bypass

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 challenge
  • await s.fetch_img(path: str) -> bytes — download a captcha image
  • await s.fverify(reg: RegisterResult) -> VerifyResult — submit a solution
  • await 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-icon
  • wulu-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

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wulu_shumei_bypass-0.1.0.tar.gz (46.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wulu_shumei_bypass-0.1.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file wulu_shumei_bypass-0.1.0.tar.gz.

File metadata

  • Download URL: wulu_shumei_bypass-0.1.0.tar.gz
  • Upload date:
  • Size: 46.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","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}

File hashes

Hashes for wulu_shumei_bypass-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e25b5bb3d0b03e2166fe55253fc629d1287a90c32a66965184542e190af01bf5
MD5 d26be74eaeccd24b5e73ab875d6e2fae
BLAKE2b-256 2d201587ae0f84a721cf0b5ba773e1fb97258e63a6b2595c2abe71d018928bc9

See more details on using hashes here.

File details

Details for the file wulu_shumei_bypass-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: wulu_shumei_bypass-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","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}

File hashes

Hashes for wulu_shumei_bypass-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b1a1d81bac6a68c1fb8a463e609ab5ee75c010ae98b72a53d8dadc488e0465e8
MD5 872c13ff75d10821278c6695b57112fd
BLAKE2b-256 dcd4921f837c61200646badcafc81f6277abb3ec111b29269507e762773fb463

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page