QAX答题页面js逆向分析(一)

背景:网络安全宣传周线上答题

`背景:通过分析该网页JS数据,达到获取答卷的完整答案,每个账户活动期间每天可以答3次题,并且每次答题会有20道选择题。这次测试目的,为了实现一次答题满分并获取相应奖励。想到的方法目前有三个:

1. 用多个账号进行答题,通过测试,该活动题库相当有限,几个账号和几天时间能够把几乎所有题目采集下来(在一定程度上保证准确率);

2. 拦截保存答案的http请求,修改相应的请求参数,用程序模拟提交(可以保证用时最少);

3. 其实也是由第二个延申而来比较稳妥的方式,分析页面Js。解密出答案,并人为操作实现答题(认为操做,保证不会被后台检测为机器刷题,安全性更高)。

以下楼主摒弃法1,选择法2开始入手试验,后面为了保证更安全转为法3

附个主页背景图例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大)

1. 抓包分析

该类答题页面,主要网络请求,绝大多数是http请求,无非两种方式,第一种对每一个选项,点击提交,后台记录提交该次结果。第二种,由前端记录所有选项,统一提交给服务器。(这里属于第二种)
通过抓包分析,一次完整的答题请求,必须包含这三个请求。(这里省略登录,还要js文件加载等请求)
第一条,用于获取当前问卷的随机20道题目
第二条,用于获取当前用户是否仍有答题次数
第三条,用于提交用户所选的所有选项。
其中我们只要关心,第一条和第三条。
在这里插入图片描述

通过fiddler抓包分析第三条请求,(这里就直接用谷歌浏览器展示),发现其data参数,与第一条请求返回的参数有极大相似。
附张对比图,其中anser参数就是正确答案,userAnswer是用户自行选择的选项id和答案,is_right 是否正确
在这里插入图片描述

附请求三携带的参数图,注意这个参数pclassifyList ,我们定位js会尤其关注到
在这里插入图片描述

通过对比,可以推测,请求1得到完整的题目以及加密后的答案;请求3校验用户的答案和正确答案是否一致…所以得到结论,我们可以从页面中解密出正确的答案。关键在于解密这个正确答案!

2. 溯源关键JS代码

思路有以下几个:
第一个追溯提交请求,找到提交的正确答案时,定位解密程序(通过该方式成功找到解密程序)
第二个追溯答题时会有判断正确性的功能,找到把选项判断对错的核心代码块,定位解密程序(这里没实验,只是给一种思路)

通过在资源文件中搜索请求3中的关键字saveAnswer,定位到相应的js文件中
在这里插入图片描述
跳转至相应的js文件中,这里我把他拷贝到本地,用sublime text打开方便追溯。
通过Ctrl F查找定位到saveAnswer位置,看这个结构应该是Vue开发的页面…再找到参数pclassifyList
在这里插入图片描述
再搜索 this.pclassifyList 逐个查看发现关键点,this.pclassifyList是个列表,一般都会循环复制。所以就获得了整个页面解密的核心代码块!通过观察代码发现,该解密是通过私钥和参数topic_value进行解密!
在这里插入图片描述
模拟实现解密,这里直接用js解密。

<script src="https://cdn.bootcss.com/jsencrypt/3.0.0-beta.1/jsencrypt.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsencrypt/2.3.1/jsencrypt.min.js" async></script>
<script type="text/javascript">
	var PrivateKey = "";
	var topic_value = "";
	let RSAEncrypt = new JSEncrypt();
	RSAEncrypt.setPrivateKey(PrivateKey);
	let answer = RSAEncrypt.decrypt(topic_value);
	console.log("正确答案: ",answer);
</script>

在这里插入图片描述

最后:

通过请求1,自行获取到20个topic_value参数,以及获取到页面相应的密钥,就可以实现获取问卷的全部所有正确答案。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值