Python 爬虫进阶必备 | 某药品商城加密参数 ex1 加密逻辑分析
第一时间关注Python技术干货!
图源:极简壁纸
今日网站
aHR0cHM6Ly9kaWFuLnlzYmFuZy5jbi8jL2luZGV4Q29udGVudD9zZWFyY2hLZXk9JUU2JTg0JTlGJUU1JTg2JTkyJUU3JTgxJUI1Jl90PTE2MzI2MTgxODk4MzY=
这个站来自交流 4 群
发现大佬越来越多了,群里有问个站都有大佬做过了
![](https://filescdn.proginn.com/08c448092b124dfc1ba804e94d4b2c91/42f4dc7d9bcda4f5353e0cca55399f61.webp)
牛哇牛哇~
加密定位
需要分析的值在下图中用红框标注
![](https://filescdn.proginn.com/af44d0a69e7b3e6ba7175dcb101cece1/db7bf65536294a1a74d128199f1f90f5.webp)
这个值每次请求都不一样,并且这个名字较短不好通过检索参数名检索到
试过通过检索ex
来定位发现关联的结果也非常多,所以老老实实用 xhr 断点分析,用 js 堆栈分析也可以,但是分析的步骤差别不大
![](https://filescdn.proginn.com/a264966855d0422f18aed78ce9e7b38d/70bc8690711b1b46e9be69120e9f3736.webp)
下好断点之后刷新,页面就断住了
![](https://filescdn.proginn.com/8785eecc990295d2e27ee8910ed08188/5214e0b637ac003f55f7faa2fa42cd4a.webp)
逐个分析,直到下面这个位置
![](https://filescdn.proginn.com/c429018fc8bad88c2c18502d2345377a/1a924ae35017dbd78d6a09d5c20eac60.webp)
可以看到这里用到了interceptors
,关于这个的用法之前的很多文章都写了
大概率是在这个位置里进行的了请求的封包,所以我们断点需要打在这个位置
![](https://filescdn.proginn.com/3ebf95afb8722b297106b26a9f0a7086/0672b9d4fde4ffb3ca0789d2b38b67e2.webp)
进一步分析可以看到下面这个位置
![](https://filescdn.proginn.com/7c21d5169616fe62aec4d8805eaf1647/2ac1a684b08854a9e1a98846a5d59e01.webp)
这里可以看到我们请求包中提交的其他参数,但是没有看到要分析的ex1
但是可以看到所有的参数都经过了O
方法的处理,处理之后n
中就生成了ex1
![](https://filescdn.proginn.com/c2f796896b373ed3fbcdb5b588fffcaf/7dccb10dfce8103babbb6763232a707e.webp)
所以O
就是加密生成的位置
![](https://filescdn.proginn.com/d87c06c68f33fb6b75b214f1f7fda750/843d086885aa134e0198351f0ca8cea4.webp)
“懒得一步步定位的看这里
直接搜 e.split("").map
加密分析
单步到O
中可以看到
![](https://filescdn.proginn.com/9740618d97377bcb332ffad8ab69ef47/bf4bd14eb97ce3a44a362903b5f9faa0.webp)
这里就是参数生成的地方,传入了参数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
}
之后全部都是计算
所以直接拷贝代码到编辑器里面,把参数整好,调用运行
![](https://filescdn.proginn.com/c54622c73a67371294ca412d5a1abf40/3a29ea709a6db39814a84fefa4cffcb4.webp)
这里需要把T
补齐
这里的T
是一个时间戳减去了值
![](https://filescdn.proginn.com/5b8e985b8835823f57138bc614487d2e/9ffe2864553aace881d5f6039cb16d68.webp)
补齐之后再次运行报w
未定义
![](https://filescdn.proginn.com/c9b0dfeaf15fde2a831fc44a55876850/ce18feddf6f74237b4a5eb858b3ac736.webp)
再把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("")
}
补齐之后就可以输出值了
![](https://filescdn.proginn.com/daafaa2e3985c9637614abd81e9be8c1/534d839c248e05e5143271f9c5ac2ca8.webp)
这个参数不是很难,但是就是定位比较麻烦,并且用字符串拼接的方式完成参数赋值生成。
我是没有更新就在摸鱼的咸鱼
以上就是今天的全部内容了
收到请回复~
我们下次再见。
对了,看完记得一键四连,这个对我真的很重要。