仅使用浏览器分析某教育平台从登陆到任务完成的数据交换
本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!以CQ市为例
在登陆页,任意输入一个帐号密码,然后在控制台看到登陆接口为
usercenter/api/v3/wx/login?checkShowQrCode=true&tmp=false
数据并未加密,那么无感登陆就简单了
$.ajax({
url: "https://appapi.xueanquan.com/usercenter/api/v3/wx/login?checkShowQrCode=true&tmp=false",
type: "POST",
contentType: "application/json",
dataType: "json",
xhrFields: {
withCredentials: true
},
timeout: 10 * 1000,
data: JSON.stringify({ username: _o.user, password: _o.pwd, "loginOrigin": 1 }),
success: function (_data) {
console.log(_data);
}}
第二步,进入学习任务页
同上,得到,任务完成情况接口为:
safeapph5/api/v1/homework/homeworklist
无感开启任务页
//学习任务
var openTabs = {};
function studyList(_isTest) {
console.log("获取学习任务列表");
$.ajax({
url: "https://yyapi.xueanquan.com/chongqing/safeapph5/api/v1/homework/homeworklist",
type: "GET",
contentType: "application/json",
dataType: "json",
xhrFields: {
withCredentials: true
},
timeout: 10 * 1000,
success: function (_data) {
var _t = _data.length;
var _num = 0;
if (_t > 0) {
while (_t--) {
if (_data.workStatus == "UnFinish") {
console.log(_data.title, ":", _data.url);
var _gid = getValueByUrl(_data.url, "gid");
var _li = getValueByUrl(_data.url, "li");
//常规授课课程
if (_gid && _li) {
//看视频(方案失败)
//killVideo(_data.title, _gid, _li);
//把手机版地址转换为电脑版地址
var _videoUrl = _data.url.replace("platform/student/skilltrain.html", "jt/student/SeeVideo.html");
if (!openTabs) {
openTabs = true;
window.sendMessage({ type: "createTab", data: { url: _videoUrl, selected: false } });
} else {
//完成答题
console.log("答题");
killStudy(_data.title, _li);
}
} else {
//专项课程(参数sid在列表数据中没有)
//window.open(_data.url);
sutdentSign(818);
}
_num++;
}
}
} else {
_num = -1;
console.log("本期还没有开启需要完成的任务。");
}
if (_num == 0) {
if (_isTest) {
console.log("任务完成有效,验证通过。");
} else {
console.log("当前没有需要完成的任务。");
}
setTimeout(lockUser, 600, getUrlParam("uid"));
} else {
_num > 0 && console.log("尝试完成了" + _num + "个任务。");
setTimeout(studyList, 1000, true);
//window.sendMessage({ type: "reloadTime", data: { time: _num + 0.5 } });
}
}
})
}
视频只要打开就视为完成,关键的是答题,通过分析得到。答案其实就在接口返回的sjon数据中,在提交时作答的情况并未返回到后面判断 。
而给后台的数据是:
_answer = {
"workId": _data.workId,
"fid": _data.fid,
"title": _title,
"require": "",
"purpose": "",
"contents": "",
"testanswer": "0|0|0",
"testinfo": "已掌握技能",
"testMark": 100,
"testResult": 1,
"siteName": "",
"siteAddrees": "",
"watchTime": "2022-04-08T02:45:24.323Z",
"courseID": _cid
}
以上数据 中的 "0|0|0",表示做的全对。那么直接无感提交:
function killStudy(_title, _cid) {
//获得题目的ID
$.ajax({
url: "https://yyapi.xueanquan.com/chongqing/api/v1/StudentHomeWork/GetSkillTestPaper?courseId=" + _cid,
type: "GET",
contentType: "application/json",
dataType: "json",
xhrFields: {
withCredentials: true
},
timeout: 10 * 1000,
asycn: false,
success: function (_data) {
console.log(_data);
_data = _data.result;
_answer = {
"workId": _data.workId,
"fid": _data.fid,
"title": _title,
"require": "",
"purpose": "",
"contents": "",
"testanswer": "0|0|0",
"testinfo": "已掌握技能",
"testMark": 100,
"testResult": 1,
"siteName": "",
"siteAddrees": "",
"watchTime": "2022-04-08T02:45:24.323Z",
"courseID": _cid
}
sendAnswer(_answer);
}
})
}
function sendAnswer(_data) {
//提交答题数据,完成答题
$.ajax({
url: " https://yyapi.xueanquan.com/chon ... meWork/HomeWorkSign",
type: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(_data),
xhrFields: {
withCredentials: true
},
timeout: 10 * 1000,
success: function (_data) {
console.log(_data);
}
})
}
一个任务就算完成了。
专项任务也直接上
//专项活动视频签到(很重要)
function sutdentSign(_sid, _exit) {
var _sid = _sid || $("body").attr("data-specialId") || 808;
$.ajax({
url: "https://huodongapi.xueanquan.com/p/chongqing/Topic/topic/platformapi/api/v1/records/sign",
type: "POST",
contentType: "application/json",
dataType: "json",
xhrFields: {
withCredentials: true
},
data: JSON.stringify({ "specialId": _sid, "step": 1 }),
timeout: 10 * 1000,
success: function (_data) {
console.log(_data);
if (_exit) {
//lockUser(getUrlParam("uid"));
}
}
})
}
到此,登陆 看视频 做练习 专项作业就串起来了。因为数据没有加密,所以完全没有压力。
{:1_907:}
shouwangxinyang 发表于 2023-2-15 10:22
我还一直好奇 是做了加密函数的话是是不是就不能这么做 或者直接删除掉这个能不能过
加密了也能玩。
一种方案是逆向加密函数
另一种方案就简单得多了直接通过devtool控制台获取一个人的数据记录下来,用于其它的人(因为所人有完成的任务都一样,数据相同)
如果加密后每个人的数据不一样,可以通过控制台替换文件在js中直接引用加密函数。 fyabcabc 发表于 2023-2-15 08:14
他是因为违规三次被ban了帖子自动屏蔽
我这个帖子,只是做数据交互方面的分析。
这里有个王炸: https://anquan.huggy.moe/
据说是个高中学生做的,一看便知。 针对这个平台,我举双手,你做得对{:1_918:} o.o 发表于 2023-2-14 13:08
针对这个平台,我举双手,你做得对
{:1_896:}搜索过历史贴。好像发成品会被删贴。
所以只能分个分析过程 。 具体怎么用呢 我举双手支持你! tyz1234 发表于 2023-2-14 14:14
小白期待大佬的成品,谢谢
发成品会被删贴。{:1_937:} 我们这儿暂时还未接触到此平台。感谢楼主提前剧透。 哈哈 虽然看不懂但是很赞 不会用啊