libuke / aliyundrive-checkin

阿里云盘自动签到程序
218 stars 629 forks source link

240522 今天出现请升级到最新客户端 #41

Open xuanvivo opened 4 months ago

xuanvivo commented 4 months ago

240522 今天出现请升级到最新客户端

libuke commented 4 months ago

我一会看看

xlc520 commented 4 months ago

经过我简单测试,headers大概需要'User-Agent'、'Content-Type'、'x-device-id'、'x-canary'、'x-timestamp'、'x-nonce'、'x-signature-v2'、'authorization',也有可能比这些少,感觉'x-signature-v2'可能是'x-device-id'、'x-canary'、'x-timestamp'、'x-nonce'加密而来,不太懂,期待大佬们更新

xlc520 commented 4 months ago

刚刚发现,抓包手机端请求,把上述字段复制到脚本中,就是那几个‘x-’开头的,除了authorization变,其他保持原样,其他账号也可以签到 只修改aliyundrive.py中_get_reward函数,大致代码如下:

    def _get_reward(self, access_token: str, sign_day: int) -> tuple[bool, str]:
        import json
        url = "https://member.aliyundrive.com/v1/activity/sign_in_reward"
        params = {
            '_rx-s': "mobile"
        }
        payload = json.dumps({
            "signInDay": sign_day
        })
        headers = {
            'User-Agent': "AliApp(AYSD/5.8.0) com.alicloud.databox/37029260 Channel/36176727979800@rimet_android_5.8.0 language/zh-CN /Android",
            'Content-Type': "application/json",
            'x-device-id': "0be6xxxxxxxxxxxxxxxxxxxxxxxxxxx7dac4",
            'x-canary': "client=Android,app=adrive,version=v5.8.0",
            'x-timestamp': "1716376521",
            'x-nonce': "b9fd6ce6-a7ac-4d58-a419-f42a3aa31825",
            'x-signature-v2': "568xxxxxxxxxxxxxxxxxxxxx236",
            'authorization': f'Bearer {access_token}'
        }
        response = requests.post(url, params=params, data=payload, headers=headers)
        print(response.text)
        return True, response.text
jinde98 commented 4 months ago

刚刚发现,抓包手机端请求,把上述字段复制到脚本中,就是那几个‘x-’开头的,除了authorization变,其他保持原样,其他账号也可以签到 只修改aliyundrive.py中_get_reward函数,大致代码如下:

    def _get_reward(self, access_token: str, sign_day: int) -> tuple[bool, str]:
        import json
        url = "https://member.aliyundrive.com/v1/activity/sign_in_reward"
        params = {
            '_rx-s': "mobile"
        }
        payload = json.dumps({
            "signInDay": sign_day
        })
        headers = {
            'User-Agent': "AliApp(AYSD/5.8.0) com.alicloud.databox/37029260 Channel/36176727979800@rimet_android_5.8.0 language/zh-CN /Android",
            'Content-Type': "application/json",
            'x-device-id': "0be6xxxxxxxxxxxxxxxxxxxxxxxxxxx7dac4",
            'x-canary': "client=Android,app=adrive,version=v5.8.0",
            'x-timestamp': "1716376521",
            'x-nonce': "b9fd6ce6-a7ac-4d58-a419-f42a3aa31825",
            'x-signature-v2': "568xxxxxxxxxxxxxxxxxxxxx236",
            'authorization': f'Bearer {access_token}'
        }
        response = requests.post(url, params=params, data=payload, headers=headers)
        print(response.text)
        return True, response.text

'x-device-id'和'x-signature-v2' 这两个值怎么取得的?

'x-timestamp' 就是时间戳吧

xlc520 commented 4 months ago

@jinde98 抓包手机端阿里云盘,应该很多请求里都有这几个字段,我是直接抓包签到的,对应这个网址的"https://member.aliyundrive.com/v1/activity/sign_in_reward",那几个‘x-’开头应该是动态加密验签的,估计改了就失效了。 我抓包了一个,放在其他的账号测试,除了authorization,其他都是抓包来的不改变,也可以签到,但是不知道明天之后会不会就失效了

libuke commented 4 months ago

刚刚发现,抓包手机端请求,把上述字段复制到脚本中,就是那几个‘x-’开头的,除了authorization变,其他保持原样,其他账号也可以签到 只修改aliyundrive.py中_get_reward函数,大致代码如下:

    def _get_reward(self, access_token: str, sign_day: int) -> tuple[bool, str]:
        import json
        url = "https://member.aliyundrive.com/v1/activity/sign_in_reward"
        params = {
            '_rx-s': "mobile"
        }
        payload = json.dumps({
            "signInDay": sign_day
        })
        headers = {
            'User-Agent': "AliApp(AYSD/5.8.0) com.alicloud.databox/37029260 Channel/36176727979800@rimet_android_5.8.0 language/zh-CN /Android",
            'Content-Type': "application/json",
            'x-device-id': "0be6xxxxxxxxxxxxxxxxxxxxxxxxxxx7dac4",
            'x-canary': "client=Android,app=adrive,version=v5.8.0",
            'x-timestamp': "1716376521",
            'x-nonce': "b9fd6ce6-a7ac-4d58-a419-f42a3aa31825",
            'x-signature-v2': "568xxxxxxxxxxxxxxxxxxxxx236",
            'authorization': f'Bearer {access_token}'
        }
        response = requests.post(url, params=params, data=payload, headers=headers)
        print(response.text)
        return True, response.text

'x-device-id'和'x-signature-v2' 这两个值怎么取得的?

'x-timestamp' 就是时间戳吧

对的,不知道他这签名是怎么生成的。难搞😩

libuke commented 4 months ago

@jinde98抓包手机端阿里云盘,应该很多请求里都有这几个字段,我是直接抓包签到的,对应这个网址的"https://member.aliyundrive.com/v1/activity/sign_in_reward",那几个'x-'开头应该是动态加密验签的,估计改了就失效了。我抓包了一个,放在其他的账号测试,除了授权,其他都是抓包来的不改变,也可以签到,但不知道明天之后会不会就失效了

@jinde98 抓包手机端阿里云盘,应该很多请求里都有这几个字段,我是直接抓包签到的,对应这个网址的"https://member.aliyundrive.com/v1/activity/sign_in_reward",那几个‘x-’开头应该是动态加密验签的,估计改了就失效了。 我抓包了一个,放在其他的账号测试,除了authorization,其他都是抓包来的不改变,也可以签到,但是不知道明天之后会不会就失效了

libuke commented 4 months ago

刚刚发现,抓包手机端请求,把上述字段复制到脚本中,就是那几个‘x-’开头的,除了authorization变,其他保持原样,其他账号也可以签到 只修改aliyundrive.py中_get_reward函数,大致代码如下:

    def _get_reward(self, access_token: str, sign_day: int) -> tuple[bool, str]:
        import json
        url = "https://member.aliyundrive.com/v1/activity/sign_in_reward"
        params = {
            '_rx-s': "mobile"
        }
        payload = json.dumps({
            "signInDay": sign_day
        })
        headers = {
            'User-Agent': "AliApp(AYSD/5.8.0) com.alicloud.databox/37029260 Channel/36176727979800@rimet_android_5.8.0 language/zh-CN /Android",
            'Content-Type': "application/json",
            'x-device-id': "0be6xxxxxxxxxxxxxxxxxxxxxxxxxxx7dac4",
            'x-canary': "client=Android,app=adrive,version=v5.8.0",
            'x-timestamp': "1716376521",
            'x-nonce': "b9fd6ce6-a7ac-4d58-a419-f42a3aa31825",
            'x-signature-v2': "568xxxxxxxxxxxxxxxxxxxxx236",
            'authorization': f'Bearer {access_token}'
        }
        response = requests.post(url, params=params, data=payload, headers=headers)
        print(response.text)
        return True, response.text

问题是签名 不知道怎么计算出来

jinde98 commented 4 months ago

查了些资料x-signature-v2是关键,不知道哪位大佬可以破解下。

'x-device-id' 是设备自己生成的,可以固定写死。 'x-timestamp'就是时间戳 'x-nonce':x-nonce 通常是一个随机生成的值,用于确保每个请求的唯一性,防止重放攻击(replay attacks)。它是一个在客户端生成的随机数,通常与时间戳(timestamp)一起用于签名过程。 x-signature-v2: 通常是一个安全签名,用于验证请求的完整性和真实性。生成签名的过程可能涉及以下步骤: 使用密钥: 应用程序在服务器端注册时,服务器会提供一个密钥(secret key)。 构建待签名字符串: 将请求中的某些参数(如 x-timestamp、x-nonce 以及其他可能的参数)按照特定顺序和规则拼接成一个字符串。签名算法: 使用密钥和一种加密算法(如 HMAC-SHA256)对上述字符串进行签名。编码: 将签名结果进行 Base64 编码或其他编码,以符合 HTTP 头部的要求。