提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、通过前端js解密,获取答案
  • 二、通过Python,模拟请求完成自登录到答题的所有操作。
    • 1.引入库
    • 2. 程序结构
    • 3. python解密 JSEncrypt
  • 三、总结与反思

前言

继上一篇博客,主要讲解了页面分析的思路,没有什么可以实操的代码,因此在此继续开启一篇代码实现的文章,具体实现思路,参考上一篇博客: QAX答题页面js逆向分析(一)即可


提示:以下是本篇文章正文内容,下面案例可供参考

一、通过前端js解密,获取答案

操作流程,通过抓包获取topicList参数,复制到data.json文件中,再运行demo.html 文件即可把解密后的正确答案,展示在页面中。

附上 简易的 dmeo.html 代码

<!DOCTYPE html>
<html lang="en">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<style>
p {100%;}
* { margin:0; padding:0;}
</style>
<body>
<div><h1 id = "h1">显示答案</h1>
</div>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<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 publicKey = "密钥请自行获取";data = $.getJSON("data.json", function (data) {data.forEach(function (value, index) {value = value['topic_value']//  解密let RSAEncrypt = new JSEncrypt();RSAEncrypt.setPrivateKey(publicKey);let encryptedPass = RSAEncrypt.decrypt(value);$("#h1").append("<p>"+(index+1)+", 正确答案: "+encryptedPass+"</p>")console.log(index+1, "正确答案: ", encryptedPass);})})</script>
</body>
</html>

运行结果图

注意:建议使用第三方工具抓包,在谷歌浏览器中抓包页面尺寸变化,会强制刷新,不易操作,且容易导致请求覆盖(每次获取的题目id都会不同,会导致题目与解密的正确答案不匹配)。

二、通过Python,模拟请求完成自登录到答题的所有操作。

通过测试,可以发现该流程没有复杂的参数加密,几乎所有参数都是能够在请求中拿到的,因此在考虑用时最少的条件下,可以使用python模拟请求发送,实现自动答题的操作。

1.引入库

代码如下(示例):

import requests
import datetime as dtfrom Crypto.PublicKey import RSA
from Crypto.Cipher import  PKCS1_v1_5
import base64

2. 程序结构

附图

其中,各个实例方法都是通过抓包分析而构造的,简单介绍一下:

  1. sendCode : 通过手机号码获取短信验证码
  2. login : 根据手机号码和收到的验证码,实现登录
  3. findPaperInfo : 根据code(我的理解是这次活动的一个唯一标识)获取问卷信息,包含名称,id,创建人等
  4. findTopicList : 根据问卷id,用户id等,获取具体的题目,在这里就可以进行解密,获取正确答案
  5. verifyCruiseNum :检验用户身份以及答题次数等,经过这个请求,每天可用次数都会少1
  6. saveAnswer : 提交答案
  7. decryptMy : 根据私钥,对正确答案解密

初始化相关参数:

    def __init__(self, score=100, is_comply='0'):self.json_data = {'user_id': '','user_name': '','user_phone': '','paper_id': '','all_socket': '','score': score,  # 最终得分'start_time': dt.datetime.now().strftime('%F %T'),'end_time': dt.datetime.now(),'pclassifyList': [],'is_comply': is_comply,  # 是否已完成,0是完成}self.Referer = ''  self.token = ''

这里只放其中一个核心实例方法,findTopicList 实例方法代码:

    def findTopicList(self):cookies = {'JSESSIONID': '',}headers = {'Pragma': 'no-cache','Sec-Fetch-Site': 'same-origin','Accept-Language': 'zh-CN,zh;q=0.9','User-Agent': '','Sec-Fetch-Mode': 'cors','content-type': 'application/json','Accept': '*/*','Cache-Control': 'no-cache','Referer': self.Referer,'Connection': 'keep-alive','token': self.token,}params = {'paper_id': self.json_data['paper_id'],}response = requests.get('.../devops/examport/index/findTopicList', params=params,cookies=cookies, headers=headers).json()topicList = response['data'][0]['topicList']dd = {'A': 0, 'B': 1, "C": 2, "D": 3, "E": 4, "F": 5}for topic in topicList:# 这里调用解密方法,实现解密answers = decryptMy(topic['topic_value'])topic["userAnswer"] = ''# 有可能会出现多选题,因此在这里以循环至结束,判断答案取完for answer in answers.split(','):answerId = topic['answerList'][dd[answer]]['id']# print(answerId)topic["userAnswer"] = topic["userAnswer"]+","+str(answerId) + ":" + answertopic["userAnswer"] = topic["userAnswer"][1:]topic['uscore'] = 5topic['answer'] = answertopic['is_right']= '0'# 答题时间,以前一个题目完成时间+1.3秒为一个单位self.json_data['end_time'] = self.json_data['end_time'] + dt.timedelta(seconds=1.3)topic['answer_time'] = self.json_data['end_time'].strftime('%F %T')self.json_data['topicList'] = topicList

3. python解密 JSEncrypt

通过查询相关资料,得知这是采用RSA 加密算法进行加密,这里科普一下

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。

多次尝试,最后得到以下代码块:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64
def decryptMy(inputdata):data = base64.b64decode(inputdata)privateKey = "私钥"privateKey = base64.b64decode(privateKey)private_key = RSA.import_key(privateKey)cipher_rsa = PKCS1_v1_5.new(private_key)sentinel = Noneret = cipher_rsa.decrypt(data, sentinel)return ret.decode()

附上参考链接:
pycryptodome 加密解密
爬虫常见加密解密算法
PyCryptodome官方文档

最后附个结果图

三、总结与反思

这次测试,基本能够达到了最初的答题满分的目的,也在一定程度上对自身掌握技术的重新认识,有了更好的前进方向。
不足之处:

  1. 对于常见数据加密方式认识不足,需要恶补
  2. 抓包工具使用不熟练,只局限普通的http请求,没能最大化发挥工具的作用

QAX答题页面js逆向分析(二)相关推荐

  1. JS逆向 -- 分析某站aid、cid、w_rid和sid的加密过程

    接上节课内容 JS逆向 -- 分析某站buvid3和_uuid的加密过程 JS逆向 -- 分析某站b_lsid值加密过程 一.清除cookie信息,刷新网页,ctrl+f搜索sid,这样找到的数据是在 ...

  2. JS逆向分析新浪某站登录处RSA加密

    文章目录 前言 RSA加解密 核心思想 Pyhon实现 NoPadding 新浪网实战 JS加密分析 JS函数调试 Py调用脚本 BurCrypto爆破 插件介绍 实战案例 总结 前言 在渗透测试过程 ...

  3. 轻JS逆向分析“攒经验”项目之某交易所Sign加密参数逆向分析

    最近忙着在搞大数据相关的东西,没什么太多时间去研究复杂的JS,所以给大家来几个练手的网站"攒攒经验"吧!这次出的系列是<轻JS逆向分析"攒经验"项目> ...

  4. 淘宝直播h5页面js逆向解析

    最近公司需要爬取直播商品的一些数据,其中就有淘宝直播. 分析淘宝直播app 很显然,直接搞难度很大,想到找h5页面,半天没找见:然后搞淘宝直播app,先抓包,请求尝试: import requests ...

  5. js aes加密_某高考咨询网js逆向分析笔记

    一.某高考资讯网逆向分析 某网站的js加密分析,安全签名signsafe + HmacSHA1 + AES 一年前分析过网站数据还没有加密,最近需要获取新的数据发现原先的爬虫失效,请求和响应都经过加密 ...

  6. 秀动抢票教程,JS逆向分析与学习

    Its finally music festival ! 经济好转,又有好多演出和音乐节可以看了,无奈黄牛实在太猖狂,只能自己想想办法. 之前写过JS模拟点击下单的脚本,但是太太太慢了,模拟点击下单过 ...

  7. 国家税务总局全国增值税发票查验平台网站js逆向分析及全逆向算法还原

    本文教程针对的是2021年7月2日时国税查验平台的js分析,其中版本号为V2.0.06_009.主要分析内容为key9和flwq39以及fplx这3个参数的算法,其中key9分为获取验证码阶段和查验阶 ...

  8. js逆向分析实战之七麦数据

    1.介绍:   要分析的网站是:https://www.qimai.cn/rank   ①当你打开网站,打开控制台的时候,网站有debugger检测,会陷入一个死循环,让你无法调试,如下图:   ②在 ...

  9. QQ音乐JS逆向分析参数,爬它,多图预警

    昨天看一个哥们的文章说是MD5加密,自己试了试,不知道怎么出错了,所以就老老实实JS逆向了,但真的是MD5加密 分析一下要获得的参数 这次用逆推的方式,应该好理解 1.开发者模式,媒体C40000开头 ...

最新文章

  1. 为什么CSS使用假元素?
  2. 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 抽象业务逻辑函数 )
  3. 手电筒android studio,Android Studio:手电筒关闭时崩溃
  4. RocketMQ的存储之消息的存储分析
  5. Apache Camel 2.11发布
  6. 零基础学习java必须要了解的学习路线
  7. 为apache添加SSL支持
  8. 20181027 考试记录
  9. Perceptron实践
  10. 【数学建模】评价类算法
  11. Win10专业工作站版本激活并获得数字权利的方法和密钥
  12. java实现qq登录界面_java实现简单的QQ登录界面
  13. ddl是什么意思网络语_DDL是什么意思?DDL跟数据库关系介绍 常见的DDL语句分享...
  14. 太赞了!图解SQL基础知识,菜鸟也能看懂的SQL文章!
  15. 2020年最好用的手机是哪一款_2020年值得入手的三款手机,性价比超高,网友:真香!...
  16. 入门数据分析、人工智能前 所需要掌握的知识视频链接。
  17. 如何使用 WEB 技术编写前端代码,实现大屏展示和地图显示功能
  18. 有趣的题目:四色着色问题算法研究
  19. 博彦科技php面试题,北京博彦科技笔试+面试
  20. 高速电机的特性及工作原理(深度总结)

热门文章

  1. 报错Permission denied: user=root, access=EXECUTE, inode=“/tmp/hadoop-root“解决办法
  2. 餐馆点餐系统(Java GUI + mysql)
  3. RTK ? PPK ?到底该选啥
  4. docker/Dockerfile/docker compose
  5. Jfreechart图表生成方法
  6. Yolov5模型使用教程
  7. 计算机教室与黑板距离,教室灯具布置怎么做比较合理?
  8. rule of thumb - “经验法则”或者“拇指规则”
  9. Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as
  10. 软件管理的“七个女妖”-不要相信她们