【Python】逆向爬虫-----模拟试客联盟登录(RSA)

栗子是:登录 - 试客联盟    js调试工具:发条js调试工具.rar-桌面系统文档类资源-CSDN下载

一、拿到加密代码

 可以看到密码被加密了,我们在搜索框里搜索 “password ” ,找到并打开包含该关键词的js文件,查看里面的代码。 

我们找到了这段代码,这段代码里有"RSA"、"encrypted"这些单词,应该是与加密有关的。这段代码的大致意思我们可以读懂:

4782行:serializeArray()这个js函数是用来实现序列化的,我们可以看到他作用于loginForm这个ID的标签,loginForm这个标签就是填写登录信息,也就是说formData是包含用户名和密码的一个数组。

4783行:把RSAKeyPair()函数返回的结果赋予给变量key。

4785行:进行是否为“密码框”判断。

4786行:把参数key和密码框内容传入encryptedString()进行加密并把结果赋予给密码框里内容。

我们在4786行设置断点。再次发送登录请求。

由图我们可以看到RSAKeyPair()函数里传入了"100001"、空内容、rsa_n这个三个参数。其中rsa_n这个参数是一个密文。接下来我们要找到获取密文的 url。

我们搜索rsa_n,找到了请求rsa_n密文的url。接下来我们进入RSAKeyPair()函数所在的js文件。

复制js文件里的全部代码到js调试器中, 然后再加上下面这段js代码(注意这里的rsa_n变量现在是测试用的,到时候要作为参数传入getPwd()函数):

function getPwd(p) {
setMaxDigits(131);
var rsa_n = "DC1683EEAA2B709F97743773E18F53E3C9A15D12465CE82227A6E447E6EC590D0B569876BB631B0AB4D67881E7EC874066D6E022E2978B4C6EAA8903EC1774AAE040A3BEAF9C2B48730ADD46BEF5F0C8109DB6FCEFED0F4A84CCD7AFFDB4FB4214DA0D0FF1A8E2831E81FA4D7C2F4346184EEC87CE42230FC320B2B4E392ECDF";
var key = new RSAKeyPair("10001", '', rsa_n);
return encryptedString(key, p);
}

 输入参数、加载代码、计算表达式,ok运行成功!拿到了加密后的结果。


二、在Python中拿到加密后的密文

先改一下js代码:

function getPwd(p,rsa_n) {
setMaxDigits(131);
var key = new RSAKeyPair("10001", '', rsa_n);
return encryptedString(key, p);
}

拿到加密后的密文:

import execjs
import  requests
import re
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 = "http://login.shikee.com/getkey?v=fbb1d0fcaa1e2d9c4c6e321ba6c5cc5f"

resp = requests.get(url,headers=header).text #拿到ras_n的密文
ex = 'var rsa_n = "(.*?)";' #正则
ras_n = re.findall(ex, resp)[0]

node = execjs.get() #创建node对象
pwd = '123456' #密码
ctx = node.compile(open('shikewan.js',encoding="utf-8").read()) #编译js文件
funcName = 'getPwd("{0}","{1}")'.format(pwd,ras_n) #为函数传入参数
password = ctx.eval(funcName) #执行函数
print(password)

 :输出结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SamRol

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

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

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

打赏作者

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

抵扣说明:

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

余额充值