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分钟。
至此,直接提交实现满分操作完成。

浙公网安备 33010602011771号