快手设备 did/egid 注册流程
内容概要总结
爬虫逆向知识站(lxspider)的一页逆向笔记,梳理快手设备标识 did/egid 的完整注册流程。流程分步:第一步 POST .../rest/infra/gdfp/report/android 上报加密 deviceInfo,服务器返回 egid;第二步 POST .../rest/n/log/client/collect 上报多个日志事件;后续再走 .../antispam/sdk、.../antispam/pluginManage、.../antispam/dataReport,全部返回 result:1 才算注册成功。关键细节:did 为 ANDROID_ 前缀加 16 位 hex,客户端随机生成(即 deviceInfo 的 #66 字段);egid 为 64 字节 hex,由服务器第一步返回(形如 DFP51921CA87...);判定 did/egid 有效的方法是用业务接口(如 /rest/antman/feed/profile2)能否拉到数据。deviceInfo 生成链路为 80+ 字段 → Protobuf 序列化 → AES-128-CBC(PKCS7)→ Base64 → URL 编码,AES 密钥 MLjDCGseHHsIDsmd、IV ziwNnWVzvLfncRLJ;sign = Base64(SHA1(deviceInfo 密文含 CRLF 换行 + SALT))。ulog 日志链路为 Protobuf → GZIP → AES-128-CBC。antispam 请求则 sign = MD5(appkey+secretkey+timestamp),body 经 GBK JSON → GZIP → RC4(固定 S 盒、无 KSA)→ AES-128-CBC → Base64 包装。
原文内容(原文即中文)
Lx
完整注册流程
┌─────────────────────────────────────────────────────────────┐
│ 第一步 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二进制)
body 加密链路
日志事件 → Protobuf序列化
→ GZIP 压缩
→ AES-128-CBC 加密 (PKCS7)

- 1 = ANDROID_{did}@{egid} ← 必须带 @egid 后缀,缺失会返回 result:11
- 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": "..."}包装