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
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 fromcom.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 froml11l11l1lIl.java and l11l111l1lll.java:
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):
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 froml111l1111lI1l.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.