爬虫逆向实战(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);
}
相关推荐
进击的雷神9 小时前
攻克多级导航循环与class属性ID提取:基于双层循环架构的精准爬虫设计
爬虫·架构
ZC跨境爬虫12 小时前
Playwright核心操作实战精讲(QQ空间+百度+iframe,含等待_键盘_iframe操作)
前端·爬虫·python·计算机外设
ZC跨境爬虫12 小时前
对称加密算法详解(DES篇):特点、实现与逆向实操
前端·javascript·爬虫
南通DXZ13 小时前
Python爬虫进阶:Selenium模拟真人操作(解决反爬+动态网页)
爬虫·python·selenium
shark22222221 天前
Python 爬虫实战案例 - 获取社交平台事件热度并进行影响分析
开发语言·爬虫·python
Blurpath住宅代理1 天前
社交媒体数据采集技术指南:从合规获取到营销洞察
网络·爬虫·动态代理·数据抓取·住宅ip·住宅代理
JoshRen1 天前
Python中的简单爬虫
爬虫·python·信息可视化
ID_180079054731 天前
Python 采集转转二手商品详情:API 接口与爬虫实战全方案(2026 最新)
开发语言·爬虫·python
电商API&Tina1 天前
【京东item_getAPI 】高稳定:API 、非爬虫、不封号、不掉线、大促稳跑
大数据·网络·人工智能·爬虫·python·sql·json
在放️2 天前
Python 爬虫 · 理论基础
开发语言·爬虫·python