吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2023|回复: 7
收起左侧

[Web逆向] 浅谈某云盘签名算法的分析与如何生成

[复制链接]
libw 发表于 2024-4-1 10:35
本帖最后由 libw 于 2024-4-1 20:25 编辑

声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
听说最近好像更新了算法,来试试手
新人发帖,请多多指教,各位大佬手下留情
该请求头构建时还有其它参数和载荷数据涉及敏感信息甚至违规,所以已全做打码处理

目标


  • POST提交时请求标头中特定Sign参数值的分析与生成
  • 接口地址:aHR0cHM6Ly95dW4uMTM5LmNvbS9vcmNoZXN0cmF0aW9uL3BlcnNvbmFsQ2xvdWQvY2F0YWxvZy92MS4wL2dldERpc2s=
  • 启动!提交!

抓包


如图所示,三次请求时的荷载除了commonAccountInfo中的account值是跟着用户登录信息变化以外,其它的值全部写死了

抓包001

抓包001

抓包002

抓包002

抓包003

抓包003

再来看请求头,这个值由三段内容组合,大致为:
  • 现在时间
  • 一串16位的字符串
  • 一个关键的信息*

抓包004

抓包004


分析


鉴于代码没有混淆,直接全局搜索对应参数名,也是中奖了
它由i、o、s三个值组成,用逗号分隔,然后直接拼接到一起

往上找var得知:
o:通过往c.a的getRandomSring方法传入一个16整数,获得了一段随机的16位字符串文本
r:通过新建出来的Date对象中getTime方法获得当前时间戳
i:通过往l对象中的t方法传入r和2个空文本参数获得当前时间(应该就是一个时间戳转换方法)
s:通过往c.a的getNewSign方法传入4个参数来获得关键信息;t.params在当前接口请求是undefinedt.data是载荷,i和o我们已知

初见s值

初见s值

t.params

t.params

t.data

t.data


那就进去看看吧:

初见getNewSign方法

初见getNewSign方法

先对getNewSign方法进行一个解析
[JavaScript] 纯文本查看 复制代码
A = {
    getNewSign: function (t, e, a, n) {
        var sign = ""; // 初始化 sign 字符串
        var encodedData = ""; // 初始化编码后的数据字符串

        // 如果存在额外参数(也就是载荷)
        if (e) {
            // 克隆参数对象,避免修改原对象
            var clonedParams = Object.assign({}, e);

            // 将参数对象转换为 JSON 字符串,并进行 URL 编码
            encodedData = JSON.stringify(clonedParams);
            encodedData = encodeURIComponent(encodedData);

            // 将编码后的字符串转换为数组,然后排序
            var encodedArray = encodedData.split("");
            var sortedArray = encodedArray.sort();

            // 将排序后的数组转换为字符串
            encodedData = sortedArray.join("");
        }

        // 使用 Base64 编码处理编码后的数据
        var base64EncodedData = btoa(encodedData);

        // 拼接a和n(也就是现在时间和随机字符串),并使用 Base64 编码处理
        var base64EncodedCredentials = btoa(a + ":" + n);

        // 将编码后的数据和编码后的凭据连接在一起,并将结果转换为大写形式
        sign = Md5(base64EncodedData + base64EncodedCredentials).toUpperCase();

        return sign;
    }
}

此方法的目的是生成一个签名,用于验证POST提交的数据是否合法,以及时间校验等
方法接受四个参数:t、e、a、n
其中 t 是一个占位符,似乎没有被使用,不知道以后再更新算法会不会加进去(再拼接一次doge
e 是一个对象,包含额外的参数,也就是载荷
a 和 n 是现在时间和随机字符串
方法的主要逻辑是将参数进行一系列处理,然后使用标准的 MD5 加密算法生成一个签名


实战


至此,我已完全参透了算法,是时候掏出器灵(Python)来实战了

实战

实战

成功,开香槟~

后话


不是很建议像我这样去用器灵请求服务器或者干别的事情,据说有风控,次数多了会喜提禁令,请各位自重!
如有错误请指出,同时也感谢您的阅读,您的指点就是我进步的动力
今天是美好的一天,也祝您拥有美好的心情

免费评分

参与人数 2威望 +1 吾爱币 +21 热心值 +1 收起 理由
涛之雨 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
kittylang + 1 说是脱敏,但是标题不就是人家的名字吗

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

l101 发表于 2024-4-1 20:15
好像没有完全脱敏哦,而且不建议逮住一个老是搞事,搞多了喜提禁令,严重甚至有风险。毕竟人家用户基数大。
TheWeiJun 发表于 2024-4-2 11:40
FireHeadZoffy 发表于 2024-4-3 09:41
感谢分享,最近刚学到md5加密和base64编码JWT token。不过我听说某盘已经换了一次摘要计算方式了,一个文件会分块处理?
 楼主| libw 发表于 2024-4-4 12:02
FireHeadZoffy 发表于 2024-4-3 09:41
感谢分享,最近刚学到md5加密和base64编码JWT token。不过我听说某盘已经换了一次摘要计算方式了,一个文件 ...

对非秒传的话一直是分块;秒传的话,分不分块都一样,服务端只看载荷里的md5摘要
timodn 发表于 2024-5-1 00:24
谢谢大佬分享,学些了
hongjiu 发表于 2024-5-2 21:50
收藏一下,感谢分享破解
Dave5027 发表于 2024-5-19 12:27
有点意思
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 20:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表