Python爬虫挺刑的,去VX公众某位置,平台登录加密参数扣取

Python爬虫挺刑的,去VX公众某位置,平台登录加密参数扣取,第1张

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 635 篇原创博客

畅销专栏,打折促销中~
⭐️ 《Python 爬虫 120》⭐️

文章目录
    • ⛳️ 实战场景

⛳️ 实战场景

本篇博客我们继续围绕登录加密进行学习,本次要时间的站点是如下所示,可以看图猜站点。

是否猜到公众平台号了~

小日子越来越刑了

目标站点如下所示,使用了 URL 加密

https%3A%2F%2Fmp.weixin.qq.com%2F

登录加密的逻辑,可以直接使用一个测试账号即可(本案例不实现登录之后的扫码验证,那是另一套反爬逻辑了)

添加断点的方式,截止到今天我们学习了三种:

  1. 寻找 DOM 元素的事件绑定;
  2. 通过关键字添加 XHR 断点;
  3. 直接在启动器中点击 JS 文件。

本次选择启动器中点击 JS 文件添加断点的形式,在开发者工具中捕获登录的网络请求,点击下图中的 loginpage.js 文件。


在格式化之后的代码中添加断点。

通过堆栈的调用关系,可以快速定位到参数加密位置,如下所示:

其中 pwd 所在行就是参数的加密位置,直接添加断点,同时两个函数前的箭头也点亮。

其中 substr() 函数是 JS 中截取字符串 *** 作,可以通过下述代码进行测试。

"1234567890qwertasdfgabvczasswrd".substr(0, 16);


然后随着代码进入 f() 函数,其内部代码如下所示:

n.exports = function (e, t, n) {
  return t ? (n ? i(t, e) : o(i(t, e))) : n ? r(e) : o(r(e));
};

这段逻辑在 JS 中还挺有意思,因为其中 tn 传递的都是 undefined,所以我们删减一下逻辑。

使用括号区分

t ? (n ? i(t, e) : o(i(t, e))) : n ? r(e) : o(r(e));

因为 tn 都是 undefined,所以最终的结果是 o(r(e)),其中的 e 是原密码字符串。

继续调试代码,进入 r() 函数,得到如下代码:

function r(e) {
  return c(s(u((e = d(e))), 8 * e.length));
}

在依次提取该函数引用的其它函数。

function d(e) {
 	return unescape(encodeURIComponent(e))
}
function u(e) {
    var t, n = [];
    for (n[(e.length >> 2) - 1] = void 0,
    t = 0; t < n.length; t += 1)
        n[t] = 0;
    for (t = 0; t < 8 * e.length; t += 8)
        n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
    return n
}
function s(e, t) {
	e[t >> 5] |= 128 << t % 32,
	e[14 + (t + 64 >>> 9 << 4)] = t;
	for (var n, o, r, d, i = 1732584193, s = -271733879, a = -1732584194, c = 271733878, u = 0; u < e.length; u += 16)
	   i = l(n = i, o = s, r = a, d = c, e[u], 7, -680876936),
	   c = l(c, i, s, a, e[u + 1], 12, -389564586),
	   a = l(a, c, i, s, e[u + 2], 17, 606105819),
	   // 典型的 MD5 加密
}
function c(e) {
   for (var t = "", n = 0; n < 32 * e.length; n += 8)
       t += String.fromCharCode(e[n >> 5] >>> n % 32 & 255);
   return t
}

都得到之后,接下来就是组合相关函数,改写其函数名逻辑了,这里我们可以借用一些 JS 逆向工具,例如“鬼鬼 JS 调试工具”。

反复测试之后,就能得到其核心 JS 文件。

接下来的工作就非常简单了,我们通过 Python 去加载该文件,然后调用其pwd 函数。

import execjs

js_file = ''
with open('mima.js', 'r') as f:
    js_file = f.read()

ctx = execjs.compile(js_file)

pwd = ctx.call('pwd', '123456')
print(pwd)

运行代码之后,得到最终的加密结果:

其实本案例在看到加密之后的值时,就已经猜到了是 md5 加密,本博客仅为大家展示如何扣取 JS 文件,在本地加载复盘。

📣📣📣📣📣📣
右下角有个大拇指,点赞的漂亮加倍

欢迎大家订阅专栏:
⭐️ ⭐️ 《Python 爬虫 120》⭐️ ⭐️

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/786290.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存