web逆向实战(二)-学习通-登录过程

目的

  • 通过python模拟登录学习通。
  • 目标网址:aHR0cHM6Ly9wYXNzcG9ydDIuY2hhb3hpbmcuY29tL2xvZ2lu

过程

找请求接口

  • 既然我们是登录过程,在一开始就可以找下有没有带着login字眼的请求,再结合payload中,请求所携带的参数uname和password,这应该就是用户登录的第一个请求。

明确请求参数

  • 在明确了要请求哪个接口后,复制其cURL(bash)到postman或者reqable中进行请求重放。根据返回的结果,对不必要的请求参数进行删减。然后剩下图中所示的请求参数。

  • 然后再把cURL(bash)复制到在线网站,一键生成python代码,最后看下请求返回值是否跟刚刚的一致。如果不一致可能是你的tls指纹问题,也有可能是你把请求参数压缩了,然后给检测到。

  • cURL转Python代码的在线网站:https://spidertools.***/#/curl2Request

  • 通过上边的步骤,剔除掉无关的请求参数后,发现就uname和password是需要加密的。

找函数入口

  • 直接全局搜索变量名password,也可以password : ,password =,或者直接搜encrypt。觉得可疑的也可以都打上断点。下面是看到了ajax所以就八九不离十了,接着就是往上找含有pwd和phone,可疑就打断点,然后不断往上看,直到整个函数loginByPhoneAndPwdSubmit的头部,函数传参也要看(如果有的话)。

  • 打完断点就登录一下试试,登录的时候,最好用固定的账号密码,以便以后遇到一些加密字符串你能够靠经验猜测出来。

  • 函数加密入口:

抠代码

  • 反手先把加密函数扣下来,然后补齐需要的环境。然后就得到结果了。我直接把源码都放出来了,因为就导个加密库就可以了。

源码

import requests
import execjs
import time


def main(username, password, isProxy, Port):
    """
    目的:学习通登录过程
    """
    headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
    cookies = {}
    data = {
      'uname': '',
      'password': '',
      'refer': 'https%3A%2F%2Fi.chaoxing.***',
      't': 'true',
    }
    # 代理
    proxies = {} if not isProxy else {
        'http': f'http://127.0.0.1:{Port}',
        'https': f'http://127.0.0.1:{Port}',
    }

    # 该秘钥在加密函数入口处上方
    aeskey = "u2oh6Vu^HWe4_AES"                          # arg1   aes加密秘钥写死,后面可能要改
    # 导入加密函数文件
    with open('./xxt.js', 'r', encoding="utf-8") as f:
        js_code = f.read()
    # 编译js代码
    code = execjs.***pile(js_code)
    # js代码执行
    encoded_username = code.call("encryptByAES", username, aeskey)
    encoded_password = code.call("encryptByAES", password, aeskey)
    # 修改payload中的值
    data["uname"] = encoded_username
    data["password"] = encoded_password

    print(f"加密后的账户名 ------->>>  {encoded_username}")
    print(f" 加密后的密码  ------->>>  {encoded_password}")

    # 建立session会话
    session = requests.Session()
    # 第一次请求返回固定值:  'https%3A%2F%2Fi.chaoxing.***%2F'  ,其实就是经过了uri编码,encodeURI***ponent("https://i.chaoxing.***/")
    first_response = session.post('https://passport2.chaoxing.***/fanyalogin', headers=headers, cookies=cookies, data=data, proxies=proxies)

    # 第二次请求重定向可加可不加
    # second_response = session.get("https://i.chaoxing.***/", headers=headers, cookies=cookies, data=data, proxies=proxies)

    # 第三次请求返回数据仅可获取个人空间少部分数据,课程数据在另一个ajax请求返回
    timestamp = int(time.time()*1000)
    third_response = session.get(f"https://i.chaoxing.***/base?t={timestamp}", headers=headers, cookies=cookies, data=data, proxies=proxies)
    # print(third_response.text)



if __name__ == "__main__":
    # 输入你的用户名和密码
    username = "12345678910"
    password = "123456"
    # isProxy标识是否使用代理,Port为代理端口,默认不使用。若要使用代理访问网页,请设置为True,代理默认使用7890端口
    isProxy = False
    Port = 7890
    main(username, password, isProxy, Port)
javascript">const CryptoJS = require("crypto-js");

function encryptByAES(message, key){
	let CBCOptions = {
		iv: CryptoJS.enc.Utf8.parse(key),
		mode:CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7
	};
	let aeskey = CryptoJS.enc.Utf8.parse(key);
	let secretData = CryptoJS.enc.Utf8.parse(message);
	let encrypted = CryptoJS.AES.encrypt(
		secretData,
		aeskey,
		CBCOptions
	);
	return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
// console.log(encryptByAES("12345678910", "u2oh6Vu^HWe4_AES"));

总结

  • 这一章节只能算是练练python语法,下次弄下学习通个人空间的课程列表页。

免责声明:本文仅供学习和研究目的,禁止用于任何商业用途。读者在使用爬虫技术时需遵守相关法律法规,本文作者不对读者在使用爬虫技术时可能产生的任何法律风险负责。如有任何侵权或违法行为,请及时联系作者删除相关内容。

转载请说明出处内容投诉
CSS教程_站长资源网 » web逆向实战(二)-学习通-登录过程

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买