江苏QNDXX
自从团关系从学校迁回家,再也不能摆烂不做青年大学习了,因此我想到分析一下青年大学习的一般流程,提高一下完成效率
通过Charles抓包分析
一、关键时间点
观察整个学习流程,分为5个时间点:
- 打开页面
- 开始学习
- 播放完成
- 课后答题
- 获得截图
其中,在作答时没有发现post请求,答题结束也没有任何验证,因此课后答题是js判断正误的,完全可以跳过,答案对错不影响完成
1、学习过程由以下4个post
请求构成:
虽然域名很奇怪,但是api/event的字眼让我感觉到了不凡
其中有一些未知参数需要分析
2、截图由一个get请求完成
二、参数分析
1、guid
在brilliant.manual.js
文件中找到了生成guid
的算法:
guid
由以下函数生成:
function e(t, n) { var e = new Date, e = (e.setTime(e.getTime() + 94608e6), "; expires=" + e.toUTCString()); r.cookie = t + "=" + (n || "") + e + "; samesite=strict; path=/"}function i(t) { t = r.cookie.match(new RegExp("(?:^|; )" + t.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, "\\$1") + "=([^;]*)")); return t ? decodeURIComponent(t[1]) : null}function a() { i("b_guid"); var t = { guid: i("b_guid") }; return t.guid ? { guid: decodeURIComponent(t.guid) } : (t = { guid: n() + n() + "-" + n() + "-" + n() + "-" + n() + "-" + n() + n() + n() }, e("b_guid", encodeURIComponent(t.guid)), t); function n() { return (65536 * (1 + Math.random()) | 0) .toString(16) .substring(1) }}
实际上就是通过函数n
生成65536-131072之间随机整数的16进制并切割出4位,在函数a
内拼接
console测试一下:
2、tc
timecreate
:创建时间
3、tn
timenow
:当前时间
4、n
当前模块名
分为4类:
- 打开页面
- 开始学习
- 播放完成
- 课后答题
5、u、r
学习页面地址
分析打开大学习界面后的流程
通过get获取页面信息,关键cookie:laravel_session
在该页面中,存在关键信息:token
和lession_id
随后通过post方法获取真正的页面
将地址稍作修改后得到了u
和r
两个地址的值
6、m
学习信息
得到初始的m
值,随后通过修改得到所有m
值
7、city
在area.js
中得到,但混淆过,难以阅读
在打开页面时有“欢迎来自*省*市的团员”选项框,通过观察下拉选项框可以直接得出: