完整注册流程
┌─────────────────────────────────────────────────────────────┐
│ 第一步 POST .../rest/infra/gdfp/report/android│
│ 上报加密 deviceInfo → 服务器返回 egid │
├─────────────────────────────────────────────────────────────┤
│ 第二步 POST .../rest/n/log/client/collect │
│ 上报多个日志事件(protobuf+gzip+AES) │
├─────────────────────────────────────────────────────────────┤
│ 后续 │
│ POST .../antispam/sdk │
│ POST .../antispam/pluginManage (多次) │
│ POST .../antispam/dataReport (多个事件) │
│ ↑ 请求全部返回 result:1 才算注册成功 │
└─────────────────────────────────────────────────────────────┘
产出物:
- did:ANDROID_ + 16位hex(客户端随机生成,即 deviceInfo 的 #66 字段)
- egid:64字节hex,服务器第一步返回(形如 DFP51921CA87...)
有效性判定:did/egid 可用于业务接口(如/rest/antman/feed/profile2)拉取数据,则注册有效。
gdfp 设备指纹上报
deviceInfo 生成链路
80+设备参数字段
→ Protobuf序列化
→ AES-128-CBC 加密 (PKCS7填充)
→ Base64 编码
→ URL编码
→ deviceInfo 参数
AES参数:
Key: MLjDCGseHHsIDsmd
IV: ziwNnWVzvLfncRLJ
模式:CBC + PKCS7
sign 算法
sign = Base64( SHA1( deviceInfo密文(含CRLF换行) + SALT ) )
关键:SHA1 的输入是带 CRLF 换行的 Base64 密文原文,而非二进制密文。输出为 20 字节 SHA1 摘要再 Base64(28字符)。
ulog 日志上报
- bodyMd5 = MD5(加密后的body二进制)
sig2= 可以用固定值
body 加密链路
日志事件 → Protobuf序列化
→ GZIP 压缩
→ AES-128-CBC 加密 (PKCS7)
body 含 5 个 protobuf 事件:

device_info 子消息关键字段:
- 1 =
ANDROID_{did}@{egid}← 必须带 @egid 后缀,缺失会返回 result:11 - 6 = egid
app_info 子消息: - 4/12 =
ANDROID_MIGU_WS_XXL_CPC,6← 必须与URL的oc参数一致,不一致返回 result:11 - 14 = robust_id JSON(随机32hex)
antispam 风控请求
常量
secretkey :固定
appkey : 固定
sign : MD5(appkey + secretkey + timestamp)
body 加密链路
JSON 明文 (GBK编码)
→ GZIP 压缩
→ RC4 流加密 ( 固定S盒, 无KSA)
→ AES-128-CBC 加密 + PKCS7 (ksriskctlbusinss)
→ Base64 编码
→ {"data": "..."}包装