仅供学习
一.登入入口的url
https://sso.toutiao.com/account_login/v2/
二.需要破解的提交参数
account
password
fp(后续验证发现他不做校验)
三.找到登入加密的js(在第二层)
function a(e) {
var t, r = [];
if (void 0 === e)
return "";
t = function(e) {
for (var t, r = e.toString(), n = [], i = 0; i < r.length; i++)
0 <= (t = r.charCodeAt(i)) && t <= 127 ? n.push(t) : 128 <= t && t <= 2047 ? (n.push(192 | 31 & t >> 6),
n.push(128 | 63 & t)) : (2048 <= t && t <= 55295 || 57344 <= t && t <= 65535) && (n.push(224 | 15 & t >> 12),
n.push(128 | 63 & t >> 6),
n.push(128 | 63 & t));
for (var a = 0; a < n.length; a++)
n[a] &= 255;
return n
}(e);
for (var n = 0, i = t.length; n < i; ++n)
r.push((5 ^ t[n]).toString(16));
return r.join("")
}
四.翻译js为python
def jing_ri_tou_tiao_encrype(data):
ls = list(data.encode('utf8'))
new_list = []
[new_list.append(str(hex(5 ^ls[index]).replace('0x',''))) for index in range(len(data))]
data = ''.join(new_list)
return data
五.完善代码
import requests
def jing_ri_tou_tiao_encrype(data):
ls = list(data.encode('utf8'))
new_list = []
[new_list.append(str(hex(5 ^ ls[index]).replace('0x', ''))) for index in range(len(data))]
data = ''.join(new_list)
return data
account = jing_ri_tou_tiao_encrype('+86手机号')
password = jing_ri_tou_tiao_encrype('密码')
url = 'https://sso.toutiao.com/account_login/v2/'
data = {
'aid': '1231',
'service': 'https://mp.toutiao.com/',
'account_sdk_source': 'sso',
'mix_mode': '1',
# 'fp': 'verify_kg910vw9_W2a6NlcX_GN0g_4WbF_8FAj_ovWxG4zUiTK2',
'account': account,
'password': password,
}
headers = {
'Referer': 'https://mp.toutiao.com/auth/page/login/?redirect_url=JTJG',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36'
}
res = requests.post(url, data=data, headers=headers)
print(res.json())