1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python爬虫从入门到精通:(44)JS逆向:试客联盟的逆向分析_Python涛哥

Python爬虫从入门到精通:(44)JS逆向:试客联盟的逆向分析_Python涛哥

时间:2023-11-08 16:49:07

相关推荐

Python爬虫从入门到精通:(44)JS逆向:试客联盟的逆向分析_Python涛哥

我们来看下试客联盟的逆向分析,切换到密码登陆。

JS代码解析

我们进行抓包。经过分析,我们看到密码可能在这个js里实现

点进去后,我们发现源码里有一段var key = new RSAKeyPair("10001",'',rsa_n);,那我们就怀疑这个可能就是密码的实现方式。我们打断点验证一下,果然停留在了这里。我们来看下这一部分源码:

setMaxDigits(131);var formData = $("#loginForm").serializeArray();var key = new RSAKeyPair("10001",'',rsa_n);for (var i = 0; i < formData.length; i++) {if (formData[i].name === 'password') {formData[i].value = encryptedString(key, formData[i].value);break;}

setMaxDigits(131);:不知道是什么,先留着serializeArray():这是一个js函数,其作用是:使用来实现序列化(对登陆页面的表单中的值进行序列化,序列化成一个数组,数组元素就是表单中的数据【用户名和密码】)var key = new RSAKeyPair("10001",'',rsa_n);:说明密码是RSA加密方式key就是公钥,公钥的生成需要用rsa_n,rsa_n是什么鬼目前还不知道。后续对其做处理for循环:如果表单的名字是password,那么进行加密。

我们进入setMaxDigits(131)encryptedString的js函数,发现他俩都在一个barrett.js文件里,我们复制整个文件里的代码放到调试工具里。

然后我们再写一个函数getPwd(),把加密的代码改写并复制进去调试下:

我们看到,计算后提示rsa_n未定义。

我们可以想到,整个rsa_n肯定在网页源码中,我们来搜下:

没搜到!那我们就把整个网页刷新下,在搜索下:

现在我们搜索到了,复制rsa_n的值,来调试计算下:

这时,我们就获取到了加密后的密码。

Python代码实现

创建shike.js文件,并修改上述js代码复制进去。

Python代码:

#!/usr/bin/env python3# -*- coding: utf-8 -*-import requestsimport reimport execjs# 获取rsa_nurl = '/getkey?v=fb8ccb83550b28b545fe22c68aef5091'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'}page_text = requests.get(url=url, headers=headers).text#正则取出ex = r'var rsa_n = "(.*?)";'rsa_n = re.findall(ex, page_text)[0]# 加密的逆向node = execjs.get()pwd = '123456'file = 'shike.js'ctx = pile(open(file, encoding='utf-8').read())funcName = 'getPwd("{0}","{1}")'.format(pwd, rsa_n)password = ctx.eval(funcName)print(password)

这样就获取了密文。

关注Python涛哥!学习更多Python知识!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。