Python干货实战之逆向登录世界上最大的游戏平台Stream

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技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 对python中各个response的使用说明

    对Python中各个response的使用说明 在Python中,requests库是常用的HTTP客户端库,用于发送HTTP请求和处理HTTP响应。requests库中的response对象是HTTP响应的封装,包含了HTTP响应的各种信息。以下是对Python中各个response的使用说明。 response.status_code response.…

    python 2023年5月15日
    00
  • Python中用Ctrl+C终止多线程程序的问题解决

    问题背景:在Python中使用多线程编程时,如果想要停止/终止程序却发现Ctrl+C无效,这可能是因为Ctrl+C只能退出主线程,并不能使所有线程停止,导致程序无法结束或者产生一些无法预知的错误。 解决方法:为了终止所有线程,我们可以采用以下两种方法: 方法一:在多线程代码逻辑中,设置一个全局变量flag,并设置其初始值为True。当接收到Ctrl+C信号时…

    python 2023年5月19日
    00
  • 一文带你探寻Python中的生成器

    一文带你探寻Python中的生成器 在Python中,生成器是一种特殊的迭代器,它可以让我们以一种更加高效和简洁的方式处理大量数据。本文将为大家讲解Python中的生成器,包括生成器的定义、生成器表达式、生成器的使用方法及实际应用示例。 什么是生成器? 生成器是一种可以“延迟生成”的迭代器。与列表等容器类型的数据结构不同,生成器并不需要一次性将所有数据生成出…

    python 2023年6月5日
    00
  • pyftplib中文乱码问题解决方案

    pyftplib中文乱码问题解决方案 在使用pyftplib库上传或下载文件时,可能会遇到中文乱码的问题。本文将介绍如何解决pyftplib中文乱码问题。 解决方案 pyftplib库默认使用ASCII编码,因此在上传或下载文件时,需要将文件名转换为bytes类型,并使用正确的编码格式。以下是解决pyftplib中文乱码问题的示例: import ftpli…

    python 2023年5月15日
    00
  • python 安全地删除列表元素的方法

    Python 中删除列表元素有多种方法,但有些方法可能会产生一些不可预知的结果或者安全风险。例如,使用 del 删除列表元素时,可能会意外删除某些其他变量的引用;使用 remove() 方法时,如果要删除的元素不存在,则会抛出异常。因此,为了安全地删除列表元素,可以采用以下方法: 方法一:使用 pop() 方法按索引删除元素 pop() 方法可以接收一个索引…

    python 2023年6月3日
    00
  • python实现KNN分类算法

    Python实现KNN分类算法 KNN(K-Nearest Neighbors)是一种常用的分类算法,它的基本思想是:对一个未知样本,找到与其最近的K个知样本,然后根据这K个样本的类别进行分类。在Python中,可以使用scikit-learn库实现KNN分类算法。本文将详细讲解Python实现KNN分类算完整攻略,包括算法原理、Python实现过程和示例。…

    python 2023年5月13日
    00
  • Python lxml库的简单介绍及基本使用讲解

    下面是详细的攻略: Python lxml库的简单介绍及基本使用讲解 Python lxml库是一个用于处理XML和HTML文档的Python库。它提供了一组简单易用的API,可以方便地解析和操作XML和HTML文档。本文将介绍Python lxml库的基本使用方法。 安装Python lxml库 在使用Python lxml库之前,我们需要先安装它。可以使…

    python 2023年5月14日
    00
  • Python基于dom操作xml数据的方法示例

    当我们需要对XML数据进行操作时,可以使用Python中的DOM(文档对象模型)模块实现。DOM提供了基于树形结构对XML数据进行解析和操作的方法。 以下是基于DOM操作XML数据的示例过程。 1. 导入DOM模块 使用Python中的xml.dom.minidom模块来解析和操作XML数据。因此,需要先导入该模块。 import xml.dom.minid…

    python 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部