个人逆向分析

前言

在学习生活种,我们可能会觉得学习生活日常枯燥无聊,身为计算机的学习者我们会时常问计算机到底是来干啥的,(除了做一些乘除数学运算和做一些商业网页还能干些什么?),现在我将用我第一人称的角度来分析逆向数据和某些网站的信息采集,以此来提高学习生活的兴趣,加深对计算机某领域的了解(下面的操作内容我建议可以一步一去跟着操作)。

下面可能会用到的工具有

  1. FireFox浏览器(或者chrome浏览器)
  2. 抓包工具(Fiddler4) 下载链接
  3. 你熟悉的编程语言

谏言

不要用某些工具或者耍小聪明去做一些法律不允许的行为

HTTP请求协议

由于本人也只是凭借着经验才学习到的模糊知识,所以给你的建议是去学习一些专业的网络知识,如果我去解释阐释可能会产生一些误解,反而起到误导效果,在这里我就给大家推荐去了解http如何如何运行的,URL是什么,请求的方式有哪些以及一些常用的网络参数…可以参考别人的博客链接

学校教务处登录分析过程

大家都知道教务处查成绩啊,查课表每次都很麻烦,所以能不能用一个简单的方式去实现,(上完满满的一天课,回到寝室打开电脑,又打开了卡卡的浏览器去登教务处,心里是不是特别烦躁/偷笑),这时候就要把我们的脑洞和编程掏出来了。

fiddler的使用

先打开我们的fiddler软件是这样的:
alt
这时候不要着急,把没用的数据按键盘Ctrl+a,再按delete键全部删掉,再打开火狐或者chrome,进行下面操作(把箭头拖到浏览器上,就能锁定抓取进程了):
alt
下面是打开网页进行浏览测试:
alt
这时我们点开第一条数据,就是网页的整个http请求过程:
alt
123表示步骤,你可以认真看看headers里的信息,因为下面我们会用编程去实现这个过程,其中黄框是整个请求信息,紫框是真个响应信息。

登录测试

我将会用我自己的信息登录,如下图:
alt
fiddler查看整个信息:
alt
发现网页跳转了????很纳闷这个网页使用来干啥的,于是我们来查看这个网页发送了啥数据:
alt
查看表单,结果发现了encode一个表单,然后又开始好奇了???是不是这个就是登录的账号和密码的加密鸭,我们接着进行分析:

查看网页源码

alt
alt
分析源码,找到学号和密码那两个输入框的源码,会发现标签会有id的吧,这个不用说也就懂,js可以通过id来获取用户的输入信息进行绑定:
alt
然后我们往后面接着找有没有什么js程序来处理这些信息呢?
这时候我们有了大大的收获(我们找到了上面留下来的疑问encode):
alt
源码意思呢就是先判断学号和密码是否为空,再进行了一个encodeInp函数,最后生成了一个学号+%%%+密码的字符串进行登录验证的,哈哈哈,那么登录就解决了

加密和解密

这是两个难兄难弟,正如你的qq登录一样,现在的进行安全认证都是得加密的,随然上面我们知道了登录字符串的由来,但是他也不是我们原来的学号啊,是一大串啊,下面我们将解密encodeInp:
返回到源码的最前端,我们去找js的源码:
alt
点这个js链接,按Ctrl+F查找字符encodeInp(结果还真查找到了):
alt
这个js源码大家可能啃不动,所以我也不卖关子了,在这里我就直接说好了,源码的内容就是Base64加密,对比如下:
alt
你会神奇的发现我的学号机密后和encode前部分是一模一样的,所以加密也告一段落

编程实现

上面呢我们分析了教务处的后台原来是用encode验证登录的,那么登录后不是一个302网页吗,又不是教务处登进去的首界面,那么分析又来了,现在大部分的网站后台是根据登录后给你一个cookie信息,后台在验证的时候会一直用当前用户的cookie信息是否合法来验证,验证不过去就访问不了界面,(哈哈,这是我凭借经验得出来的,其他的验证我还没怎么留意,欢迎补充)。所以教务处的整体架构呢,就是用302网页来获取cookie信息,再转到别的网页去让学生浏览。cookie如下:
alt
好了,下面就用python进行登录一下测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#用python的bease64库来进行加密编码
import base64
#用requests模块来进行请求处理
import requests

student_number = input('输入学号:\n')
student_password = input('输入密码\n')

#base64编码后的学号 输入的信息转为utf-8
code_stuNumber = base64.b64encode(student_number.encode('utf-8'))
code_password = base64.b64encode(student_password.encode('utf-8'))

login_url = "http://cdjwc.ccu.edu.cn/jsxsd/xk/LoginToXk" #登录的url,就是302的那个网址
index_url = "http://cdjwc.ccu.edu.cn/jsxsd/framework/xsMain.jsp" #学生的首界面

#为了方便保存cookie信息,我们这里用requests的session就是全局用一个会话来模拟浏览器访问,就不要额外去保存cookie了
session = requests.session()
#首部信息,标志的操作系统和浏览器的信息
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0'}
#提交信息就是我们分析的 encode字符串
post_data = {'encoded':code_stuNumber+b"%%%"+code_password}

#登录
try:
re =session.post(login_url, headers = header, data=post_data) #进行post请求,加上我们的首部和encode
except:
print('出错')
exit(-1)
#打印一下状态码
print("登录状态"+str(re.status_code))

#首页查看
try:
re = session.get(index_url, headers=header)
except:
print('出错')
exit(-1)
#打印一下你的网页源码,查看是否有你的名字,有就是模拟成功了
print(re.text)

alt
alt

PS:(暂时先更新教务处的,有时间就更新别的网站测试)