来源:
登录过程-https解密.saz(778 个解密会话,用户 real longwu988 账号密码登录全程) 本文档 100% 实测,取代此前所有猜测。
1. POST api.jiyuhz.cn/auth/v3/login/safe/byPwd ← 密码登录(第1次,无验证码 → 101000 需行为校验)
2. (网易易盾行为验证 + Geetest 滑块)
3. POST api.jiyuhz.cn/auth/v3/login/safe/byPwd ← 密码登录(第2次,带 _captcha_ → 200 成功!)
4. POST user-api.996hezi.com/v1/WyAnticheat/riskCheck ← 网易反作弊
5. GET pc-api.996hezi.com/box/v1/getTodayOpen?gameId=206923 ← 今日开服列表
6. POST pc-api.996hezi.com/v1/homeapi/gameindex/EnterGameClient ← 启动游戏!
7. GET list-box.dhsf.xqhuyu.com/modlist/modlist_110585.txt ← 游戏配置
8. GET list-box.dhsf.xqhuyu.com/box_serverlist/206923.txt ← 服务器列表
9. GET ws.996hezi.com/ws/pushMessage (WebSocket) ← 盒子推送
POST https://api.jiyuhz.cn/auth/v3/login/safe/byPwd
Content-Type: application/json;charset=UTF-8
Origin: https://pc.hzwlan.com
Referer: https://pc.hzwlan.com/
User-Agent: Mozilla/5.0 ... 996Box/5.1.1 Chrome/108 ... Electron/22.3.4 ...
X-BOX-AUTHORIZATION: BOXAPP-SHA256 NONCE=<32位大写随机>;TIMESTAMP=<ms>;SIGNATURE=<sha256hex>
appv: 5.1.1.9007
box-agent: device:pc;channel:;appv:5.1.1.9007;deviceOs:win32 10.0.22631 32bit;deviceId:<MAC>;deviceBrand:;deviceModel:;netType:;gameOwner:;isSimulator:false;
device: pc
deviceId: <MAC地址,如 00:15:5d:0a:04:00>
{
"loginInfo": "<加密hex串,含账号密码,342字符>", // 加密算法待逆向(AES/RSA,从 996box Electron JS 里找)
"channel_id": "",
"game_id": "",
"inviter_uid": "",
"needConfirmLogin": true,
"_captcha_": "<base64 JSON:captchaId + captchaOutput + genTime + lotNumber + passToken>" // 第2次必带
}
{"code":101000,"msg":"需要进行行为校验","data":null,"success":false}
{
"code": 200,
"msg": "登录成功",
"data": {
"token": "eyJ0eXAiOiJKV1Qi...", // JWT(HS256, iss=996box, sub=uid, 30天有效)
"loginCertificate": {
"certificateTime": 1789459942,
"certificate": "000000.62f7cc..." // 登录证书(后续进游戏用)
},
"userInfo": {
"id": 1186115037, // uid
"account": "longwu988",
"phone": "177****6757",
"nick_name": "龙武",
"enterGame": true
}
},
"success": true
}
{
"token_version": "V2",
"app_channel": "9007",
"sub": 1186115037, // uid
"device_id": "00:15:5d:0a:04:00",
"app_version": "5.1.1",
"login_time": 1789459942,
"iss": "996box",
"exp": 1792051942, // 30天后
"device": "pc",
"iat": 1789459942,
"jti": "rqDLsPwnHKiQEIuF5"
}
格式:
BOXAPP-SHA256 NONCE=<32位大写字母数字>;TIMESTAMP=<毫秒时间戳>;SIGNATURE=<64位hex>
待逆向:SIGNATURE = SHA256(?) 的具体拼接方式(nonce+timestamp+secret?)。
线索:sdkAppkey: yAeOlBTx4JQg + sdkAppid: GAjWNTqNpOVx(env.json / EnterGameClient body 里有 appid)。
推测签名材料含 appkey + nonce + timestamp + body。
GET https://pc-api.996hezi.com/box/v1/getTodayOpen?gameId=206923
token: <JWT>
+ 同上一套 X-BOX-AUTHORIZATION 头
响应(明文 UTF-8):
{"code":200,"msg":"操作成功","data":[
{"server_name":"霸业10服","serverid":14414736,"open_time":1789401600,
"section":" 00:00","state":1,"box_game_id":206923,"main_serverid":"14414736"},
{"server_name":"霸业11服","serverid":14414737,"section":" 07:00",...},
{"server_name":"霸业12服","serverid":14414738,"section":" 10:00",...},
...
]}
POST https://pc-api.996hezi.com/v1/homeapi/gameindex/EnterGameClient
token: <JWT>
Content-Type: application/json
{
"box_game_id": 206923,
"serverid": 14403981, // 选中的服
"device_info": "{\"type\":\"pc\",\"model\":\"pc\",\"os\":\"Win10\",\"width\":1920,\"height\":1032,\"lang\":\"zh-CN\",\"id\":\"43b2d8df251be893bf57a67560b1e74b\",\"net_type\":\"unknown\",\"mac\":\"00:15:5d:0a:04:00\",\"ua\":\"Mozilla...\"}",
"appid": "GAjWNTqNpOVx"
}
响应(gzip)包含 download_info(游戏名/描述)— cq2.exe 由 Electron 本地拉起,不走此 HTTP。
gfgame.dhsf.xqhuyu.com,代理端口 12000(serverlist x 字段)SetNetMessageTypeSData(0)msg_id/recog/param1/param2/param3/len 全 little-endian int32account/Encode6BitBuf(password)/Encode6BitBuf(channelID)/otpType/otpCode| 项 | 旧认知(错) | 实测真相 |
|---|---|---|
| 登录域名 | api.996hezi.com | api.jiyuhz.cn(登录页 pc.hzwlan.com) |
| 登录端点 | /userApi/v1/Login/account | /auth/v3/login/safe/byPwd(JSON body) |
| 认证头 | sign 参数 | X-BOX-AUTHORIZATION: BOXAPP-SHA256 ... 请求头 |
| 密码格式 | 明文/Encode6BitBuf | loginInfo 加密 hex(算法在 Electron JS 里,待逆向) |
| 验证码 | Geetest 独立 | 网易易盾(行为) + Geetest v4 滑块(captcha 字段) |
| 今日开服 | 猜的 /Zone/list | /box/v1/getTodayOpen?gameId= |
| 启动游戏 | 猜的 /Game/launch | /v1/homeapi/gameindex/EnterGameClient |
| token | 40字符 | JWT (HS256, 30天有效, header token:) |
// 源码位置: src/browserRender/static/js/main.d44f9b41.chunk.js (offset ~63213)
var t = new JSEncrypt(); // rt.a = jsencrypt 库
t.setPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAjCQvqNPnOZm6GVDqeOb5S2pJtbN3FMZ8\n vddW3B2f3jB0mf7vd1B+yjjfex2A5XVxr4YwAY/w4d1/m3v3Bn/qgAnLMKnpjeEwxQU3cU81eXAam4fMB+\n nlmC291quIuC0qFFL8YgT2bDjARsMRYbmKd6LTc58sKYeJD2MvkkOdKwIDAQAB");
loginInfo = t.encrypt(JSON.stringify({username, password}))
.replace(/\+/g, "-") // + -> -
.replace(/\//g, "_"); // / -> _
JSON.stringify({username, password})(注意:等到的 hex 长度和抓包一致——抓包里 342 字符是 base64url 后的 RSA 2048 输出)// 源码位置: src/bridge/mainPreload.js (E2SignCer 函数)
SIGN_KEY = 'BB0AAAC906FC4B7CADB116A213D46689' // 32 字节密钥(硬编码)
NONCE = 32 位随机大写字母数字
rqtime = Date.now() 毫秒
value = [
method, // "POST" / "GET"
url_with_params, // 完整 URL(含 query string)
rqtime, // 毫秒时间戳
nonce, // 32位随机
deviceType, // "pc"
deviceId, // MAC "00:15:5d:0a:04:00"
appv, // "5.1.1.9007"
token, // JWT 或空字符串
navigator.userAgent,
(body_json 或 "\n")
].join("\n") + "\n"
signature = HMAC_SHA256(value, SIGN_KEY).hex()
header = `BOXAPP-SHA256 NONCE=${nonce};TIMESTAMP=${rqtime};SIGNATURE=${signature}`
appv: 5.1.1.9007
box-agent: device:pc;channel:;appv:5.1.1.9007;deviceOs:win32 10.0.22631 32bit;deviceId:<MAC>;deviceBrand:;deviceModel:;netType:;gameOwner:;isSimulator:false;
device: pc
deviceId: <MAC>
token: <JWT> # 登录后的接口带