Python爬虫挺刑的,去VX公众某位置,平台登录加密参数扣取 Y23
📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
⛳️ 实战场景
本篇博客我们继续围绕登录加密进行学习,本次要时间的站点是如下所示,可以看图猜站点。
是否猜到公众平台号了~
小日子越来越刑了
目标站点如下所示,使用了 URL 加密
https%3A%2F%2Fmp.weixin.qq.com%2F
登录加密的逻辑,可以直接使用一个测试账号即可(本案例不实现登录之后的扫码验证,那是另一套反爬逻辑了)
添加断点的方式,截止到今天我们学习了三种:
- 寻找 DOM 元素的事件绑定;
- 通过关键字添加 XHR 断点;
- 直接在启动器中点击 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 中还挺有意思,因为其中 t
和 n
传递的都是 undefined
,所以我们删减一下逻辑。
使用括号区分
t ? (n ? i(t, e) : o(i(t, e))) : n ? r(e) : o(r(e));
因为 t
与 n
都是 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 文件,在本地加载复盘。
📣📣📣📣📣📣
右下角有个大拇指
- 点赞
- 收藏
- 关注作者
评论(0)