python爬虫:喜马拉雅案例(破解sign值)

声明:

本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

根据上一篇文章,我们破解了本网站的,手机号和密码验证,这篇文章我们继续破解sign加密值 python爬虫:喜马拉雅登录案例-CSDN博客

  • 我们今年天要破解的就是请求加密的sign值(箭头所指):

前置知识点:判断加密值可能采用哪种算法

  • 我们这个案例的sign值是:3dc612f47e51715f62e0d1ab66490637c16b4851
  • 这个值的长度是40,我们就可以找找网上的加密网站 SHA1 在线加密工具 | 菜鸟工具
  • 我们可以挨个试一下,只有sha1算法符合我们的sign,我们就推断sign值可能是使用的啥sha1算法加密

1. 找到我们之前的加密入口进行观察(找到signnature),我们判断应该与e有关

  • 在这一张图中,我们看到它定义了e,所以我们应该点进a.getSignature中查看js源代码代码如下
javascript 复制代码
var e = (0,
            a.getSignature)({
                account: n,
                password: i,
                nonce: t
            });
  • 悬浮鼠标,点进源码,查看源码,复制、粘贴源码:

2. 把代码复制到Pycharm中进行调试

  • 其中我们知道n,i是我们之前逆向出来的值,none可能是固定值、也有可能是变化值
  • 在调试过程中,代码出现了错误,如下图:
  • 我们就发现错误,但是读代码我们就可以看出,这个函数是将n、i、t的值今昔那个拼接,js代码可以处理,python也可以处理(这里我们就使用js进行处理把,有基础的可以试一试使用python去处理)
  • 解决了y的错误,我们需要解决d的错误(这里的d看着像是个固定值),我们直接把固定值拿过来

3.最后我们就破解了它的sign值

  • 代码如下:
javascript 复制代码
cryptoJs = require("crypto-js")

d = "WEB-V1-PRODUCT-E7768904917C4154A925FBE1A3848BC3E84E2C7770744E56AFBC9600C267891F"

function y(t) {
    var e = ""
        , r = Object.keys(t).sort((function (t, e) {
            return (t = t.charCodeAt(0)) - (e = e.charCodeAt(0))
        }
    ))
        , n = r.length;
    return r.forEach((function (r, o) {
            var i = t[r];
            e += "".concat(r, "=").concat(i),
            o < n - 1 && (e += "&")
        }
    )),
        e
}


function getSignature() {
    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}
        , e = y(t) + "&" + d;
    return e.toUpperCase(),
        cryptoJs.SHA1(e.toUpperCase()).toString()
}

let n = "duWIGfpxabRcy5On5nyp37xK6r5JsL5vvzBC40SnqBl+ahQaKibOnJXeAWjOOWO8mOMQGnxxF1GyOpclRAdOkJvMb1ELSFqgFBbilqUtZipPJzzFyaRUMmbI+W9+m7VBDV1gAGwxUpj79M4x6ksl62QQrxm4k/IYybO9x9tZiFg="
let i = "Y2OZqFIfMpmKcIM98fOedsuwN0KHfvSlSQq6ugie7cYKH2F5hd3c6tXoKTzqeBkTKPo4qgbelCKLOvRdkShls0rBHuwEUZ4z2WJSyYSKG96natp7XhopHh27UUDGQX1BHSlNu8g0axx5WG9e9wEKKIhh2pz/LhbcZcBfAQ6qD9s="
let t = "0-29DAD105A65486c80bf90ec611605af8df9feffc8ec85e24e195efdc8e36d5"

// 测试
ret = getSignature({
    account: n,
    password: i,
    nonce: t
});

console.log(ret)
相关推荐
无羡仙11 分钟前
Webpack 背后做了什么?
javascript·webpack
计算机编程小咖38 分钟前
《基于大数据的农产品交易数据分析与可视化系统》选题不当,毕业答辩可能直接挂科
java·大数据·hadoop·python·数据挖掘·数据分析·spark
码哥DFS1 小时前
NPM模块化总结
前端·javascript
灵感__idea2 小时前
JavaScript高级程序设计(第5版):代码整洁之道
前端·javascript·程序员
zhangfeng11332 小时前
以下是基于图论的归一化切割(Normalized Cut)图像分割工具的完整实现,结合Tkinter界面设计及Python代码示
开发语言·python·图论
唐璜Taro2 小时前
electron进程间通信-IPC通信注册机制
前端·javascript·electron
flashlight_hi3 小时前
LeetCode 分类刷题:2529. 正整数和负整数的最大计数
python·算法·leetcode
Ashlee_code3 小时前
香港券商櫃台系統跨境金融研究
java·python·科技·金融·架构·系统架构·区块链
Jia-Hui Su3 小时前
GDSFactory环境配置(PyCharm+Git+KLayout)
git·python·pycharm
陪我一起学编程3 小时前
创建Vue项目的不同方式及项目规范化配置
前端·javascript·vue.js·git·elementui·axios·企业规范