python-js逆向人人網登錄
- 一專案準備
- 二專案分析
- 三 簡易代碼分享
一專案準備
環境:win10, python3.7
開發工具:pycharm
所需工具包:requests,js2py
目標網址鏈接: 人人網
二專案分析
獲取目標的登錄資訊
發現手機端的資料比web端的資料更簡潔,抓包跟換成手機端的
不要在一棵樹上吊死

找到登錄頁面
輸入賬號密碼(最好是先輸入錯誤的)抓取到登錄的資料介面

介面網址:http://activity.renren.com/livecell/ajax/clog
請求方法:post
請求引數

準備開始搬磚
phoneNum 是賬號
password是加密的
rkey是變化的
查找password的生成方法

得出兩個資料的來源

解讀js代碼
rkey是由js請求的到的json資料 需要想對rkey進行請求
import requests # 發送請求的工具包
# 獲取到網站的cookie 實作狀態保存
session = requests.session()
session.headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36'
}
response = session.get('http://activity.renren.com/livecell/rKey').json()
print(response)
n = response["data"]

setMaxDigits,RSAKeyPair,encryptedString 來自于不同的js檔案

需要將這3個js檔案代碼加載到js環境
確定關鍵的js代碼
以及js代碼需要傳遞的引數
t = {
"password": account.password
}
but_js = session.get('http://s.xnimg.cn/a85738/wap/mobile/wechatLive/js/Barrett.js').content.decode()
big_js = session.get('http://s.xnimg.cn/a85738/wap/mobile/wechatLive/js/BigInt.js').content.decode()
rsa_js = session.get('http://s.xnimg.cn/a85738/wap/mobile/wechatLive/js/RSA.js').content.decode()
# 創建js物件
js_ven = js2py.EvalJs()
js_ven.execute(big_js)
js_ven.execute(rsa_js)
js_ven.execute(but_js)
js_ven.n = n
js_ven.t = t
data_js = """
t.password = t.password.split("").reverse().join(""),
setMaxDigits(130);
var o = new RSAKeyPair(n.e,"",n.n)
, r = encryptedString(o, t.password);
"""
js_ven.execute(data_js)
print(js_ven.r)
三 簡易代碼分享
本文章只提供學習,切勿用在其他用途
import js2py # 講js代碼轉換成python能運行的
import account
import requests
# 獲取到網站的cookie 實作狀態保存
session = requests.session()
session.headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36'
}
response = session.get('http://activity.renren.com/livecell/rKey').json()
print(response)
n = response["data"]
t = {
"password": account.password
}
but_js = session.get('http://s.xnimg.cn/a85738/wap/mobile/wechatLive/js/Barrett.js').content.decode()
big_js = session.get('http://s.xnimg.cn/a85738/wap/mobile/wechatLive/js/BigInt.js').content.decode()
rsa_js = session.get('http://s.xnimg.cn/a85738/wap/mobile/wechatLive/js/RSA.js').content.decode()
# 創建js物件
js_ven = js2py.EvalJs()
js_ven.execute(big_js)
js_ven.execute(rsa_js)
js_ven.execute(but_js)
js_ven.n = n
js_ven.t = t
data_js = """
t.password = t.password.split("").reverse().join(""),
setMaxDigits(130);
var o = new RSAKeyPair(n.e,"",n.n)
, r = encryptedString(o, t.password);
"""
js_ven.execute(data_js)
print(js_ven.r)
data = {
'phoneNum': account.phoneNum,
'password': js_ven.r,
'c1': '-100',
'rKey': n['rkey']
}
url = "http://activity.renren.com/livecell/ajax/clog"
result = session.post(url, data=data)
print(result.text)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/275163.html
標籤:python
上一篇:Python正則運算式
下一篇:第 1 章 語法概述
