西柚校园网之python模拟登录

2024-01-21 17:59

本文主要是介绍西柚校园网之python模拟登录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近爱上了爬虫,学会了抓网易云加密的评论后对校园网的MD5加密有点感兴趣,于是开始操作,首先是

登录界面http://172.16.245.50/

密码输入123456,此时按下F12,点击登录,然后会提示密码错误,没关系,包已经抓到了,点开网络,看到有两个包

  • 第一个GET
callback用于跨域请求的参数
username一般是学号
ipip地址
_时间戳

  • 第二个GET

参数很多,仔细观察可以知道,passwordchksuminfo是被加密的

 接下来,进入源码看看是如何加密的,搜索password

password直接用的是拼接,ok,那么下一步就是搜索hmd5

 ok,这就是password的加密过程,接下来是搜索chksum

 可以看到,将token和username进行拼接后再进行sha1加密,就可以得到chksum,接下来搜索info

 

这个稍显复杂,要先将数据转为字符串再进行 xEncode加密,然后再进行base64加密就可以得到i

了,然后info就出来了,接下来就是几种加密方式

base64(all.min.js)

 xEncode

 

下面是部分代码供参考。 

# Base64 加密算法
_PADCHAR = "="
_ALPHA = "LVoJPiCN2R8G90yg+hmFHuacZ1OWMnrsSTXkYpUq/3dlbfKwv6xztjI7DeBE45QA"def _getbyte(s, i):x = ord(s[i])if x > 255:print("INVALID_CHARACTER_ERR: DOM Exception 5")exit(0)return xdef get_base64(s):i = 0b10 = 0x = []imax = len(s) - len(s) % 3if len(s) == 0:return swhile i < imax:b10 = (_getbyte(s, i) << 16) | (_getbyte(s, i + 1) << 8) | _getbyte(s, i + 2)x.append(_ALPHA[(b10 >> 18)])x.append(_ALPHA[((b10 >> 12) & 63)])x.append(_ALPHA[((b10 >> 6) & 63)])x.append(_ALPHA[(b10 & 63)])i += 3if len(s) - imax == 1:b10 = _getbyte(s, i) << 16x.append(_ALPHA[(b10 >> 18)] + _ALPHA[((b10 >> 12) & 63)] + _PADCHAR + _PADCHAR)elif len(s) - imax == 2:b10 = (_getbyte(s, i) << 16) | (_getbyte(s, i + 1) << 8)x.append(_ALPHA[(b10 >> 18)] + _ALPHA[((b10 >> 12) & 63)] + _ALPHA[((b10 >> 6) & 63)] + _PADCHAR)return "".join(x)# Xencode 加密算法
def force(msg):ret = []for w in msg:ret.append(ord(w))return bytes(ret)def ordat(msg, idx):if len(msg) > idx:return ord(msg[idx])return 0def sencode(msg, key):l = len(msg)pwd = []for i in range(0, l, 4):pwd.append(ordat(msg, i) | ordat(msg, i + 1) << 8 | ordat(msg, i + 2) << 16| ordat(msg, i + 3) << 24)if key:pwd.append(l)return pwddef lencode(msg, key):l = len(msg)ll = (l - 1) << 2if key:m = msg[l - 1]if m < ll - 3 or m > ll:returnll = mfor i in range(0, l):msg[i] = chr(msg[i] & 0xff) + chr(msg[i] >> 8 & 0xff) + chr(msg[i] >> 16 & 0xff) + chr(msg[i] >> 24 & 0xff)if key:return "".join(msg)[0:ll]return "".join(msg)def get_xencode(msg, key):if msg == "":return ""pwd = sencode(msg, True)pwdk = sencode(key, False)if len(pwdk) < 4:pwdk = pwdk + [0] * (4 - len(pwdk))n = len(pwd) - 1z = pwd[n]y = pwd[0]c = 0x86014019 | 0x183639A0m = 0e = 0p = 0q = math.floor(6 + 52 / (n + 1))d = 0while 0 < q:d = d + c & (0x8CE0D9BF | 0x731F2640)e = d >> 2 & 3p = 0while p < n:y = pwd[p + 1]m = z >> 5 ^ y << 2m = m + ((y >> 3 ^ z << 4) ^ (d ^ y))m = m + (pwdk[(p & 3) ^ e] ^ z)pwd[p] = pwd[p] + m & (0xEFB8D130 | 0x10472ECF)z = pwd[p]p = p + 1y = pwd[0]m = z >> 5 ^ y << 2m = m + ((y >> 3 ^ z << 4) ^ (d ^ y))m = m + (pwdk[(p & 3) ^ e] ^ z)pwd[n] = pwd[n] + m & (0xBB390742 | 0x44C6F8BD)z = pwd[n]q = q - 1return lencode(pwd, False)# md5加密算法
def get_md5(password, token):return hmac.new(token.encode(), password.encode(), hashlib.md5).hexdigest()# sha1加密算法
def get_sha1(value):return hashlib.sha1(value.encode()).hexdigest()

def get_info():info_temp = {"username": username,"password": password,"ip": ip,"acid": ac_id,"enc_ver": enc}i = re.sub("'", '"', str(info_temp))i = re.sub(" ", '', i)return idef get_ip():global iphost_name = socket.gethostname()ip = socket.gethostbyname(host_name)def encrypt():global i, hmd5, chksumi = get_info()i = "{SRBX1}" + get_base64(get_xencode(i, token))hmd5 = get_md5(password, token)chksum = get_sha1(get_chksum())print("---加密完成---")

这篇关于西柚校园网之python模拟登录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/630376

相关文章

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

Python中4大日志记录库比较的终极PK

《Python中4大日志记录库比较的终极PK》日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程,:本文主要介绍Python中4大日志记录库比较的相关资料,文中通过代码介绍的非常详细,... 目录一、logging库1、优点2、缺点二、LogAid库三、Loguru库四、Structlogphp

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

Python海象运算符:=的具体实现

《Python海象运算符:=的具体实现》海象运算符又称​​赋值表达式,Python3.8后可用,其核心设计是在表达式内部完成变量赋值并返回该值,从而简化代码逻辑,下面就来详细的介绍一下如何使用,感兴趣... 目录简介​​条件判断优化循环控制简化​推导式高效计算​正则匹配与数据提取​性能对比简介海象运算符

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目

python项目打包成docker容器镜像的两种方法实现

《python项目打包成docker容器镜像的两种方法实现》本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录简单版:(一次成功,后续下载对应的软件依赖)第一步:肯定是构建dockerfile,如下:第二步