JAVA 使用HttpClient模拟完成VPN和教务系统的登录

-----------------前几天想要用java写一个自动登录教务系统的程序,方便随时可以拿到教务系统上的信息。花了几天时间分析登录的流程和加密的方法,最后成功实现。记录一下过程。


流程分析:

  由于学校的教务系统只能通过校内网进入,如果是外网还需要先登录VPN,所以流程很明确 :登录VPN拿到cookie后,再从vpn登陆教务系统,然后用登录后的cookie访问相应的页面即可。


实现:

  先将浏览器cookie清空,然后开始测试第一个 :VPN登录页面,记录响应头的set-cookie。然后登录VPN,查看post的地址和请求头以及响应头的set-cookie。再选择教务系统,记录get的地址和响应头set-cookie以及请求头cookie,最后登录再记录登录的post地址和请求头,响应头的cookie。

 

记录完后分析一下上一次的set-cookie和本次的请求头的cookie的关联性。除了开始几个没用的cookie外,其他基本都是上一次set下一次发送。另外看到登录vpn和教务系统的表单中都有token需要发送,并且教务系统的表单还进行了加密。

 
                          vpn表单                                                                                                                          教务系统表单

在网页请求里面搜索了一下,发现了两个token都是写死在网页里,只需要两次get请求就能拿到。那么接下来就是密码加密的问题。打开登录的请求表单,下断点调试,最后找到登录的js文件,并且定位到加密的位置。

 

 

 

 

 

 

 

 

 

 

在网页控制台不断编辑尝试,最后得到了网页登录的js代码。 

 

 

 那么逻辑很清晰了,从公钥接口传入当前时间戳作为参数获得加密公钥,再将密码用公钥加密后将表单填好提交就行。

加密密码我选择的是将js文件下载下来搭建一个加密的环境,再对密码加密。

       
                                    加密用的js 和 模拟加密
 

在postman上尝试了一下确实能够成功。然后开始写java的代码,但是java在VPN登录这一步就登录不上去了。显示:

 

因为用的是直接post+cookie的方式,这样每一次的session都是新的,但是带上cookie理论上应该被识别成上一次的session。我在poostman将cookie保存后断开链接,然后用cookie发送post登录vpn也会得到这个页面。应该是cookie设置为session断开后失效了。

 查看了一下本地的cookie到期时间 :      

 

也就是说session不能断开,要一次性登录上去。

最后选择httpclient 不断地get post 然后从传回来的页面里面拿token,再提交表,最后成功登录,拿到页面。

 

 

2022年8月25日

posted @ 2022-08-25 16:37  m2on  阅读(1409)  评论(0编辑  收藏  举报