webstorm里stylus代码报错_Python 爬虫进阶必备 | 某视频数据分析平台加密参数分析(终于我还是手把手扣了代码)...

今日目标网站

aHR0cHMlM0EvL3hkLm5ld3JhbmsuY24vZGF0YS90aWt0b2svcmFuay9vdmVyYWxs

这个网站是昨天在系列课的交流群里看到的,正好缺少案例就拿来练手了。

抓包分析与加密定位

这里要分析的是指数排行榜这一栏的数据

7f0a662b49689d3ad71d89551844e913.png

首先看下请求是怎么样的

4b49d3edeb391fcbbbb8f15471850d1e.png

看到这里分析的是xyznonce两个加密参数

如何定位加密参数的位置?

1、直接检索是可以找到的,xyz这个参数名称很有标志性

4f8bf4bd5cc2760df43c9836d27ef0f0.png

2、 通过xhr断点分析,不过这个网站的xhr分析的话,追堆栈很容易就追丢了。

接下来我们简单分析一下

先下一个断点,可以直接断在请求发出的位置

fced67a89eb7731e122c54c76a892c1a.png

在这个位置,需要分析的参数已经全部生成好了,所以需要向上分析堆栈

ef76c0c1179a3da3f040ec7eb283f132.png

因为有异步请求,所以先在下图这个位置打上断点,继续分析堆栈

69eecf7e4393614f711e97e242d05c02.png

继续不停的分析,断点重放请求,直到找到下面这个位置

9f7dfd6a98da8dc0704f15178fc5566e.png

在之前的文章有介绍过这个拦截器的用法,所以这里就不再废话一遍了。

在这个位置继续追两步就到了加密位置了。

9040ddbdfb72fe9b801b5b2f892c2677.png

这里的i.a就是我们具体的加密算法的位置了。

72ba6de3967f517ddab20186368f7ba7.png

加密分析

从上面一路追下来到了这个位置,可以看到传入的参数就是我们请求的url

而且加密的逻辑看似也非常简单,我们继续分析

193b86b99ac432db105a6c14ff9da1e6.png

先来看看nonce的加密,打上断点追进去发现这个c方法是一环套一环,让人有点难受,所以咸鱼偷懒了

经过多次刷新分析这个nonce是由上面传入的i数组随机生成的字符串,生成的长度就是9,明白这个算法的实现之后,咸鱼直接百度了一个

function getRandomArrayElements(arr, count) {
    var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;
    while (i-- > min) {
        index = Math.floor((i + 1) * Math.random());
        temp = shuffled[index];
        shuffled[index] = shuffled[i];
        shuffled[i] = temp;
    }
    return shuffled.slice(min);
}
var items = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];

解决了nonce之后,可以看到xyz是由nonce和上面的url拼接生成并经有a方法加密生成的,所以直接下上断点口一波代码

那么问题来了,这个代码要怎么扣?

先一步步跟着代码调试走一遍流程,然后开始顺着这个流程走过的地方,把他经过的代码都复制到编辑器当中,就像这样

先把这个g复制过来

function g(e, t, n) {
return t ? (n ? y(t, e) : h(y(t, e))) : n ? m(e) : h(m(e));
}

然后追进去F11,再复制m(e)

function m(e) {
        return (function (e) {
          return d(s(p(e), 8 * e.length));
        })(v(e));
}
function g(e, t, n) {
        return t ? (n ? y(t, e) : h(y(t, e))) : n ? m(e) : h(m(e));
}

然后再复制v(e)

function v(e) {
        return unescape(encodeURIComponent(e));
}
function m(e) {
        return (function (e) {
          return d(s(p(e), 8 * e.length));
        })(v(e));
}
function g(e, t, n) {
        return t ? (n ? y(t, e) : h(y(t, e))) : n ? m(e) : h(m(e));
}

再复制下一个执行的函数

function p(e) {
    var t,
        n = [];
    for (n[(e.length >> 2) - 1] = void 0, t = 0; t 1)
        n[t] = 0;
    var r = 8 * e.length;
    for (t = 0; t 8)
        n[t >> 5] |= (255 & e.charCodeAt(t / 8)) <32;
    return n;
}

function v(e) {
    return unescape(encodeURIComponent(e));
}

function m(e) {
    return (function (e) {
        return d(s(p(e), 8 * e.length));
    })(v(e));
}
function g(e, t, n) {
        return t ? (n ? y(t, e) : h(y(t, e))) : n ? m(e) : h(m(e));
}

扣代码就是不停的重复,如果你不小心跟丢了,那就重新来过,再调试,最好要结合console.log方法穿插的调试

重复这个过程,直到你在webstorm中执行g不会提示错误为止,

如果报错了,你就把报错粘贴到谷歌翻译里翻译一下,认真百度一下,然后再认真看看是不是括号没复制全啊,变量名是不是重复啊等等问题,这个加密真的不难啊

最后再结合前面的nonce的方法你就会得到下面这个结果

1407ac43ea3106c247a59393a2492016.png

这个时候就可以把这个js拿去Python里面调用了。

偷懒直接拿postman生成一下请求的代码,把参数修改成从js生成就可以了。

直接上结果

65cc9d3610d33057a1bae67dbc34555a.png

完事儿~

以上就是今天的全部内容啦,咱们下次再会~

Love&Share 891d61c8c7f815999249c834505e5330.png

[ 完 ]

ee9674081ac8cefdb07b1862a0717958.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值