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的!

相关推荐
智商不够_熬夜来凑1 小时前
【Picker】单选多选
前端·javascript·vue.js
彦为君2 小时前
Java文件处理效率库Commons-IO(速览)
java·开发语言·mfc
米饭不加菜2 小时前
Typora 原生流程图语法完全指南(Flowchart.js)
前端·javascript·流程图
scan7242 小时前
langgraphy条件边
前端·javascript·html
sycmancia2 小时前
Qt——文本打印与光标定位
开发语言·qt
故事和你912 小时前
洛谷-【动态规划1】动态规划的引入2
开发语言·数据结构·c++·算法·动态规划·图论
用户938515635073 小时前
《JS 对象知识地图:10 个小节,从字面量到原型链全覆盖》
javascript
YAwu113 小时前
JavaScript this 底层机制剖析
前端·javascript
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第71题】【Mysql篇】第1题:索引是什么?
java·开发语言·b树·mysql·面试