爬虫逆向实战(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);
}
相关推荐
巴里巴气3 小时前
Python爬虫用Clash软件设置代理IP
爬虫·python·tcp/ip
우리帅杰10 天前
爬虫002-----urllib标准库
爬虫
RacheV+TNY26427810 天前
拼多多API限流机制破解:分布式IP池搭建与流量伪装方案
大数据·网络·人工智能·爬虫·python
我怎么又饿了呀10 天前
DataWhale-零基础络网爬虫技术(三、爬虫进阶技术)
爬虫·datawhale
network爬虫10 天前
Python异步爬虫编程技巧:从入门到高级实战指南
开发语言·爬虫·python
电商API_1800790524710 天前
实现自动胡批量抓取唯品会商品详情数据的途径分享(官方API、网页爬虫)
java·前端·爬虫·数据挖掘·网络爬虫
lynn-6610 天前
java爬虫 -jsoup的简用法
java·开发语言·爬虫
伍哥的传说10 天前
Node.js爬虫 CheerioJS ‌轻量级解析、操作和渲染HTML及XML文档
爬虫·node.js·html
우리帅杰11 天前
爬虫001----介绍以及可能需要使用的技术栈
爬虫
Go Dgg11 天前
Go 语言的堆糖图片爬虫
开发语言·爬虫·golang