Skip to main content
shumeiBoxId is the value the SFS2X Login request sends as its ShuMei anti-fraud device fingerprint. It is not a locally-invented token: it is the smid (ShuMei Machine ID) that the ShuMei backend assigns in response to uploading a device profile to /deviceprofile/v4. This page documents that flow, recovered from the Obfuscator-LLVM-hardened libsmsdk.so and the com.ishumei.smantifraud Java classes, so a from-scratch Go client can register a device and mint its own shumeiBoxId.

Three names, three different things

The protocol uses three ShuMei-related identifiers that are easy to conflate:

The flow

Only the background resend (l11l11l1l1Il) adds "retry":1. The error handler starts it for codes other than 1902, so the first request never carries retry.

Configuration values (byte-exact)

All recovered from com.sdkmanager.SmSdkManager and com.ishumei.smantifraud: The SDK’s own built-in datasites are region-pinned on fengkongcloud.com (fp-it / fp-sa-it / fp-na-it-acc, each with an api-fp-retry-* companion). Last War bypasses them entirely with the shumei-api.lastwargame.com:19091 proxy above, so the region mapping matters only as documentation.

Cryptography

The SDK’s protection is hybrid RSA-OAEP + AES-256-CBC, decompiled from l11l11l1lIl.java and l11l111l1lll.java:
The data sub-object wires it together: pri carries the RSA-OAEP-encrypted AES key (rsaOaep(cert, aesKey)), so the server can encrypt its reply with that same key and the client decrypts it AES-CBC. This shape belongs to the cloudconf request (/v3/cloudconf), not the deviceprofile request. Its data sub-object looks like this (from l11l111l1lll’s request builder):
That is RSA-OAEP with SHA-256 as both the message digest and the MGF1 hash, and an empty OAEP label (PSpecified.DEFAULT). In Go, rsa.EncryptOAEP(sha256.New(), rand.Reader, pub, msg, nil).

Profile fields (byte-exact names)

The device-profile JSON field names come from l111l1111lI1l.java:
encode is the numeric protection-shape id (2, written by the native w1; its companion compress id 3 lives inside the native sub-payload). The data field is the protected fingerprint; smid is empty on first registration and echoed from the cached value afterward.

Response codes

The detail object (l1l11I1l.l11l1111I11l) carries deviceId (the smid), oldDeviceId, sid, c, t (l11l111llI1l.java).

Go implementation

internal/shumei reimplements this. BoxID(client, deviceID) builds the profile, protects the fingerprint with the embedded iShumei public key, POSTs it, and returns detail.deviceId (the shumeiBoxId). main.go’s -cs-shumei-gen flag calls it before building Login params when no shumeiBoxId was supplied; a failure only logs a warning and falls back to the empty value the server already accepts. Status (live-tested 2026-10-10): the endpoint is reachable and validates organization (an empty body returns code:9101 "invalid organization"; the recovered value is accepted). However the current minimal profile returns {"code":1902} with no smid, so it does not mint a real shumeiBoxId. The real request body is produced entirely by native w1. The Go DeviceProfile struct was not derived from it, so it is not a partial version of the real body. The nested data/pri object described above belongs to the cloudconf request, not to deviceprofile. BoxID also returns the bare deviceId, while the Login expects "B" + deviceId. -cs-shumei-gen is safe to ship, because it falls back to an empty value on any failure, but it does not obtain a real smid. What is byte-exact vs. reconstructed: the configuration values, field names, endpoint, response shape, and crypto primitives (RSA-OAEP spec, AES-256 CBC IV) are byte-exact from decompilation. The data sub-object assembly and the aNN device-data collector are not yet reproduced.