爬虫逆向实战(37)-某保险超市(AES,SHA256)

news/2024/4/26 20:44:30

一、数据接口分析

主页地址:某保险超市

1、抓包

通过抓包可以发现数据接口是/tacpc/tiananapp/marketing_product_commodity/commodityList
在这里插入图片描述

2、判断是否有加密参数

  1. 请求参数是否加密?
    通过查看“载荷”模块可以发现,有一个jsonKey加密参数
    在这里插入图片描述
  2. 请求头是否加密?
    通过查看“标头”模块,可以发现,有两个加密参数keykeys
    在这里插入图片描述
  3. 响应是否加密?
    通过查看“响应”模块可以发现,响应的是加密数据
    在这里插入图片描述
  4. cookie是否加密?

二、加密位置定位

1、看启动器

查看启动器发现里面包含异步,所以无法正确找到加密位置
在这里插入图片描述

2、搜索关键字

通过搜索关键字jsonKey,可以找到一处加密位置,同时,在jsonKey的上方和下方可以看到有对keykeys赋值以及对响应内容进行处理。
在这里插入图片描述
在此处打上断点,再次请求,发现可以断住,并且此处就是加密以及解密位置。
在这里插入图片描述
在这里插入图片描述

三、扣js代码

扣代码时可以发现,网站使用的是标准的AES和SHA256进行的加密,所以可以不用扣代码,直接使用标准加密模块即可。
js源代码:

const CryptoJS = require('crypto-js')
const JSEncrypt = require('jsencrypt');getAesKey = function (l) {l = l || 32;for (var n = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678", t = n.length, e = "", a = 0; a < l; a++)e += n.charAt(Math.floor(Math.random() * t));return e
}
privaKey = getAesKey(16)
newEncrypt = function (l) {var n = CryptoJS.enc.Utf8.parse(privaKey), t = CryptoJS.enc.Utf8.parse(privaKey), e = CryptoJS.enc.Utf8.parse(l), a = CryptoJS.AES.encrypt(e, n, {iv: t,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return CryptoJS.enc.Base64.stringify(a.ciphertext)
}newEncryptKeys = function (l) {var n = CryptoJS.enc.Utf8.parse("a145b909b96732be"), t = CryptoJS.enc.Utf8.parse("a145b909b96732be"), e = CryptoJS.enc.Utf8.parse(l), a = CryptoJS.AES.encrypt(e, n, {iv: t,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return CryptoJS.enc.Base64.stringify(a.ciphertext)
}cmdRSAEncrypt = function (l) {var n = new JSEncrypt();return n.setPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq5kq78xPZdZyDaDV+MoZEl1X2E+ckq46uAa8U5dS11RPql3EA4fi2M0FvzwlcQGj9OY765xCBzLreyOlq8I+/I30p9rJLX7bSlvuoNAVwE0ZhhvKlgOk6CRn0k2RBaUY7KnL8v4h4B4VIYikeHGZKCod8bdK9NjVXgz+vMFTipzvguiq4C1eFpwc3e5TatWaKapg8HeaEAr58RCUe4OA/9fj58E6Q7Eu9OQJvSO7kOu1O7mE9zAu4ueH46LEEiCCjc2y0sPjFfApUcscDKgTpagpl2iZg8e19f41UnNo7j218REy2WUxar2Wd3vF1aN4rp6BRtbqrTPUnN9qCnM54wIDAQAB"),n.encrypt(l.toString())
}var n = {"pageNo": 1,"pageSize": 9,"sold": "sold","commodityComClass": ""}var f = {"body": n,"head": {"userCode": null,"channelCode": "101","transTime": 1693466711355,"transToken": "","customerId": null,"transSerialNumber": ""}
}function get_params() {var C = newEncrypt(JSON.stringify(f));var x = cmdRSAEncrypt(privaKey)var b = newEncryptKeys(CryptoJS.SHA256(JSON.stringify(n)).toString())var headers = {key: x,keys: b}return [C, headers, privaKey]
}newDecoto = function (l, privaKey) {var n = CryptoJS.enc.Base64.parse(l), t = CryptoJS.enc.Utf8.parse(privaKey), e = CryptoJS.enc.Utf8.parse(privaKey), a = CryptoJS.lib.CipherParams.create({ciphertext: n});return CryptoJS.AES.decrypt(a, t, {iv: e,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)
}function get_data(returns, privaKey) {var n = returns.replace(/[\r\n]/g, "")return newDecoto(n, privaKey);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10883.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

电机与直线模组选型

一。普通电机选型 普通电机选型&#xff08;一&#xff09; 三相异步电机 定子&#xff1a;产生旋转磁场 转子&#xff1a;切割磁场&#xff0c;产生洛伦兹力 结构简单&#xff0c;成本低&#xff0c;稳定 效率较低&#xff0c;转速不稳定 N60f/P 定子旋转速度&#xff1a;150…

JavaScript | 检测文档在垂直方向已滚动的像素值用pageYOffset在webstorm上显示弃用了,是否应该继续使用?还是用其他替代?

在学习JavaScript的时候&#xff0c;深入学习时会遇到一些实际案例需要检测文档在垂直方向已滚动的像素值。 例如&#xff0c;当前页面内容很多&#xff0c;我想要滚动鼠标滑轮或者拖拽滚动条来浏览网页下面的内容。这时候一动滚动条&#xff0c;一些绝对固定的盒子却想要随着…

基于spring boot的体育场馆设施预约系统

摘 要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;体育场馆设施预约系统当然不能排除在外。体育场馆设施预约系统是在实际应用和软件工程的开发原理之上&#xff0c;运用java语言以及Sprin…

python爬虫实战——小红书

目录 1、博主页面分析 2、在控制台预先获取所有作品页的URL 3、在 Python 中读入该文件并做准备工作 4、处理图文类型作品 5、处理视频类型作品 6、异常访问而被中断的现象 7、完整参考代码 任务&#xff1a;在 win 环境下&#xff0c;利用 Python、webdriver、JavaS…

WEB 表单练习题

任务如图&#xff1a; <html><head><meta charest"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><body><table width"…

基于Python3的数据结构与算法 - 16 链表

目录 链表 1. 创建链表 2. 链表的插入和删除 3. 双链表 4. 链表总结 链表 链表是由一系列节点组成的元素集合。每个节点包含两部分&#xff0c;数据域item和指向下一个节点得指针next。通过节点之间的相互连接&#xff0c;最终串联成一个链表。 class Node:def __init…