冰凌汇编

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 83|回复: 0
收起左侧

[Web逆向] 新版正方教务网模拟登录python实现

[复制链接]
bingling 发表于 2022-6-19 23:16:12

新版正方教务网模拟登录

前言

正好大学期末考完,分析一下正方教务网登录,实现模拟登录就可以自己实现抢课和查询成绩等常规操作了

申明

本文以我学校的正方教务网为例,关键信息已打码,理论上适用于所有新版正方教务网,仅供学习使用!

分析

打开学校正方教务网主页,随便输入一个账号密码抓个包
新版正方教务网模拟登录python实现 - bingling_冰凌汇编

csrftoken: e7d068a9-8f60-4341-9d20-308e20208223,e7d068a98f6043419d20308e20208223
language: zh_CN
yhm: 账号
mm: 加密过的密码
mm: 加密过的密码
yzm: 验证码

可以看到提交的form表单中我们输入的用户名12345出现在表单中,但是密码12345被加密了,同时还多了一个参数csrftoken,根据经验,这玩意应该就在网页的源代码中,我们打开网页源码,全局搜索csrftoken
新版正方教务网模拟登录python实现 - bingling_冰凌汇编

果然就在网页的源码中,那么只要解决密码加密,就能构造表单模拟登录了,看加载的请求,其实很容易可以看到,正方用的是RSA加密,并且加密的PublicKey的请求也出现在了加载项中
新版正方教务网模拟登录python实现 - bingling_冰凌汇编

那么问题就变成了使用python对密码进行RSA加密,有两条路可以走,要么把原来的js代码改写移植成python代码,要么就用python调用js代码,为了省事一点,我们选择通过python来调用js代码,这里介绍一个第三方库execjs,虽然这个包已经很久没有维护了,原作者也已经放弃了,但是对于调用一般的js代码还是够用的,如果没有安装过的话,可以通过

pip3 install Pyexecjs

同时这个第三方包还需要node环境,不然可能会报错,如何安装node环境就自行百度了有很多现有教程这里就不赘述了

在调用前,我们需要对js代码进行改写一下

login.js中,全局搜索password关键字,可以很容易看到密码的加密语句
新版正方教务网模拟登录python实现 - bingling_冰凌汇编

我们复制下来

 var rsaKey = new RSAKey();
 rsaKey.setPublic(b64tohex(modulus), b64tohex(exponent));
 var enPassword = hex2b64(rsaKey.encrypt($("#mm").val()));

稍微改写一下

function PWD(modulus,exponent,pwd){

  var rsaKey = new RSAKey();
  rsaKey.setPublic(b64tohex(modulus), b64tohex(exponent));
  var enPassword = hex2b64(rsaKey.encrypt(pwd));

  return enPassword;
}

新版正方教务网模拟登录python实现 - bingling_冰凌汇编

结合这四个js文件,整合成一个js文件,尝试调用测试一下

function bbbb(){
  return (PWD('AKeOxL4d1Q2WkT8+wHfqFgY7kaDyCbhweW010ERGrMK9P8r6QJhwMwRzCwd4PSSvgVQ9T2mxPSGhedebK6YX63/GBx1zIVtghNm34TDqYgOZga6Tv4BnOymLzYxRNZv7L17RJzaWDJRS3Pcd4lPwMklSfG+e9sLkqYMOYcemPvNp','AQAB','12345'));
}
console.log('这是加密的密码:'+bbbb())

新版正方教务网模拟登录python实现 - bingling_冰凌汇编

可以看到结果正常输出,接下来就是用python调用

import execjs

with open('rsa.js',mode='r',encoding='utf-8') as js:
    js = js.read()
js = execjs.compile(js)

res = js.call('bbbb')

print(res)

新版正方教务网模拟登录python实现 - bingling_冰凌汇编

可以看到结果正常输出出来

最后就剩一个验证码了,你可以选择接入第三方打码平台或者使用python第三方库,这里我选择一个比较简单的的python第三方库ddddocr,对于正方这种简单的数字字母混合类型的识别的成功率还是很高的。

首先安装ddddocr

pip3 install ddddocr

新版正方教务网模拟登录python实现 - bingling_冰凌汇编

值得注意的是ddddocr好像还没有适配最新版本3.10.4的python,新版本直接安装会报错,但是问题不是很大,这里介绍一个我们用pipenv创建一个低版本的python环境就好了,如果本身就是低版本的可以忽略这一步

首先安装pipenv

pip3 install pipenv

然后创建一个低版本的python环境,这里我选择3.8

pipenv --python 3.8.9

然后激活环境

pipenv shell

我们输入

python -V

输出我们对应版本的python就说明虚拟环境创建成功了

如果想要推出虚拟环境命令为

exit

新版正方教务网模拟登录python实现 - bingling_冰凌汇编

接下来我们用命令

pipenv install requests
pipenv install ddddocr

来安装我们需要的第三方包,使用命令

pipenv graph

查看python包的安装情况
新版正方教务网模拟登录python实现 - bingling_冰凌汇编

输出以上内容就可以食用了,我们通过ddddocr来识别一下正方教务的验证码

登录界面在验证码处右键复制图片地址
新版正方教务网模拟登录python实现 - bingling_冰凌汇编

然后简单编写一下python代码调用一下

import requests
import ddddocr

res = requests.get(url = 'https://xxxx.xxxxx.edu.cn/jwglxt/kaptcha?')

ocr = ddddocr.DdddOcr()
image_res = ocr.classification(res.content)

print(f'验证码为:{image_res}')

可以看到识别正常
新版正方教务网模拟登录python实现 - bingling_冰凌汇编

这样子正方教务网登录的所有参数都齐全了,编写代码构造表单登录即可,

附上成功登录截图
新版正方教务网模拟登录python实现 - bingling_冰凌汇编

后话

  • 正方模拟登录爬虫属于初级难度,就只有密码RSA加密了其他没有任何难度,可以作为新手入门爬虫练习
  • 这个可以结合前两天我发的正方选课就可以实现抢课或者捡漏通识课体育课了
  • 如有其他问题可留言讨论
冰凌汇编免责声明
以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|站点统计|Archiver|小黑屋|RSS|冰凌汇编 ( 滇ICP备2022002049号 滇公网安备 53032102000029号)|网站地图

GMT+8, 2022-9-25 07:43 , Processed in 0.126293 second(s), 7 queries , Redis On.

冰凌汇编 - 建立于2021年12月20日

Powered by Discuz! © 2001-2022 Comsenz Inc.

快速回复 返回顶部 返回列表