Python学习通(一)手机号POST登录

查看 47|回复 3
作者:7c丶陪你   
之前用selenium的Edge写过一个脚本,评论区说定位方式不好,后面闲着无聊又对学习通做了研究研究。
帐密随便输入,浏览器F12抓包得到下面:


21225e77356ee5667310720a983f80f.png (15.48 KB, 下载次数: 0)
下载附件
登录接口
2024-5-29 20:54 上传

参数:


1716987331347.jpg (25.52 KB, 下载次数: 0)
下载附件
登录参数
2024-5-29 20:55 上传

通过看提交的表单,直白的看出:uname和password 一个是账号一个是密码,最直白的是后面的password。  看到(==)盲猜base64加密了,直接搜base64


1716987678525(1).jpg (56.48 KB, 下载次数: 0)
下载附件
登录加密JS
2024-5-29 21:02 上传

得到这个JS也比较直白login.js      还有一个//pwd=xxxxxxx的明显字样,那这个JS就八九不离十了。


1716987921883(1).jpg (22.27 KB, 下载次数: 0)
下载附件
2024-5-29 21:05 上传

从这里看到 pwd  用了encryptByAES加密,key是"u2oh6Vu^HWe4_AES" 但是这里只看到了 password的加密,而uname的呢?其实定位到这个位置,往上拉一下,JS就有备注【//手机号+密码登录 function loginByPhoneAndPwd()】那uname的加密可能就在附件不远了,因为我们就是手机号+密码登录,往下找一找,可以直接看到POST参数的构成。


1716988360331(1).jpg (62.31 KB, 下载次数: 0)
下载附件
2024-5-29 21:12 上传

确认了Uname和Password都是encryptByAES加密,加密的key是"u2oh6Vu^HWe4_AES" ,那么现在就需要去看看encryptByAES进行了怎么操作。


1716988554051.jpg (27.71 KB, 下载次数: 0)
下载附件
2024-5-29 21:16 上传

接下来就是敲代码环节了。
[Python] 纯文本查看 复制代码
from Crypto.Cipher import AES
import base64
uname="手机号码"
password="密码"
TransferKey="u2oh6Vu^HWe4_AES"
def EncryptAES(TransferKey, Encryptcontent):
    AesKey = TransferKey.encode('utf-8')
    Iv = TransferKey.encode('utf-8')
    Encrypttext = Encryptcontent.encode('utf-8')
    EncryptMode = AES.MODE_CBC
    Cipher = AES.new(key=AesKey, mode=EncryptMode, IV=Iv)
    EncrData = Cipher.encrypt(pad(Encrypttext, 16, 'pkcs7'))
    Data = base64.b64encode(EncrData).decode('utf-8')
    return Data
def LoginXXT(Username, Userpassword, TransferKey):
    username = EncryptAES(TransferKey, Username)
    userpassword = EncryptAES(TransferKey, Userpassword)
    Url = 'https://passport2.chaoxing.com/fanyalogin'
    header = Get_Header()
    header.update({'Host': 'passport2.chaoxing.com'})
    Data = {
        'fid': '-1',
        'uname': username,
        'password': userpassword,
        'refer': 'http://i.chaoxing.com',
        't': 'true',
        'forbidotherlogin': '0',
        'validate': '',
        'doubleFactorLogin': '0',
        'independentId': '0',
        'independentNameId': '0'
    }
    respones = re.post(url=Url, headers=header, data=Data)
    if respones.status_code == 200:
        JsonData = respones.json()
        Cause = JsonData['status']
        if Cause:
            Cookies = respones.cookies
            Cookie = re.utils.dict_from_cookiejar(Cookies)
            UserId = Cookie['_uid']
            return Cookie, UserId
        else:
            Cause = JsonData['msg2']
            print(f'登录失败,原因:{Cause}')
            return "", ""
    else:
        print(f'登录失败,POST错误代码:{respones.status_code}')
        return "", ""
登录后获取cookie和userid,为后面的操作做准备。
太久没写贴了,忘记怎么写了,如果违规请版主或管理员指正修改。

下载次数, 下载附件

star0angel   

大佬牛逼  虽然看不大明白 不会js
258239234   

支持一下,谢谢!
lww32   

支持一下,谢谢!
您需要登录后才可以回帖 登录 | 立即注册

返回顶部