日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發(fā)布時(shí)間:2023/12/10 javascript 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js 获取session_Python实战案例:这是你见过的最详细的JS加密登录某博 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

0x00 抓包分析

簡單的搜索之后發(fā)現(xiàn),很多參數(shù)都是登陸上面這個(gè)請(qǐng)求返回的值,這個(gè)請(qǐng)求在輸入完賬號(hào)光標(biāo)到達(dá)密碼框時(shí)就會(huì)生成!

0x01 加密邏輯分析


搜索su=可以很快找到加密的位置,上圖看到e.su和e.sp都是由sinaSSOEncoder這個(gè)函數(shù)生成的,搜索sinaSSOEncoder發(fā)現(xiàn)就是這個(gè)js,也就是說把當(dāng)前js全部拷貝下來就可用


這里可以得知su是由賬號(hào)加密得到

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

me.rsaPubkey,me.servertime,me.noce這三個(gè)值都是由服務(wù)器返回的值,不多做解釋!

最后這個(gè)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 }

在當(dāng)前js文件中搜索prelt得知是由preloginTime生成

preloginTime就是一個(gè)時(shí)間戳減一個(gè)停頓后的時(shí)間戳,其實(shí)可以設(shè)置為一個(gè)隨機(jī)數(shù)

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

0x02 代碼編寫

1.獲取nonce、rsakv等參數(shù)

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(r'sinaSSOController.preloginCallBack((.*?))',prelogin_resp.text).group(1) result_json = json.loads(result) print(result_json)

2.獲取跳轉(zhuǎn)鏈接

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.獲取跳轉(zhuǎn)鏈接

location = re.search(r'replace("(.*?)");',resp.text).group(1) resp = session.get(location) print(resp.text)

4.最后請(qǐng)求

location = re.search(r'replace('(.*?)');', resp.text).group(1) resp = self.session.get(location) print(resp.text)

5.登陸驗(yàn)證

到此為止已經(jīng)是成功登陸了,最后再請(qǐng)求一下主頁,如果返回的源代碼中有自己的用戶名,那么說明我們已經(jīng)登陸成功了

#Python學(xué)習(xí)群592539176 resp = self.session.get('https://weibo.com/') print(resp.text)

總結(jié)

以上是生活随笔為你收集整理的js 获取session_Python实战案例:这是你见过的最详细的JS加密登录某博的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。