libxlua.so’s CalcChatSign helper performed in a later research pass to close an open question (see the feasibility table below and Findings & further work). The question that matters: does anything below the protocol layer block a clean-room Go client? For the one existing account tested against production, the answer is no, see the Warning below for the full scope.
libil2cpp.so confirms the hot-update architecture
Only 1.8 MB, small for a Unity IL2CPP binary, and for good reason: it contains zero strings for AESHelper, NetworkManager, SendLuaMessage, or even generic Unity type names. Assembly-CSharp is never AOT-compiled here at all, everything gameplay-relevant genuinely lives in the hot-update .mdl tier, interpreted via HybridCLR. This is a clean, non-ambiguous confirmation, not an absence of evidence.
Feasibility table
| Mechanism | Where it enters the wire protocol | Blocking risk |
|---|---|---|
ShuMei device fingerprint (boxId) | login field shumeiBoxId | None identified, live-tested (see Live validation against production):
empty/synthetic values are accepted without issue for a brand-new guest account; reconnecting into an
established account initially looked ShuMei-gated but turned out to be an unrelated
packageName/platform/appVersion identity mismatch against the access
token, fixed, reconnect worked at the time against the code as it then shipped (a later security fix
replaced part of the request with placeholders, and whether reconnect still succeeds is now an open
question, see Live validation against production), and no ShuMei-specific block was
ever found |
| Tencent ACE anti-cheat report | Not found on the game-server protocol at all, local IPC to Tencent’s own backend | None identified |
SecurityCode/OneCode/CoreV | login request, ~3 fields | None: plain MD5 with a hardcoded salt, fully reproducible |
packageSign (despite the name, not a cert hash, see Findings & further work) | login request | None: actually SHA1(packageName), a constant public string; trivially
reproducible without touching the APK’s real signature. The field that genuinely depends on the signing
cert is psh (see Identity, login & session), and the Go client reproduces it correctly
for the Android identity, under iOS mode it still sends the Android-derived value, since no live iOS
capture of this field exists to confirm what a real iOS client would send instead. |
libxlua.so CalcChatSign/AES/MD5 helpers | Lua-native crypto call from ChatNetManager:InitWebSocketInst (alternate chat transport) | None, resolved via direct ARM64 disassembly (see Findings & further work):
plain unkeyed MD5(MD5(appId+uid)+timestamp), byte-identical to the known C# formula, no custom
key material |
| TLS / certificate validation | All HTTPS traffic | None: standard chain validation, no pinning evidence found anywhere |
| Google Play Integrity / SafetyNet | , | Not used at all in this build |