正方教务系统分析——后续实现winform版

通过抓包发现登陆接口:http://202.200.206.54/(xxxx)/Default2.aspx 其中xxx中为随机字符串(安全码),每次访问都会出现xxx不同的字符串

分析发现并没有Cookie的影子。

验证码的接口:http://202.200.206.54/(xxx)/CheckCode.aspx?

由于没有Cookie Session所以通过C#模拟登陆后无法保持会话持续,经过了多次尝试

我猜想安全码 一致应该是作为登陆和保持会话持续的突破口。

经过验证 猜想正确 

在访问时写死安全码 在请求头中也写死

调用其他成绩查询页面也继续按照格式写死

最后成功模拟登陆并调用返回课表

总结:目前本校所采用的正方系统通过随机生成的字符串来作为验证,并没有加入Cookie验证之类的机制。

后续完善Winform项目贴出代码

2018-8.16

今天完善了课表界面 并重新审视正方系统 发现3点  

1.系统存在bug 通过带有安全码的地址模拟登陆后 复制其回传ref在另一台设备 get方法(xh=xx学号)可以绕过登陆 

2.课表的接口 ViewState为必须提交参数 否则不返回课表内容,接下来将ViewState作为突破口 实现多账号查询课表功能

3.课表查询api :

http://202.200.206.54/ (安全码)/xskbcx.aspxxh=学号&xm=%D5%C5%C5%F4%B7%C9&gnmkdm=N121603

(经GB2312 URL解码后发现其中xm=表示姓名    居然是拼音缩写- -  )

2018-8.16 22:55

实现抓取课表内容:

经过了一天的研究发现Viewstate每个账号是不一样的 写死之后没办法实现其他账号登陆 ,Viewstate内容经过base64编码的 解码后可以看到包括了网页的一些信息,除非拼接不变的字段并编码 为每次登陆构造不同的Viewstate 暂时放弃这样的作法

ViewSate转码后

t<-323048297;t<;l;>;l;i<2>;i<4>;i<7>;i<9>;i<11>;i<13>;i<15>;i<22>;i<26>;i<28>;i<30>;i<34>;i<36>;i<40>;>;l;l<12018-20191;>>;>;;>;t;l>;>;t;@<2017-2018;2016-2017;2015-2016;>;@<2017-2018;2016-2017;2015-2016;>>;l;>>;;>;t;>>;;>;t;l<学号:31512xxxx;>>;>;;>;t;l<姓名:xx;>>;>;;>;t;l<学院:x院;>>;>;;>;t;l<专业:计算机x院);>>;>;;>;t;l<行政班:计算x术(应院)x级x班;>>;>;;>;t<;l;i<3>;>;l;>;l;>;l;;>;>>;>>;t<;l;>;l;>;l;;>;>>;>>;>>;t<;l;>;l;;>;>>;t;l;>>;l;>;l;;>;>>;t<@0;l;i<0>;i<0>;l<>;>>;>;;;;;;;;;;>;;>;t<;l;>;l;>;l;l;i<2>;i<2>;l<>;>>;>;;;;;;;;;;>;l;>;l;i<2>;>;l;i<1>;i<2>;i<3>;i<4>;i<5>;i<6>;>;l;l<毕业设计;>>;>;;>;t;l<张x滨;>>;>;;>;t;l<14.0;>>;>;;>;t;l<03-15;>>;>;;>;t;l< \;;>>;>;;>;t;l< \;;>>;>;;>;t;l<全体教师;>>;>;;>;>>;t<;l;i<1>;i<2>;i<3>;i<4>;i<5>;i<6>;>;l;l<毕业实践;>>;>;;>;t;l<张x滨;>>;>;;>;t;l<2.0;>>;>;;>;t;l<01-02;>>;>;;>;t;l< \;;>>;>;;>;t;l< \;;>>;>;;>;t;l<全体教师;>>;>;;>;>>;>>;>>;>>;>>;t<@0;l;i<0>;i<0>;l<>;>>;>;;;;;;;;;;>;;>;t<;l;>;l;>;l;l;i<2>;i<2>;l<>;>>;>;;;;;;;;;;>;l;>;l;i<2>;>;l;i<1>;i<2>;i<3>;i<4>;>;l;l<2017-2018;>>;>;;>;t;l<2;>>;>;;>;t;l<毕业设计;>>;>;;>;t;l<张滨;>>;>;;>;t;l<14.0;>>;>;;>;>>;t<;l;i<1>;i<2>;i<3>;i<4>;>;l;l<2017-2018;>>;>;;>;t;l<2;>>;>;;>;t;l<毕业实践;>>;>;;>;t;l<张滨;>>;>;;>;t;l<2.0;>>;>;;>;>>;>>;>>;>>;>>;>>;>>;> DWǚ?T?j}

解决思路:

通过抓包分析 有一个GET方法( 默认获取本学期课表) api:http://202.200.206.54/(0hihwxiaj00gttv355z11o55)/xskbcx.aspx?xh="+act+"&xm="+xm+"&gnmkdm=N121603 xh=学号,xm=学年

只能曲线救国 放弃Posft查询的接口 (不能自由查询了),  通过此get 方式的api直接获取本学期的课表

-若本版本的系统有Cookie 就好解决了

2018-8.18

正方教务系统分析——后续实现winform版_第1张图片

 

项目基本功能都差不多了

今天又获得了一些新思路:

先 GET 关键api发现源码里有Viewstate  这个是服务器响应的值  发现这个值和下一次POST的ViewState值一样

所以有了新的思路,每次Post前 先Get 获取源码之后解析HTML内容 抓出Viewstate 之后再Post出去,这样就解决了自由查询的问题,目前工作转为C#下解析HTML。

 

2018.8.18

通过昨晚的分析 今天对返回的Html下手 本来想用Nuget的三方开源的库 经过尝试报错:提示字符存在非法路径,所以最后无奈还是使用了头疼的“正则表达式”  dDw([\S\\+]*)=

来获取课程表api的 Viewstate

获取后 进行二次编码 (调用System.Net.WebUtility.UrlEncode();方法实现) 转码后拼接在 data中 Post出去

接下来继续完善Winform的其他功能

 

 

你可能感兴趣的:(正方教务系统分析——后续实现winform版)