• 爬虫逆向实战(30)-某查查股东关联公司(HmacSHA512)


    一、数据接口分析

    主页地址:某查查

    1、抓包

    通过抓包可以发现数据接口是api/people/getRelatCompany
    在这里插入图片描述

    2、判断是否有加密参数

    1. 请求参数是否加密?

    2. 请求头是否加密?
      通过查看“标头”可以发现,请求头中有一个key和value都是密文的请求头和一个X-Pid
      在这里插入图片描述

    3. 响应是否加密?

    4. cookie是否加密?

    二、加密位置定位

    1、密文请求头

    (1)看启动器

    查看启动器发现里面包含异步,所以无法正确找到加密位置
    在这里插入图片描述

    (2)搜索关键字

    因为请求头key也是密文,所以无法搜索key值,但是因为是请求头加密,所以可以搜索关键字headers[。通过搜索可以发现,有一处设置请求头的位置,所以怀疑此处就是加密位置。
    在这里插入图片描述
    在此处打断点,再次获取数据,发现可以断住,并且此处key值与value值都是密文,所以此处就是加密位置,而且il的生成就在上方。
    在这里插入图片描述

    2、X-Pid

    (1)搜索关键字

    通过搜索关键字x-pid可以发现,网站是从window中取出来的。
    在这里插入图片描述
    所以我们可以通过搜索window.pid=可以发现,是写在静态页面中的,同时还有一个tid是加密请求头中用到的。
    在这里插入图片描述

    三、扣js代码

    将定位到的加密位置的代码扣出,缺啥补啥即可。
    在扣js代码时,可以发现o.default中使用的是HmacSHA系列算法,所以我们可以尝试一下,判断是否是标准算法,通过控制台的输出,可以发现,o.default就是标准的HmacSHA算法,所以此处我们可以使用标准模块来加密。
    在这里插入图片描述
    JavaScript源代码:

    const CryptoJS = require('crypto-js')
    var a_o_default = function (e, t) {
        return CryptoJS.HmacSHA512(e, t).toString()
    };
    
    var a_a_default = function () {
        var codes = {
        "0": "W",
        "1": "l",
        "2": "k",
        "3": "B",
        "4": "Q",
        "5": "g",
        "6": "f",
        "7": "i",
        "8": "i",
        "9": "r",
        "10": "v",
        "11": "6",
        "12": "A",
        "13": "K",
        "14": "N",
        "15": "k",
        "16": "4",
        "17": "L",
        "18": "1",
        "19": "8"
    }
        for (var e = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "/").toLowerCase(), t = e + e, n = "", i = 0; i < t.length; ++i) {
            var a = t[i].charCodeAt() % 20;
            n += codes[a]
        }
        return n
    };
    
    
    var a_default = function () {
        var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}
            , t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "/").toLowerCase()
            , n = JSON.stringify(e).toLowerCase();
        return a_o_default(t + n, a_a_default(t)).toLowerCase().substr(8, 20)
    };
    
    var r_default = function () {
        var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}
            , t = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : ""
            , n = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "/").toLowerCase()
            , i = JSON.stringify(e).toLowerCase();
        return a_o_default(n + "pathString" + i + t, a_a_default(n))
    };
    
    function get_headers(tid) {
        var t = '/api/people/getrelatcompany?keyno=pac1d468055811d835c90bf67aa9c656&pagesize=10';
        var i = a_default(t, undefined)
        var l = r_default(t, undefined, tid);
        return {i:l}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
  • 相关阅读:
    消息队列&中间件
    【翻译】Kingfisher 官方指南 Cheet Sheet
    c<7>存储
    Nacos注册中心和服务消费方式
    学习【Cesium】第七篇,Cesium地图加载3D建筑物并设置属性(学不会揍我)
    【测试】关于收集到的测试问题解答
    Linux中系统时间同步
    nuxt 如何生成sitemap.xml 动静态站点地图
    加密市场的投资布局,Zebec实属价值洼地
    Keil一键添加.c文件和头文件路径脚本--可遍历添加整个文件夹
  • 原文地址:https://blog.csdn.net/qq_44906798/article/details/132740324