本文最后更新于 2024-07-06,文章内容可能已经过时。

前面提醒

脚本代码在GitHub

之前很久之前就搞过了,但是最近感觉还有一些用,重新整理一遍。

7c6323b67bca2aeb4d2e9a763da6d60

开启抓包重新注册一遍,走个流程重新抓个包整理一下。

哇去!第一眼看到有图形验证码校验的时候心都凉了,感觉这下要麻烦了,不知道啥时候加的,已经很久没有用过 PikPak 了。

cf390b098928e066ceecd89d90527db

先尝试看一下这个验证码,验证码搞不定的话整个流程就G了。

验证码校验

查找验证码规则

看一下原始数据。

image-20240324012251095

还好还好,看着不难,列表长度和验证码滑块总步长一直,每一个数组也是 3x3 和图片也对的上,应该就是图片位置描述。打开验证码网页控制台找找规则看看。

image-20240322204835495

找一个正确的看看结果与其他的有什么区别,感觉规则还是很明显的。

  • 每一列中,逗号前面的数字相同(纵向一致)。
  • 每一行中,逗号后面的数字相同(横向一致)。

多刷新了几个验证码发现规则就是这个,提取代码让 ChatGPT 来完成吧!

image-20240323224947938

查找验证码验证逻辑

image-20240324013146797

关键词搜一下,总么感觉这么简单啊,连混淆都没有,直接搜到了,debug下个断点试一下。

image-20240323224915442

image-20240323224858464

没啥问题,就是 /pzzl/verify 的请求体信息,将相关代码拿出来补一下环境试一下。

image-20240323225020005

ojbk,简单简单,连个混淆都没有做过,逻辑也很简单。

其他参数的生成逻辑

从抓包里面分析一下,大概就是 client_id, x-device-id, user-agent, captcha_sign 几个参数,其他的一眼看下去就是固定值,比如 package_name, client_version, timestamp。jadx 打开一下 apk 找一下生成逻辑。

全局搜一下,client_id 应该是固定值 YNxT9w7GMdWvEOKa

image-20240324023403197

device_id 设备ID没啥要看的了,32位,判断新用户就是根据这个来的,老规矩直接 uuidv4 生成就好了。

user-agent 里面就是正常获取设备信息,这个可以直接从应用变量里面拷贝一大堆,问题不大,但是新增了一个 devicesign 参数,这个应该是根据 x-device-id 生成出来的。

image-20240324035143170

生成逻辑为三段,第一段为 div101. 固定值,第二段为 device_id,第三段为三个值先 SHA-1MD5frida 看一下,应该是固定的 com.pikcloud.pikpak1appkey,结果为 430c9b9e393eb807dfc0c79466841630

captcha_sign 直接搜索没有搜到,但是有个特征是 1. 开头,尝试搜一下这个。

image-20240324040020181

ok,没什么毛病,就是这个东西了,根据时间戳进行验签,扒一下 d.a 方法就好了。

组装参数循环调用 MD5 ,盐是从 alg/alg 或者 algtv/alg 文件夹读取文件获取的。

image-20240324043912715

image-20240324044215326

把文件拿出来读一下,简单整理进行测试,ojbk。

image-20240324043811035

剩下的好像就没有什么要搞得了,直接根据接口整理代码进行测试。

测试

整理一下注册顺序:

  • /v1/auth/verification: 获取验证码和verification_id
  • /v1/auth/verification/verify: 提交verification_id和验证码进行校验,获取verification_token
  • /v1/auth/signup: 开始注册
  • /vip/v1/order/activation-code: 填写邀请码

这里面可会返回 400 错误,因为captcha_token参数失效,需要调用 /v1/shield/captcha/init 接口进行刷新,而这个接口返回包含 url 参数就是需要二次进行图形验证码验证,也就是上面找的东西,没有 url 参数就是直接刷新成功了。

这里利用的邮箱工具是自己之前整的玩具,大家可能需要对接自己的垃圾邮箱API,测试一下。

3347f320e11bc7fb0932356f9bb2081

okk,注册成功,但是返回网盘发现邀请用户并没有增加,奇怪了,回头重新翻一下请求接口顺序,应该是中途还有必须的请求漏了。

找到一个 /vip/v1/activity/invite 可以请求,塞进中途进行看一下。

image-20240328234136765

image-20240328234359150

成功邀请成功,应该就是这一个请求的问题。两者在填写邀请码的响应值也有一点区别。Premium invitation code confirmed successfullyCongratulations on your free Premium for 5

补一个登录接口

因为我看有些人说刷的邀请会掉是因为被邀请用户没有登录,那些写一个登录接口吧。

image-20240328233051738