python爬虫 微信公众号模拟登陆js解密
python爬虫 微信公众号模拟登陆js解密
过程中使用的应用: 1.python 3.6以上的环境 2.vscode 3.node.js环境 4.pychram 5.360极速浏览器 打开这个网址 微信公众号 账号密码随便输入 然后 F12 审查元素 记得要点xhr 异步加载这样会出现后续的信息 然后下一步是点击登陆 出现下面的加载情况 然后会发现我输入的密码是’12345’ 但是pwd是’827ccb0eea8a706c4c34a16891f84e7b’ 那这边肯定是进行了js加密了。只要我们找到加密的算法就可以了。
第二步
我们进入sources界面 这样会方便我们找到生成pwd的js加密过程算法 我们需要找到生成pwd的js代码段 然后一眼就能看到login这种敏感词 完美就直接进入这里面的代码段 如果你双击进入发现是一行很长的代码,点一下搜索栏下面的{},这样会把代码变得成明朗一下。 然后根据观察你可以看到pwd的生成是
pwd: u(n.pwd.substr(0, 16)),
所以我测试一下 打一个断点 ,看是否是这一行代码, 再继续点击一下登陆的按钮 就会出现 这样的页面。我们就能看到我们输入的账号密码都在这,所以这肯定就是我们要找的生成pwd的方法了。 接下来就是为什么我要推荐你们用360极速浏览器的原因的 将鼠标放在这个u上 会直接显示这个u的生成原因js代码 我们就可以直接双击到f anonymous(e,t,n) 直接去那个js代码就可以了 就直接到了生成pwd的原始代码了js片段上了 然后我们将这个最外面的那层function的代码复制到vscode上 其实我们只要将这个向上翻一翻 我们会发现在一片的代码 其实这也是典型的md5加密的,这样的我们的思路就很清晰了 只要我们将这段代码改写一下就可以获取到post请求中的pwd值了 vscode 中是需要运行环境的 node.js 不然js代码运行不了 无法测试
我们将这段代码改写一下
n.exports = function(e, t, n) {
return t ? n ? a(t, e) : o(a(t, e)) : n ? r(e) : o(r(e))
改成
function getpwd(e, t, n) {
return t ? n ? a(t, e) : o(a(t, e)) : n ? r(e) : o(r(e))
}
然后我们运行 出来的结果 这样我们的pwd就破解出来了。
第三步
我们将js代码写入到python 程序中 中间会用一个包 pyexecjs 然后代码是
import execjs
js_ex = execjs.get()
# 写入js文件
ctx = js_ex.compile(open('new_file.js',encoding='utf-8').read())
# 执行js函数
funtion_js = 'getpwd("{0}")'.format('12345')
pwd = ctx.eval(funtion_js)
print(pwd)
运行的结果就是我们当时看到的pwd
剩下就是简单的post请求 就可以模拟登陆了。记得要使用session()一下 可以维持登陆的信息。
希望可以喜欢。js代码太长了 有需要js代码的可以私聊我一下。