Fiddler工具 — 实现宗教答题自动应答替换满分数据包直接满分

民族宗教理论知识竞赛系统:http://exam.hm86.cn/

因为学校强制要求答题分数必须在95分以上,次数不限,且每次100题,题目不同,就很难办。

首先想到的方法就是通过js脚本自动答题,因为给的有题库,也可以实现。

但是麻烦,懒得搞。所以就直接上了FD,大致原理:

设置自动应答,替换内置js文件,使满分题目数据包代替js中拼接的原网页题目数据包,并修改提交的开始时间为提交时间的前30分钟,避免时间过短。


 

具体实现:

 

分析提交的数据包

首先看一下做完题提交的时候向服务器提交了什么数据。

开启FD捕获通信,然后随便答题后提交。

 

 

 

 

 

可以看出,startime为提交给后台的开始答题的时间,这一项我们后面是要修改的。

下面的ressuly_content是题目的答题数据,是一个字典列表,每个字典项储存的是一个题的答题数据,分别为序号,题号,以及所选答案。

至此,我们大概知道了后台评分就是根据前台提交的这个数据进行判断的。

那么,我们想要做到100分也就有了思路,把这个答题数据替换掉不就好了,替换成一个100分的数据。

 

先在这放一下100分的字典集。

 

[{"orderindex":"1","topicid":"1000092","result":"C"},{"orderindex":"2","topicid":"1000055","result":"D"},{"orderindex":"3","topicid":"1000075","result":"B"},{"orderindex":"4","topicid":"1000090","result":"A"},{"orderindex":"5","topicid":"1000007","result":"A"},{"orderindex":"6","topicid":"1000148","result":"C"},{"orderindex":"7","topicid":"1000068","result":"A"},{"orderindex":"8","topicid":"1000139","result":"C"},{"orderindex":"9","topicid":"1000151","result":"D"},{"orderindex":"10","topicid":"1000024","result":"A"},{"orderindex":"11","topicid":"1000046","result":"C"},{"orderindex":"12","topicid":"1000212","result":"D"},{"orderindex":"13","topicid":"1000166","result":"D"},{"orderindex":"14","topicid":"1000051","result":"C"},{"orderindex":"15","topicid":"1000081","result":"C"},{"orderindex":"16","topicid":"1000098","result":"B"},{"orderindex":"17","topicid":"1000083","result":"A"},{"orderindex":"18","topicid":"1000015","result":"C"},{"orderindex":"19","topicid":"1000061","result":"A"},{"orderindex":"20","topicid":"1000071","result":"C"},{"orderindex":"21","topicid":"1000088","result":"C"},{"orderindex":"22","topicid":"1000080","result":"B"},{"orderindex":"23","topicid":"1000113","result":"B"},{"orderindex":"24","topicid":"1000150","result":"D"},{"orderindex":"25","topicid":"1000030","result":"B"},{"orderindex":"26","topicid":"1000271","result":"A"},{"orderindex":"27","topicid":"1000009","result":"B"},{"orderindex":"28","topicid":"1000033","result":"B"},{"orderindex":"29","topicid":"1000027","result":"A"},{"orderindex":"30","topicid":"1000165","result":"C"},{"orderindex":"31","topicid":"1000093","result":"D"},{"orderindex":"32","topicid":"1000091","result":"D"},{"orderindex":"33","topicid":"1000017","result":"B"},{"orderindex":"34","topicid":"1000056","result":"A"},{"orderindex":"35","topicid":"1000129","result":"D"},{"orderindex":"36","topicid":"1000082","result":"A"},{"orderindex":"37","topicid":"1000001","result":"D"},{"orderindex":"38","topicid":"1000102","result":"D"},{"orderindex":"39","topicid":"1000025","result":"B"},{"orderindex":"40","topicid":"1000117","result":"D"},{"orderindex":"41","topicid":"1000005","result":"C"},{"orderindex":"42","topicid":"1000034","result":"D"},{"orderindex":"43","topicid":"1000123","result":"C"},{"orderindex":"44","topicid":"1000141","result":"C"},{"orderindex":"45","topicid":"1000155","result":"A"},{"orderindex":"46","topicid":"1000157","result":"A"},{"orderindex":"47","topicid":"1000143","result":"C"},{"orderindex":"48","topicid":"1000140","result":"D"},{"orderindex":"49","topicid":"1000237","result":"D"},{"orderindex":"50","topicid":"1000244","result":"A"},{"orderindex":"51","topicid":"1000133","result":"A,B,C,D"},{"orderindex":"52","topicid":"1000038","result":"A,B,C,D"},{"orderindex":"53","topicid":"1000188","result":"A,C,D"},{"orderindex":"54","topicid":"1000181","result":"A,B,C,D"},{"orderindex":"55","topicid":"1000278","result":"A,B,C,D"},{"orderindex":"56","topicid":"1000210","result":"A,B,C,D"},{"orderindex":"57","topicid":"1000216","result":"A,B,C,D"},{"orderindex":"58","topicid":"1000253","result":"A,B,C,D"},{"orderindex":"59","topicid":"1000185","result":"A,B,C,D"},{"orderindex":"60","topicid":"1000194","result":"A,B,D"},{"orderindex":"61","topicid":"1000207","result":"A,B,C,D"},{"orderindex":"62","topicid":"1000177","result":"A,B,C,D"},{"orderindex":"63","topicid":"1000179","result":"A,B,C,D"},{"orderindex":"64","topicid":"1000183","result":"A,B,C,D"},{"orderindex":"65","topicid":"1000050","result":"A,B,C,D"},{"orderindex":"66","topicid":"1000094","result":"A,B,C,D"},{"orderindex":"67","topicid":"1000021","result":"A,B,D"},{"orderindex":"68","topicid":"1000269","result":"A,B,C,D"},{"orderindex":"69","topicid":"1000214","result":"A,B,C,D"},{"orderindex":"70","topicid":"1000026","result":"A,B,C,D"},{"orderindex":"71","topicid":"1000213","result":"A"},{"orderindex":"72","topicid":"1000267","result":"A"},{"orderindex":"73","topicid":"1000205","result":"B"},{"orderindex":"74","topicid":"1000228","result":"A"},{"orderindex":"75","topicid":"1000217","result":"A"},{"orderindex":"76","topicid":"1000241","result":"B"},{"orderindex":"77","topicid":"1000243","result":"A"},{"orderindex":"78","topicid":"1000242","result":"A"},{"orderindex":"79","topicid":"1000274","result":"B"},{"orderindex":"80","topicid":"1000236","result":"A"},{"orderindex":"81","topicid":"1000201","result":"A"},{"orderindex":"82","topicid":"1000266","result":"A"},{"orderindex":"83","topicid":"1000260","result":"B"},{"orderindex":"84","topicid":"1000200","result":"A"},{"orderindex":"85","topicid":"1000232","result":"A"},{"orderindex":"86","topicid":"1000190","result":"A"},{"orderindex":"87","topicid":"1000202","result":"A"},{"orderindex":"88","topicid":"1000263","result":"B"},{"orderindex":"89","topicid":"1000247","result":"B"},{"orderindex":"90","topicid":"1000206","result":"B"},{"orderindex":"91","topicid":"1000234","result":"A"},{"orderindex":"92","topicid":"1000249","result":"A"},{"orderindex":"93","topicid":"1000272","result":"B"},{"orderindex":"94","topicid":"1000196","result":"B"},{"orderindex":"95","topicid":"1000257","result":"A"},{"orderindex":"96","topicid":"1000255","result":"A"},{"orderindex":"97","topicid":"1000235","result":"A"},{"orderindex":"98","topicid":"1000240","result":"A"},{"orderindex":"99","topicid":"1000252","result":"A"},{"orderindex":"100","topicid":"1000254","result":"A"}]

 

思路有了,我们就要想办法替换。。

其实就像图上那样,设置断点,拦截发送的数据包,然后手动替换是可以的。也测试成功了。

但做这个东西的初衷就是方便,这手动替换,虽说不用搜答案做题了,但是,嗯。。。还是嫌麻烦。

那么就换一个思路,使用FD自动替换数据包中的题目数据。

这种情况就可以用FD的自动应答器来做到,拦截前台的js请求,换成自己的js文件,自动代为处理数据,那么就可以成功的换成自己想要的数据了。

那么就需要查看是哪个js文件负责处理前台用户操作的。

 

分析并处理Js文件

 

查找所需Js文件位置

再次开启FD抓包,重新点击开始测试。

分析并处理抓到的包

第一个主要用于获取答题页面DOM,获取题目,对我们作用不大,下面的css都是样式渲染,无视。

对我们有用的就是第四个js文件,首先推断这个js文件主要就是用于处理交互的。

既然觉得有用,就下载来分析一波。

 

取消提交答题检测

首先我们看到了这个,判断答题是否答完的。

因为答题如果没答完就提交的话会像下面那张图显示那样,提示未作答,且不能提交。

因为我们要直接替换提交的题目数据,所以就不需要做题,那么留着这个判断就会很烦,必须选完才能提交。

所以。。。直接注释掉!

 

替换题目数据

继续分析会找到这个东西,这个函数就是用来处理所做题目的数据的,它会讲所作题目的数据合并成一个字典集,然后返回。

那这就找对地方了,它返回的是真实的做题数据,那我们把这个函数给修改了,让它返回我们准备好的满分题目数据不就OK了。

那就修改代码,如下:

function getExamAnswerFn(){
    var jsonpage=[{"orderindex":"1","topicid":"1000092","result":"C"},{"orderindex":"2","topicid":"1000055","result":"D"},{"orderindex":"3","topicid":"1000075","result":"B"},{"orderindex":"4","topicid":"1000090","result":"A"},{"orderindex":"5","topicid":"1000007","result":"A"},{"orderindex":"6","topicid":"1000148","result":"C"},{"orderindex":"7","topicid":"1000068","result":"A"},{"orderindex":"8","topicid":"1000139","result":"C"},{"orderindex":"9","topicid":"1000151","result":"D"},{"orderindex":"10","topicid":"1000024","result":"A"},{"orderindex":"11","topicid":"1000046","result":"C"},{"orderindex":"12","topicid":"1000212","result":"D"},{"orderindex":"13","topicid":"1000166","result":"D"},{"orderindex":"14","topicid":"1000051","result":"C"},{"orderindex":"15","topicid":"1000081","result":"C"},{"orderindex":"16","topicid":"1000098","result":"B"},{"orderindex":"17","topicid":"1000083","result":"A"},{"orderindex":"18","topicid":"1000015","result":"C"},{"orderindex":"19","topicid":"1000061","result":"A"},{"orderindex":"20","topicid":"1000071","result":"C"},{"orderindex":"21","topicid":"1000088","result":"C"},{"orderindex":"22","topicid":"1000080","result":"B"},{"orderindex":"23","topicid":"1000113","result":"B"},{"orderindex":"24","topicid":"1000150","result":"D"},{"orderindex":"25","topicid":"1000030","result":"B"},{"orderindex":"26","topicid":"1000271","result":"A"},{"orderindex":"27","topicid":"1000009","result":"B"},{"orderindex":"28","topicid":"1000033","result":"B"},{"orderindex":"29","topicid":"1000027","result":"A"},{"orderindex":"30","topicid":"1000165","result":"C"},{"orderindex":"31","topicid":"1000093","result":"D"},{"orderindex":"32","topicid":"1000091","result":"D"},{"orderindex":"33","topicid":"1000017","result":"B"},{"orderindex":"34","topicid":"1000056","result":"A"},{"orderindex":"35","topicid":"1000129","result":"D"},{"orderindex":"36","topicid":"1000082","result":"A"},{"orderindex":"37","topicid":"1000001","result":"D"},{"orderindex":"38","topicid":"1000102","result":"D"},{"orderindex":"39","topicid":"1000025","result":"B"},{"orderindex":"40","topicid":"1000117","result":"D"},{"orderindex":"41","topicid":"1000005","result":"C"},{"orderindex":"42","topicid":"1000034","result":"D"},{"orderindex":"43","topicid":"1000123","result":"C"},{"orderindex":"44","topicid":"1000141","result":"C"},{"orderindex":"45","topicid":"1000155","result":"A"},{"orderindex":"46","topicid":"1000157","result":"A"},{"orderindex":"47","topicid":"1000143","result":"C"},{"orderindex":"48","topicid":"1000140","result":"D"},{"orderindex":"49","topicid":"1000237","result":"D"},{"orderindex":"50","topicid":"1000244","result":"A"},{"orderindex":"51","topicid":"1000133","result":"A,B,C,D"},{"orderindex":"52","topicid":"1000038","result":"A,B,C,D"},{"orderindex":"53","topicid":"1000188","result":"A,C,D"},{"orderindex":"54","topicid":"1000181","result":"A,B,C,D"},{"orderindex":"55","topicid":"1000278","result":"A,B,C,D"},{"orderindex":"56","topicid":"1000210","result":"A,B,C,D"},{"orderindex":"57","topicid":"1000216","result":"A,B,C,D"},{"orderindex":"58","topicid":"1000253","result":"A,B,C,D"},{"orderindex":"59","topicid":"1000185","result":"A,B,C,D"},{"orderindex":"60","topicid":"1000194","result":"A,B,D"},{"orderindex":"61","topicid":"1000207","result":"A,B,C,D"},{"orderindex":"62","topicid":"1000177","result":"A,B,C,D"},{"orderindex":"63","topicid":"1000179","result":"A,B,C,D"},{"orderindex":"64","topicid":"1000183","result":"A,B,C,D"},{"orderindex":"65","topicid":"1000050","result":"A,B,C,D"},{"orderindex":"66","topicid":"1000094","result":"A,B,C,D"},{"orderindex":"67","topicid":"1000021","result":"A,B,D"},{"orderindex":"68","topicid":"1000269","result":"A,B,C,D"},{"orderindex":"69","topicid":"1000214","result":"A,B,C,D"},{"orderindex":"70","topicid":"1000026","result":"A,B,C,D"},{"orderindex":"71","topicid":"1000213","result":"A"},{"orderindex":"72","topicid":"1000267","result":"A"},{"orderindex":"73","topicid":"1000205","result":"B"},{"orderindex":"74","topicid":"1000228","result":"A"},{"orderindex":"75","topicid":"1000217","result":"A"},{"orderindex":"76","topicid":"1000241","result":"B"},{"orderindex":"77","topicid":"1000243","result":"A"},{"orderindex":"78","topicid":"1000242","result":"A"},{"orderindex":"79","topicid":"1000274","result":"B"},{"orderindex":"80","topicid":"1000236","result":"A"},{"orderindex":"81","topicid":"1000201","result":"A"},{"orderindex":"82","topicid":"1000266","result":"A"},{"orderindex":"83","topicid":"1000260","result":"B"},{"orderindex":"84","topicid":"1000200","result":"A"},{"orderindex":"85","topicid":"1000232","result":"A"},{"orderindex":"86","topicid":"1000190","result":"A"},{"orderindex":"87","topicid":"1000202","result":"A"},{"orderindex":"88","topicid":"1000263","result":"B"},{"orderindex":"89","topicid":"1000247","result":"B"},{"orderindex":"90","topicid":"1000206","result":"B"},{"orderindex":"91","topicid":"1000234","result":"A"},{"orderindex":"92","topicid":"1000249","result":"A"},{"orderindex":"93","topicid":"1000272","result":"B"},{"orderindex":"94","topicid":"1000196","result":"B"},{"orderindex":"95","topicid":"1000257","result":"A"},{"orderindex":"96","topicid":"1000255","result":"A"},{"orderindex":"97","topicid":"1000235","result":"A"},{"orderindex":"98","topicid":"1000240","result":"A"},{"orderindex":"99","topicid":"1000252","result":"A"},{"orderindex":"100","topicid":"1000254","result":"A"}];
    var s=""
    for(var i=0;i<jsonpage.length;i++)
    {
        if(s!="")
            s+=",";
        s+="{\"orderindex\":\""+jsonpage[i]["orderindex"]+"\",\"topicid\":\""+jsonpage[i]["topicid"]+"\",\"result\":\""+jsonpage[i]["result"]+"\"}";
    }
    var result_content="["+s+"]";
    
    return result_content;
}

 

就是将准备好的字典集处理成字符串返回。

至此我们就完成了对提交的题目数据的替换。

 

替换开始时间

然后,还有很重要的一步需要进行,那就是修改时间。

刚才说到前台会向服务器提交一个开始做题的开始时间。

如果我们不修改的话,那直接提交会使得时间差太短,可能会检测。

 

那就修改一下,修改开始时间为提交时间的前30分钟。

分析js代码,可以找到往数据包添加开始时间是在这个位置。

 

 

那就将这部分代码换掉,修改代码如下:

   var result_content=getExamAnswerFn();
    var s=starttime;
    function time(time = +new Date()) {
        var date = new Date(time + 8 * 3600 * 1000-1800*1000); // 增加8小时,再减30分钟。
        return date.toJSON().substr(0, 19).replace('T', ' ');
    }
    var d = time(+new Date(s));
    var params={paperid:paperid,csmpagerid:csmpagerid,starttime:d,result_content:result_content,memberusercode:memberusercode,memberschoolid:memberschoolid,membernickname:membernickname}
    var url="examTopicAction.php?action=submit";

 

更换完对时间的处理之后,js代码就算更改完成了,后面就是替换js文件了。

 

替换js文件

 

就是使用FD的自动应答功能,将前台用到的Js代码换成本地自己修改后的Js代码。

具体操作:

 

 

添加自动应答规则,并启用规则。

具体规则为:匹配原js文件的url,然后响应为本地的js文件。

至此,自动应答并替换数据全部完成。

 

测试与使用

此时,将FD处于打开捕获通信状态。

然后进到答题页面,进去之后记得先刷新一次。

然后直接点击提交即可,不需要先随便选。

 

 

OK,成功满分。

 

这次提交时间为20:31,我们再去看看抓到的包。

 

 

成功使开始时间变为提交时间的前30分钟。

 

至此,直接提交实现满分操作完成。

posted @ 2020-12-01 18:05  Jerry'sCat  阅读(13781)  评论(8)    收藏  举报