【Python】逆向爬虫-----模拟微信公众平台登录(MD5)

 栗子是:微信公众平台的登录。 js调试工具:发条js调试工具.rar-桌面系统文档类资源-CSDN下载

一、拿到加密代码

 由图可以看到pwd这段数据是被加密成一段由32个字符组成的字符串,应该是一个MD5的加密。

 我们用搜索工具搜索一下pwd,查看它所在的js文件。

 在js文件里找到了一行可疑是进行加密的代码,因为我们看到它有个substr(0, 16)是用来截取16个字符的函数,我们在这里设置断点。

这时我们再次点一下登录,发送请求。

 OK!我们应该没有猜错,执行函数前我们的pwd还没有被加密。

 我们在这个函数u里设置一个断点,然后点击“进入下一个函数调用”。

 我们进入了这个函数的代码,然后我们复制加密代码到发条js调试工具(加密代码在哪个大括号里我就不细说了)。

 复制到发条js调试工具后,点一下格式化,然后加载代码。

报错了,它说'n' 未定义,那我们就在代码前头定义这个变量n, var n = {}。再次点击加载代码。

 🆗,这次加载成功了,这就说明了这些代码能正常运行。接下来我们试试这些代码能不能执行加密的操作。

先修改一下代码:

function getPwd(e, t, n) {
return t ? n ? s(t, e) : o(s(t, e)) : n ? r(e) : o(r(e))
}

 现在,就可以测试这些代码能否实现加密。

 可以看到,加密后的结果跟32个字符的字符串的内容是一样的。

接下来我们就可以用PyExecJS这个模块在python中运行这些js代码。


二、用PyExecJS模块运行js代码

import execjs
# 实例化一个node对象
node = execjs.get()
#js源文件编译
ctx = node.compile(open('a.js',encoding='utf-8').read())
#执行js函数
funcName = 'getPwd("{0}")'.format('123456')
pwd = ctx.eval(funcName)
print(pwd)


三、模拟登录

import execjs
import  requests
# 实例化一个node对象
node = execjs.get()
#js源文件编译
ctx = node.compile(open('a.js',encoding='utf-8').read())
#执行js函数
funcName = 'getPwd("{0}")'.format('123456')
pwd = ctx.eval(funcName)

header = {
"user-agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}
url = "https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin"
data ={
    "username": "123@qq.com",
    "pwd": pwd,
    "imgcode":"",
    "f":" json",
    "userlang": "zh_CN",
    "redirect_url": "",
    "token": "",
    "lang": "zh_CN",
    "ajax": "1"
}
resp = requests.post(url,data= data).text
print(resp)

返回结果:


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SamRol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值