前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 爬虫进阶必备 | 某药品商城加密参数 ex1 加密逻辑分析

Python 爬虫进阶必备 | 某药品商城加密参数 ex1 加密逻辑分析

作者头像
咸鱼学Python
发布2021-10-18 17:19:04
5330
发布2021-10-18 17:19:04
举报
文章被收录于专栏:咸鱼学Python

今日网站

aHR0cHM6Ly9kaWFuLnlzYmFuZy5jbi8jL2luZGV4Q29udGVudD9zZWFyY2hLZXk9JUU2JTg0JTlGJUU1JTg2JTkyJUU3JTgxJUI1Jl90PTE2MzI2MTgxODk4MzY=

这个站来自交流 4 群

发现大佬越来越多了,群里有问个站都有大佬做过了

牛哇牛哇~

加密定位

需要分析的值在下图中用红框标注

这个值每次请求都不一样,并且这个名字较短不好通过检索参数名检索到

试过通过检索ex来定位发现关联的结果也非常多,所以老老实实用 xhr 断点分析,用 js 堆栈分析也可以,但是分析的步骤差别不大

下好断点之后刷新,页面就断住了

逐个分析,直到下面这个位置

可以看到这里用到了interceptors,关于这个的用法之前的很多文章都写了

大概率是在这个位置里进行的了请求的封包,所以我们断点需要打在这个位置

进一步分析可以看到下面这个位置

这里可以看到我们请求包中提交的其他参数,但是没有看到要分析的ex1

但是可以看到所有的参数都经过了O方法的处理,处理之后n中就生成了ex1

所以O就是加密生成的位置

“懒得一步步定位的看这里 直接搜 e.split("").map

加密分析

单步到O中可以看到

这里就是参数生成的地方,传入了参数e

并且这里用到了T还有w两个方法

代码语言:javascript
复制
function O() {
            var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}
              , t = k
              , n = P
              , a = E
              , i = T();
            return e[t + n + a] = function(e) {
                for (var t = B.b.split("").map(function(e) {
                    return Number(e)
                }), n = e.split("").map(function(e) {
                    return Number(e)
                }), a = 7 * n.reduce(function(e, t) {
                    return e + t
                }, 0) % 10, i = [], r = 0, o = 0; o < n.length; o++)
                    i[o] = (n[o] + t[r]) % 10,
                    r = (r + 1) % t.length;
                for (var c = t.length % n.length, s = Array.apply(null, {
                    length: 10
                }), l = 0; l < c; l++)
                    s[l] = i[i.length - l - 1];
                s[c] = a;
                for (var u = c + 1; u < i.length + 1; u++)
                    s[u] = i[i.length - u];
                return w(s.join(""))
            }(i),
            t = null,
            n = null,
            a = null,
            e
        }

之后全部都是计算

所以直接拷贝代码到编辑器里面,把参数整好,调用运行

这里需要把T补齐

这里的T是一个时间戳减去了值

补齐之后再次运行报w未定义

再把s补齐

代码语言:javascript
复制
function w(e) {
    for (var t = [], n = function () {
        for (var e = [], t = 0; t < 36; t++)
            t >= 0 && t <= 9 ? e.push(t) : e.push(String.fromCharCode(t + 87));
        return e
    }(); e;) {
        var a = e % 36;
        t.unshift(n[a]),
            e = parseInt(e / 36)
    }
    console.log(t.join(""))
    return t.join("")
}

补齐之后就可以输出值了

这个参数不是很难,但是就是定位比较麻烦,并且用字符串拼接的方式完成参数赋值生成。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 咸鱼学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 今日网站
    • 加密定位
      • 加密分析
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档