android获取高校教务系统的数据原理分析

获取原理

想要获取到高校教务系统的数据,原理只有一个:

获取到教务系统的登陆Cookie的信息。

下面我拿我大学的学校的教务系统来分析分析;

首先我们要准备一个抓包的工具,推荐:win下Fiddler ,Mac下Charles。

接下来我将使用Charles这款工具,Charcles的使用需要注意的是不要开其他代理服务。比如翻墙的代理。

登陆系统

下面进入我们学校的电费查询系统,网址为:http://jn.hhtc.edu.cn:8021/XSCK/

进入系统,如图:

打开抓包工具,勾选Mac OS X Proxy。

随便选择一个寝室,输入密码进入系统。如果登陆成功,看看抓包看看数据:

可以看到这里有很多的参数,我们通过客户端去获取数据,只需用户名和密码就可以了。这样有一个问题,登陆页面需要验证码的输入,至于为什么这里不需要,这是这个系统的一个Bug。如果你的系统需要验证码,其实解决的方法也很简单,通过抓包工具,抓到这张验证码的图片,然后展示在客户端,让用户输入就可以了。

登陆成功后,我们还要一个数据,就是Cookie。很多的系统都是通过cookie来识别用户的身份,如图:

这里只需得到SessionId就可以了。

就这样我们通过抓包工具获取这两个数据,就可以对这个系统进行操作了。

  1. 用户名,密码
  2. SessionId

代码实现

下面我们使用hongyang的一个okhttp的工具,地址:https://github.com/hongyangAndroid/okhttp-utils

首先用户名和密码是要有,如果有朋友需要在这个系统上进行学习,可以私聊我,我可以提供用户名和密码给你。

然后通过上面的工具来获取SessionId。代码如下:

OkHttpUtils.post().url(URL)
                .addParams("用户名字段","用户名")
                .addParams("密码字段","密码")
                .build()
                .execute(new Callback() {
                    @Override
                    public Object parseNetworkResponse(Response response) throws IOException {

                        Headers headers = response.headers();
                        LogUtil.e(TAG, "--------> cookie = " + headers.get("Set-Cookie"));

                    }

                    @Override
                    public void onError(Request request, Exception e) {

                    }

                    @Override
                    public void onResponse(Object response) {

                    }
                });

    }

通过log的信息,我们知道这样就可以获取到Cookie 信息了,然后拿这个Cookie信息做其他操作.

我们就来这个Cookie信息来做其他操作,我们选择实时查看的功能。

点击实时查看,然后在浏览器查看源代码,分析源代码,定位我们需要的数据。这里我们只需要电费的余额:

这个label标签下的东西才是我们关心的。下面我们来看看在客户端通过代码是什么实现:

这里我们用到了一个工具Jsoup来解析Html网页数据,jar包的下载地址:https://jsoup.org/download

doc = Jsoup.connect(url).cookie("ASP.NET_SessionId", cookie).timeout(50000).get();

url的值为你要操作功能的地址,通过上面的代码就相当于我们点击实时查看的功能(假如url的值为实时查看的地址)。返回整个网页回来,我们看看怎么解析这个网页:

 Document content = Jsoup.parse(doc.toString());
 divs=content.select("#ctl00_ContentPlaceHolder1_ASPxRoundPanel1_BZ");
 String res = divs.text().trim();
 LogUtil.e(TAG, "----------> res = " + res.toString());

很简单通过 select的方法选择到我们关心到内容就可以了,而我们只需要关心余额到信息,而经过我们上面的分析,余额标签的id为

ctl00_ContentPlaceHolder1_ASPxRoundPanel1_BZ,所以我们通过这个Id就可以获取到我们需要的东西。

最终的效果:

其实这个最关键的得到Cookie,带有了这个cookie信息,你就可以随便操作这个系统上的任何内容。

如果你想要抓取,教务系统上的成绩,课程表信息,其原理都一样。

END

时间: 2024-10-06 22:57:32

android获取高校教务系统的数据原理分析的相关文章

android获取某应用的帧数据

android获取某应用的帧数据: 说明: (打开手机 开发者选项-GPU显示配置文件(显示于 adb shell dumpsys gfxinfo)勾上,只有4.1以上支持) 在android4.1中,谷歌提供了一个工具来,叫做" GPU呈现模式分析(Profile GPU rendering)", 在开启这个功能后,系统就会记录保留每个界面最后128帧图像绘制的相关时间信息 开始操作: 命令行 adb shell dumpsys gfxinfo com.taobao.mobile.d

httpclient3+jsoup获取正方教务系统课表

运用httpclient3+jsoup获取正方教务系统课表 import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Scanner; i

高校教务系统协议分析

这几天研究了一下我们学校的教务管理系统,本想看看它在前端是怎么加密密码的,但是没想到的是用Firbug工具一抓包,发现我们学校的教务系统的账号密码居然没有在前端进行加密传输.于是瞬间有了进一步研究的兴趣. 上图是登录时候的抓的包,POST过去的账号密码是明文. 然后我想了一下发现应该不会那么简单就登录上去了,于是我清空了一下cookies ,重新抓了一次包 果然不出我所料,发现第一次登录POST过去数据后并没有返回什么东西,而是又GET到其他网页去了. 于是我就查看了一下登录地址的后一条GET过

批量获取正方教务系统密码python版本

利用漏洞:正方教务系统最新漏洞 #! /usr/bin/env python #coding=utf-8 import requests from bs4 import BeautifulSoup import os #session = requests.session() #session.proxies = {"http":"127.0.0.1:8080"} #设置burp为代理 pwdTextList = [] resultInfoList = [] url

[原创]Android Studio的Instant Run(即时安装)原理分析和源码浅析

Android Studio升级到2.0之后,新增了Instant Run功能,该功能可以热替换apk中的部分代码,大幅提高测试安装的效率. 但是,由于我的项目中自定义了一些ClassLoader,当使用InstantRun时,经常出现class加载不正确的问题.分析后原因如下. 使用Instant Run编译出的apk里面会多出几个dex文件,和一个instant-run.zip,这个zip里也是一堆dex文件: 所以推测,instant Run的实现原理是: 根据代码结构,将App的源码分割

android获取应用程序缓存的数据

在我们日常的开发过程中,我们的app经常需要缓存一些数据,比如已经登陆的用户信息,比如是不是首次登陆,比如某个页面的引导有没有展示...等等这些.那么这些一般来说不外乎几种做法: 1.使用SharedPreference来进行缓存,缓存的位置在/data/data/xxx.xxx.xxx/shared_prefs中.xxx.xxx.xxx是你的包名. 2.使用sqlite来进行缓存,缓存的数据在/data/data/xxx.xxx.xxx/databases/xxx.db中. 3.文件缓存到sd

Android获取手机和系统版本等信息的代码

有时候需要统计手机的型号和版本号,利用程序可以获取到相应的手机信息,对比两部手机发现,厂商不同,某个信息显示方式也不尽相同,具体见: 1 String phoneInfo = "Product: " + android.os.Build.PRODUCT; 2 phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI; 3 phoneInfo += ", TAGS: " + android.os.B

Android异步任务AsyncTask的使用与原理分析

在上一篇文章<Android缓存机制&一个缓存框架推荐>中说到,在了解了Android缓存机制后我准备自己动手写一个LruCache和DiskLruCache二级缓存的轻量级的图片请求框架,在思考如何搭建这个框架时,纠结于用何种方式去下载图片,是直接new出一个线程呢,还是用看起来稍微高大上档次一点的AsyncTask异步任务来处理?思来想去,还是虚荣心作怪,还是用AsyncTask吧,正好这个工具类我之前用的也比较少,对它的原理也不是很清楚,趁这个机会,好好学一下AsyncTask的

8、Yarn资源调度系统架构与原理分析

@[TOC] 1.Yarn介绍    Apache Hadoop YARN 是 apache Software Foundation Hadoop的子项目,为分离Hadoop2.0资源管理和计算组件而引入.YARN的诞生缘于存储于HDFS的数据需要更多的交互模式,不单单是MapReduce模式.Hadoop2.0 的YARN 架构提供了更多的处理框架,比如spark框架,不再强迫使用MapReduce框架.   从hadoop2.0 的架构图可以看出,YARN承担着原本由MapReduce承担的