day13~14核心案例某采招网

一、关于加密解密定位搜索

1、请求堆栈

举例A~E函数,A调用B,B调用C。。。E调用D。根据堆栈不断溯源。

测试代码:

javascript 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        // JS 代码

        function get_data() {
            let gf = "高圆圆"
            console.log("初始化")
            b()
        }

        function b() {
            let apple = "APPLE"
            let gf = "刘亦菲"
            let enc_data = "asdfg" // 模拟的加密数据
            console.log(enc_data)
            c(enc_data)
            console.log("xxxxx")
        }

        function c(obj) {
            let gf = "赫本"
            d({
                "a": "aaa",
                "b": "bbb",
                "enc_data": obj
            })
        }

        function d(data) {
            let gf = "橘梨沙"
            let x = 10
            let y = 100
            console.log("发射请求,加密数据:", data.enc_data)
        }

        // 发射请求
        get_data()


    </script>

</head>
<body>

</body>
</html>

2、关键字搜索

1、方法关键字

-- encrypt decrypt AES

-- Json.stringify Json.parse

2、key关键字(指的是payload(请求体)的key

3、headers关键字

4、路径关键字

5、拦截器关键字

二、请求堆栈

三、hook

补充第8期:day18~20,讲解AES、RSA、MD5等对称和非对称加密的特点!

案例 采招网

url:https://search.bidcenter.com.cn/search?keywords=园林 绿化\&mod=0\&page=2

发现抓包的响应是加密的,就是说浏览器一定有解密的入口才能显示出来

我们直接控制台搜索decrypt(关键字,可能会搜索出来很多个结果。可以将每个结果都加上断点尝试!

找到加密入口之后,缺啥补啥

javascript 复制代码
AESDecrypt: function (str) {
        var nContent = CryptoJS.AES.decrypt(str, variate.key, {
            iv: variate.aceIV,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.ZeroPadding
        })
        if (nContent && nContent != null) {
            try {
                var constr = CryptoJS.enc.Utf8.stringify(nContent)
                if (constr != "") {
                    var data = JSON.parse(constr);
                    return data;
                }
                else
                    return null;
            }
            catch (err) {
                return null;
            }

        } else
            return null;
    }

修改之后的js

javascript 复制代码
function AESDecrypt(str) {
    var variate = {
        key: {"words": [863652730, 2036741733, 1164342596, 1782662963], "sigBytes": 16},
        aceIV: {"words": [1719227713, 1314533489, 1397643880, 1749959510], "sigBytes": 16},
    }
    var nContent = CryptoJS.AES.decrypt(str, variate.key, {
        iv: variate.aceIV,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding
    })
    if (nContent && nContent != null) {
        try {
            var constr = CryptoJS.enc.Utf8.stringify(nContent)
            if (constr != "") {
                var data = JSON.parse(constr);
                return data;
            } else
                return null;
        } catch (err) {
            return null;
        }

    } else
        return null;
}

Python调用JS

python 复制代码
import base64

import requests
from Crypto.Cipher import AES

headers = {
    'accept': 'text/plain, */*; q=0.01',
    'accept-language': 'zh-CN,zh;q=0.9',
    'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'origin': 'https://search.bidcenter.com.cn',
    'priority': 'u=1, i',
    'referer': 'https://search.bidcenter.com.cn/',
    'sec-ch-ua': '"Google Chrome";v="141", "Not?A_Brand";v="8", "Chromium";v="141"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"macOS"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-site',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36',
}

data = {
    'from': '6137',
    'guid': '1661ac42-d451-440b-bfcb-f49b00df7a15',
    'location': '6138',
    'token': '',
    'next_token': '',
    'keywords': '%E5%9B%AD%E6%9E%97%20%E7%BB%BF%E5%8C%96',
    'mod': '0',
    'page': '3',
}

response = requests.post('https://interface.bidcenter.com.cn/search/GetSearchProHandler.ashx', headers=headers,
                         data=data)

print(response.text)

# JS逆向
# import execjs
#
# ret = execjs.compile(open("02 caizhaowang.js").read()).call("AESDecrypt", response.text)
# print(ret)


# Python逆向
# encrypt_data = base64.b64decode(response.text)
# key = '3zKzyf6eEfuDjAG3'.encode()
# iv = 'fyUANZ0qSNZhhNCV'.encode()
# aes = AES.new(key, AES.MODE_CBC, iv)
# data = aes.decrypt(encrypt_data)
# print("data:::", data.decode())

写法二、使用python来解密!将Js加密方式翻译成Python的!

相关推荐
hixiong1236 分钟前
C# 使用 ZXingCpp.Angle 进行条码、二维码识别
开发语言·c#·扫码
云和数据.ChenGuang7 分钟前
AI 工程师相关就业岗位(细分,偏工程落地,由底层到上层)
服务器·开发语言·人工智能·python
爱读书的小胖17 分钟前
Codewars:Last digit of a large number(C)解题分析
c语言·开发语言·r语言
码途行者30 分钟前
处理超时未支付订单:两套轻量化方案,附 PHP 极简实现
开发语言·redis·php
晓得迷路了32 分钟前
栗子前端技术周刊第 150 期 - Stack Overflow 开发者调查结果、TanStack Start 1.0...
javascript·css·后端
云和数据.ChenGuang34 分钟前
LangChain 实战指南:从入门到构建智能应用
开发语言·人工智能·python·langchain
const_qiu36 分钟前
第三章 04:3.6 基础调用链的构建
开发语言·python
向上的车轮38 分钟前
Python 大数据处理不慢:Polars + DuckDB + Arrow 实战指南
开发语言·python
Nebula_g43 分钟前
云禾外卖补充—项目整体后端运行逻辑-对流程的更深层次理解
java·开发语言·网络·数据库·状态模式·javase
TYC91 小时前
Mac创建Vue3+TypeScript或者React+TypeScript项目
前端·javascript·typescript