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

举报
xianyuplus 发表于 2021/09/26 16:20:26 2021/09/26
【摘要】 今日网站aHR0cHM6Ly9kaWFuLnlzYmFuZy5jbi8jL2luZGV4Q29udGVudD9zZWFyY2hLZXk9JUU2JTg0JTlGJUU1JTg2JTkyJUU3JTgxJUI1Jl90PTE2MzI2MTgxODk4MzY=这个站来自交流 4 群发现大佬越来越多了,群里有问个站都有大佬做过了牛哇牛哇~ 加密定位需要分析的值在下图中用红框标注这个值每次请求都不...

今日网站

aHR0cHM6Ly9kaWFuLnlzYmFuZy5jbi8jL2luZGV4Q29udGVudD9zZWFyY2hLZXk9JUU2JTg0JTlGJUU1JTg2JTkyJUU3JTgxJUI1Jl90PTE2MzI2MTgxODk4MzY=

这个站来自交流 4 群

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

牛哇牛哇~

加密定位

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

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

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

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

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

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

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

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

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

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

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

懒得一步步定位的看这里

直接搜 e.split("").map

加密分析

单步到O中可以看到

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

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

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补齐

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("")
}

补齐之后就可以输出值了

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

以上就是本次的全部内容了。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。