Python干货实战之逆向登录世界上最大的游戏平台Stream
什么是逆向登录?
逆向登录是通过破解网站的登录机制,模拟网站的登录操作,从而实现程序的自动登录。
Stream游戏平台的登录机制
Stream平台的登录机制主要分为两个部分:一是获取登录表单,二是提交登录请求。
首先需要获取登录表单。通过浏览器的开发者工具可以发现,登录表单的URL为:https://auth.stream.qqmusic.qq.com/v1.1/login.php 。
然后需要提交登录请求。登录请求是通过POST方式提交的,请求数据包括:账号、密码等字段信息,其中需要对密码进行加密处理。
Python代码实现
下面是基于Python的实现过程:
1. 导入必要的库
import requests
import json
import time
import hashlib
2. 构建请求体
将账号与密码变量传入构造函数中,调用 build_login_params 方法获取完整的登录参数,请求体中需要传入账号、密码以及其他相关的参数,具体数据可以在浏览器开发者工具中查看。
class LoginStreamer():
#初始化输入账号密码等数据
def __init__(self, u, p):
self.body = self.build_login_params(u, p)
#构建POST登录请求的参数
def build_login_params(self, u, p):
currTime = str(int(round(time.time() * 1000)))
clientIdentity = currTime + "".join(
['%s' %
(hex(ord(c)).replace('0x', '').rjust(2, '0').upper())
for c in 'hTdBd6j3GDVVmZnk'])
password = bytes(p, encoding='utf-8')
result = hashlib.md5(password).hexdigest().upper()
md5pwd = hashlib.md5(bytes(result + clientIdentity,
encoding='utf-8')).hexdigest().upper()
bodyParams = {
"client_plat": "1",
"from_type": "0",
"interfacever": "1.5.3.2413",
"loginmode": "5",
"password": md5pwd,
"qq_access_token": "",
"qq_app_key": "",
"qq_i_openid": "",
"qq_login_model": "0",
"qq_openid": "",
"qq_unionid": "",
"qq_userinfo": "",
"skey_expire": "0",
"user_account": u,
"verify_type": "1",
"vfrom": "0"
}
return bodyParams
3. 发送POST请求
Stream的登录接口是通过POST方式提交的,使用requests库发送POST请求,并将返回的结果转换成json格式进行解析。
class LoginStreamer():
#内部类,发送POST请求并携带登录数据进行请求登录
class Login():
def __init__(self, url):
self.url = url
self.headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)\
Chrome/51.0.2704.63 Safari/537.36"
}
self.session = requests.session()
def get_res(self, body):
try:
res = self.session.post(
self.url, data=json.dumps(body), headers=self.headers)
res.encoding = 'utf-8'
return res
except Exception as e:
print("[Error]:", e)
raise e
#登录主函数
def login(self):
loginUrl = "https://auth.stream.qqmusic.qq.com/v1.1/login.php"
loginObj = self.Login(loginUrl)
res = loginObj.get_res(self.body)
jsonRes = json.loads(res.text)
if jsonRes['code'] == 0:
print("[Success]: Login successfully!")
return True
else:
print("[Failed]: Login failed!")
print("[Error]:", jsonRes)
return False
4. 示例说明
下面是两个示例,一个是使用本地文本文件保存账号和密码,另一个是手动输入账号和密码。
示例一:使用本地文本文件保存账号和密码
# 从本地文件中读取账号和密码
with open("login.txt", "r") as f:
u, p = f.readlines()
# 调用登录函数进行登录
loginstreamer = LoginStreamer(u.strip(), p.strip())
login = loginstreamer.login()
示例二:手动输入账号和密码
# 输入账号和密码,并调用登录函数进行登录
username = input("请输入账号:")
password = input("请输入密码:")
loginstreamer = LoginStreamer(username, password)
login = loginstreamer.login()
总结
逆向登录是一项比较复杂的技术,需要对网站的登录机制有深刻的了解和掌握。通过本文的例子,读者可以学会如何使用Python实现逆向登录的基本方法,以及如何应用相关的技术和库。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python干货实战之逆向登录世界上最大的游戏平台Stream - Python技术站