码迷,mamicode.com
首页 > 编程语言 > 详细

Python实战案例:这是你见过的最详细的JS加密登录某博

时间:2020-01-05 22:23:44      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:bec   ram   func   image   分析   ges   with   ogr   style   

0x00 抓包分析

技术图片

 简单的搜索之后发现,很多参数都是登陆上面这个请求返回的值,这个请求在输入完账号光标到达密码框时就会生成!

技术图片

技术图片

 

 

技术图片

0x01 加密逻辑分析

搜索su=可以很快找到加密的位置,上图看到e.su和e.sp都是由sinaSSOEncoder这个函数生成的,搜索sinaSSOEncoder发现就是这个js,也就是说把当前js全部拷贝下来就可用


技术图片

这里可以得知su是由账号加密得到

function getSu(user) {
return sinaSSOEncoder.base64.encode((user))
}

 


技术图片

me.rsaPubkey,me.servertime,me.noce这三个值都是由服务器返回的值,不多做解释!

技术图片

 

最后这个b则是我们的密码,e.sp也就是处理完后的b值

function getSp(me,pwd) {
var f = new sinaSSOEncoder.RSAKey;
f.setPublic(me.pubkey, "10001");
b = f.encrypt([me.servertime, me.nonce].join("\t") + "\n" + pwd);
return b
}

 


技术图片

 在当前js文件中搜索prelt得知是由preloginTime生成

技术图片

preloginTime就是一个时间戳减一个停顿后的时间戳,其实可以设置为一个随机数

function getPrelt() {
exectime = Math.floor(Math.random() * (20 ‐ 300 + 1) + 300)
return exectime
}

 

0x02 代码编写

1.获取nonce、rsakv等参数

import json
import re
import requests
import execjs
session = requests.session()
prelogin_url = https://login.sina.com.cn/sso/prelogin.php
login_url = https://login.sina.com.cn/sso/login.php
username = username
password = password
with open(login.js,r,encoding=utf‐8) as f:
login_js = execjs.compile(f.read())
su = login_js.call(getSu,username)
params = {
entry: weibo,
callback: sinaSSOController.preloginCallBack,
su: su,
rsakt: mod,
checkpin: 1,
client: ssologin.js(v1.4.19),
_: 1578127327125,
}
prelogin_resp = requests.get(prelogin_url,params=params)
result = re.search(rsinaSSOController.preloginCallBack\((.*?)\),prelogin_resp.text).group(1)
result_json = json.loads(result)
print(result_json)

 

技术图片

2.获取跳转链接

data = {
entry: weibo,
gateway: 1,
from:‘‘,
savestate: 7,
qrcode_flag: false,
useticket: 1,
pagerefer: ‘‘,
vsnf: 1,
su: su,
service: miniblog,
servertime: result_json[servertime],
nonce: result_json[nonce],
pwencode: rsa2,
rsakv: result_json[rsakv],
sp: login_js.call(getSp,result_json,self.password),
sr: 1920*1080,
encoding: UTF‐8,
prelt: login_js.call(getPrelt),
url: https://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack,
returntype: META,
}
resp = session.post(login_url,data=data)
print(resp.text)

 

技术图片

3.获取跳转链接

location = re.search(rreplace\("(.*?)"\);,resp.text).group(1)
resp = session.get(location)
print(resp.text)

 

技术图片

4.最后请求

location = re.search(rreplace\(\‘(.*?)\‘\);, resp.text).group(1)
resp = self.session.get(location)
print(resp.text)

 

技术图片

5.登陆验证

到此为止已经是成功登陆了,最后再请求一下主页,如果返回的源代码中有自己的用户名,那么说明我们已经登陆成功了

#Python学习群592539176
resp = self.session.get(https://weibo.com/)
print(resp.text)

 

技术图片

Python实战案例:这是你见过的最详细的JS加密登录某博

标签:bec   ram   func   image   分析   ges   with   ogr   style   

原文地址:https://www.cnblogs.com/chengxyuan/p/12153664.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!