快手设备didegid注册流程

完整注册流程
┌─────────────────────────────────────────────────────────────┐
│ 第一步 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 事件:

file

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": "..."}包装
点赞

发表回复