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

一、数据接口分析

主页地址:某保险超市

1、抓包

通过抓包可以发现数据接口是/tacpc/tiananapp/marketing_product_commodity/commodityList

2、判断是否有加密参数

  1. 请求参数是否加密?
    通过查看"载荷"模块可以发现,有一个jsonKey加密参数
  2. 请求头是否加密?
    通过查看"标头"模块,可以发现,有两个加密参数keykeys
  3. 响应是否加密?
    通过查看"响应"模块可以发现,响应的是加密数据
  4. cookie是否加密?

二、加密位置定位

1、看启动器

查看启动器发现里面包含异步,所以无法正确找到加密位置

2、搜索关键字

通过搜索关键字jsonKey,可以找到一处加密位置,同时,在jsonKey的上方和下方可以看到有对keykeys赋值以及对响应内容进行处理。

在此处打上断点,再次请求,发现可以断住,并且此处就是加密以及解密位置。

三、扣js代码

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

js源代码:

javascript 复制代码
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);
}
相关推荐
菩提树下的凡夫12 小时前
利用Python实现获取无人机图片并自动下载保存的简易爬虫
爬虫
码界奇点12 小时前
基于Python的微信公众号爬虫系统设计与实现
开发语言·爬虫·python·毕业设计·web·源代码管理
小白学大数据13 小时前
抖音搜索页数据批量爬取,多关键词同步采集实现
爬虫·python·数据分析
tang7778915 小时前
爬虫爬公开数据被封?实测有效!从原因排查到落地解决全指南
大数据·爬虫·python·网络爬虫·ip
Jelena1577958579217 小时前
Python 爬虫获取淘宝商品详情(标题、主图、SKU、价格)实战指南
网络·爬虫·python
上海云盾-小余17 小时前
游戏业务接口防护:防爬虫、防刷量、防恶意请求一体化方案
爬虫·游戏
星空椰2 天前
从零到实战:一套完整的 Python 爬虫技术体系(requests + BeautifulSoup + 正则 + JSON)
爬虫·python·json·beautifulsoup
zhangfeng11333 天前
合法爬虫四底线 法律边界
爬虫
S1998_1997111609•X3 天前
论恶意注入污染蜜罐进程函数值取仺⺋以集团犯罪获取数据爬虫的轮系依据
网络·数据库·爬虫·网络协议·百度
大邳草民3 天前
Python 爬虫:从 HTTP 请求到接口分析
笔记·爬虫·python