当前位置: 首页 > news >正文

爬虫逆向实战(二十五)--某矿采购公告

一、数据接口分析

主页地址:某矿

1、抓包

通过抓包可以发现数据接口是cgxj/by-lx-page
在这里插入图片描述

2、判断是否有加密参数

  1. 请求参数是否加密?
    通过查看“载荷”模块可以发现有一个param的加密参数
    在这里插入图片描述
  2. 请求头是否加密?
  3. 响应是否加密?
  4. cookie是否加密?

二、加密位置定位

1、看启动器

查看启动器发现里面有一个index.js中的匿名调用堆栈,点进去查看
在这里插入图片描述
点进去后发现,网站确实是在此处发送的请求,而且参数param也是在此处赋值。但是param的值来自于A.sent,此处找不到A.sent赋值的位置,所以此处只是发包位置,并不是加密位置。
在这里插入图片描述

2、搜索关键字

通过搜索sent相关的关键字,不能有效的定位到加密位置

3、hook

因为请求参数中只有一个param密文参数,所以网站大概率会使用JSON.stringify将数据转换为json字符串再进行加密,所以我们可以hookJSON.stringify,hook代码:

var my_stringify = JSON.stringify;
JSON.stringify = function (params) {debuggerconsole.log("json_stringify params:",params);return my_stringify(params);
};

运行hook代码,再次获取数据,发现可以断住
在这里插入图片描述
接着调试执行,就可以发现加密位置
在这里插入图片描述
但是,此时我们并不能确定此处的加密结果是否就是发包时使用的A.sent,所以我们可以在发包位置再打上断点,并将此处断点放开,通过对比,我们可以发现,此处的加密结果就是发包时使用的。
在这里插入图片描述

三、扣js代码

将加密位置的代码扣出,缺啥补啥即可。
注意,加密时使用的RSA加密以及md5加密,均可使用标准模块,但是RSA加密时,要补一下网站的encryptLong方法,同时RSA加密所使用的公钥,通过观察发包可以看出,网站每次获取数据前,都会先发一个包获取公钥。
在这里插入图片描述
所以先请求public接口获取到公钥,再进行加密即可。
JavaScript源码:

const JSEncrypt = require('jsencrypt');
const CryptoJS = require("crypto-js");function w(A) {var e, t, n = "", r = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", a = "=";for (e = 0; e + 3 <= A.length; e += 3)t = parseInt(A.substring(e, e + 3), 16),n += r.charAt(t >> 6) + r.charAt(63 & t);e + 1 == A.length ? (t = parseInt(A.substring(e, e + 1), 16),n += r.charAt(t << 2)) : e + 2 == A.length && (t = parseInt(A.substring(e, e + 2), 16),n += r.charAt(t >> 2) + r.charAt((3 & t) << 4));while ((3 & n.length) > 0)n += a;return n
}JSEncrypt.prototype.encryptLong = function (A) {var e = this.getKey(), t = (e.n.bitLength() + 7 >> 3) - 11;var n = "", r = "";if (A.length > t)return n = A.match(/.{1,50}/g),n.forEach((function (A) {var t = e.encrypt(A);r += t})),w(r);var a = e.encrypt(A), s = w(a);return s
}function b(A, e, t) {return e in A ? Object.defineProperty(A, e, {value: t,enumerable: !0,configurable: !0,writable: !0}) : A[e] = t,A
}function d(A, e) {var t = Object.keys(A);if (Object.getOwnPropertySymbols) {var n = Object.getOwnPropertySymbols(A);e && (n = n.filter((function (e) {return Object.getOwnPropertyDescriptor(A, e).enumerable}))),t.push.apply(t, n)}return t
}function m(A) {for (var e = 1; e < arguments.length; e++) {var t = null != arguments[e] ? arguments[e] : {};e % 2 ? d(Object(t), !0).forEach((function (e) {b(A, e, t[e])})) : Object.getOwnPropertyDescriptors ? Object.defineProperties(A, Object.getOwnPropertyDescriptors(t)) : d(Object(t)).forEach((function (e) {Object.defineProperty(A, e, Object.getOwnPropertyDescriptor(t, e))}))}return A
}function get_param(pub_key) {var e = {"inviteMethod": "","businessClassfication": "","mc": "","lx": "CGGG","dwmc": "","pageIndex": 1}var t = new JSEncrypt();t.setPublicKey(pub_key)a = m(m({}, e), {}, {sign: CryptoJS.MD5(JSON.stringify(e)).toString(),timeStamp: +new Date})return t.encryptLong(JSON.stringify(a))
}

相关文章:

爬虫逆向实战(二十五)--某矿采购公告

一、数据接口分析 主页地址&#xff1a;某矿 1、抓包 通过抓包可以发现数据接口是cgxj/by-lx-page 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现有一个param的加密参数 请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 无c…...

DPLL 算法之分裂策略

前言 DPLL算法确实是基于树&#xff08;或二叉树&#xff09;的回溯搜索算法&#xff0c;它用于解决布尔可满足性问题&#xff08;SAT问题&#xff09;。下面我会分析您提到的DPLL算法中的分裂策略&#xff0c;以及它是如何在搜索过程中起作用的。 DPLL算法中的分裂策略是用于在…...

Jmeter+ServerAgent

一、Jmeter 下载 https://jmeter.apache.org/download_jmeter.cgi选择Binaries二进制下载 apache-jmeter-5.6.2.tgz 修改配置文件 jmeter下的bin目录&#xff0c;打开jmeter.properties 文件 languagezh_CN启动命令 cd apache-jmeter-5.6/bin sh jmeter二、ServerAgent 监…...

打破数据孤岛!时序数据库 TDengine 与创意物联感知平台完成兼容性互认

新型物联网实现良好建设的第一要务就是打破信息孤岛&#xff0c;将数据汇聚在平台统一处理&#xff0c;实现数据共享&#xff0c;放大物联终端的行业价值&#xff0c;实现系统开放性&#xff0c;以此营造丰富的行业应用环境。在此背景下&#xff0c;物联感知平台应运而生&#…...

ubuntu22安装和部署Kettle8.2

前提 kettle是纯java编写的etl开源工具&#xff0c;目前kettle7和kettle8都需要java8或者以上才能正常运行。所以运行kettle前先检查java环境是否正确配置&#xff0c;java版本是否是8或者以上。 kettle安装 1、创建kettle目录&#xff0c;并将kettle的zip包解压到kettle目…...

修复 Ubuntu Linux 中的“找不到命令‘python’”错误

在ubuntu 22.04版本中使用 callstack backtrace.txt 回溯错误点是碰到了该问题。 参考文章&#xff1a;链接 ubuntu22.04版本中默认只安装了python3版本 查看python各个版本安装情况&#xff0c;在终端输入命令&#xff1a; type python python2 python3如果安装了对应的版本…...

【业务功能篇86】微服务-springcloud-系统性能压力测试-jmeter-性能优化-JVM参数调优

系统性能压力测试 一、压力测试 压力测试是给软件不断加压&#xff0c;强制其在极限的情况下运行&#xff0c;观察它可以运行到何种程度&#xff0c;从而发现性能缺陷&#xff0c;是通过搭建与实际环境相似的测试环境&#xff0c;通过测试程序在同一时间内或某一段时间内&…...

mysql的登录与退出

mysql是c/s架构&#xff0c;意味着同时要有客户端和服务端 1 找到客户端。mysql.exe的安装目录 打开命令行 2 输入对应的服务器的ip&#xff0c;如果是本地&#xff0c;就是Localhost&#xff0c;如果是远程服务器&#xff0c;那就输入对应ip/域名。并且指定mysql监听的端口 …...

SOLIDWORKS工程图转DWG图层映射技巧

DWG格式的图纸在工程制图中有着非常重要的地位&#xff0c;工程实践中常常就需要将SOLIDWORKS工程图进行转换。对于两者之间数据衔接的妥善处理&#xff0c;是提升工作效率的有效手段。基于此目的&#xff0c;本次我们将介绍数据衔接的一个有效解决方案&#xff1a;图层数据的映…...

PMAC与Modbus主站进行Modbus Tcp通讯

PMAC与Modbus主站进行Modbus Tcp通讯 创建modbus通讯参数 在项目的PMAC Script Language\Global Includes下创建一个名为00_Modbus_Para.pmh的pmh文件。 Modbus[0].Config.ServerPort 0 Modbus[0].Config.ConnectTimeOut 6000 Modbus[0].Config.SendRecvTimeOut 0 Modbu…...

MyBatis分页插件PageHelper的使用及MyBatis的特殊符号---详细介绍

一&#xff0c;分页的概念 分页是一种将大量数据或内容分割成多个页面以便逐页显示的方式。在分页中&#xff0c;数据被分割成一定数量的页&#xff0c;每页显示一部分数据或内容&#xff0c;用户可以通过翻页或跳分页是一种将大量数据或内容分割成多个页面以便逐页显示的方式。…...

Qt(C++)计算一段程序执行经过的时间

一、前言 在许多应用程序和系统中,需要对经过的时间进行计算和记录。例如 可能想要测量某个操作的执行时间,或者记录一个过程中经过的时间以进行性能分析。在这些场景下,准确地计时是非常重要的。 Qt提供了一个功能强大的计时器类QElapsedTimer,可以方便地记录经过的时间…...

UnionTech OS(统信桌面操作系统)安装 g++ 和 cmake

文章目录 前言一、debian 10简介二、安装 g三、安装cmake参考资料 前言 统信桌面操作系统支持x86、龙芯、申威、鲲鹏、飞腾、兆芯等国产CPU平台&#xff0c;基于debian 10.x 的稳定版本&#xff0c;长期维护的统一内核版本(4.19)。 一、debian 10简介 Debian 10 是一款广泛使…...

php_webshell免杀--从0改造你的AntSword

0x00 前言&#xff1a; 为什么会有改造蚁剑的想法&#xff0c;之前看到有做冰蝎的流量加密&#xff0c;来看到绕过waf&#xff0c;改造一些弱特征&#xff0c;通过流量转换&#xff0c;跳过密钥交互。 但是&#xff0c;冰蝎需要反编译去改造源码&#xff0c;再进行修复bug&am…...

RocketMQ mqadmin java springboot python 调用笔记

命令 mqadmin命令列表 yeqiangyeqiang-MS-7B23:/opt/rocketmq-all-5.1.3-bin-release$ sh bin/mqadmin The most commonly used mqadmin commands are:updateTopic Update or create topicdeleteTopic Delete topic from broker and NameServer.…...

Java aspose 将HTML导出成Excel文件

1.需求 有一批表格的html文件&#xff0c;需要将这些表格导出成excel文件 2.代码 使用第三方库 aspose ByteArrayInputStream htmlIs new ByteArrayInputStream(htmlBuilder.toString().getBytes()); // 将html字符串构建成输入流 LoadOptions lo new LoadOptions(LoadFo…...

原生微信小程序 动态(横向,纵向)公告(广告)栏

先看一下动态效果 Y轴滚动公告的原理是swiper组件在页面中的Y轴滚动&#xff0c;属性vertical&#xff0c;其余属性也设置一下autoplay circular interval"3000" X轴滚动的原理是&#xff0c;利用动画效果&#xff0c;将内容从右往左过渡过去 wxml&#xff1a; &l…...

pandas和polars简单的对比分析

pandas pandas是基于python写的&#xff0c;底层的数据结构是Numpy数据(ndarray)。pandas自身有两个核心的数据结构&#xff1a;DataFrame和Series&#xff0c;前者是二维的表格数据结构&#xff0c;后者是一维标签化数组。 polars polars是用Rust&#xff08;一种系统级编程…...

Feign远程调用的使用

假设已配好nacos服务&#xff1a;并且已配好userservice、orderservice&#xff0c;点击跳转 Feign是一个声明式的http客户端&#xff0c;官方地址&#xff1a;https://github.com/OpenFeign/feign&#xff0c;其作用就是在程序中帮助我们优雅的实现http请求的发送&#xff0c…...

Postman API测试之道:不止于点击,更在于策略

引言&#xff1a;API测试的重要性 在当今的软件开发中&#xff0c;API已经成为了一个不可或缺的部分。它们是软件组件之间交互的桥梁&#xff0c;确保数据的流动和功能的实现。因此&#xff0c;对API的测试显得尤为重要&#xff0c;它不仅关乎功能的正确性&#xff0c;还涉及到…...

城通网盘解析工具:3步获取高速直连下载地址的终极方案

城通网盘解析工具&#xff1a;3步获取高速直连下载地址的终极方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否还在为城通网盘的蜗牛下载速度而烦恼&#xff1f;每次下载大文件都要经历漫长的…...

从myplaces.shp到专题地图:手把手教你用QGIS C++ API实现点要素分级渲染

从myplaces.shp到专题地图&#xff1a;QGIS C API实现点要素分级渲染实战指南 当我们需要在桌面GIS应用中直观展示气象站降雨量、城市人口密度或商业网点销售额等连续型空间数据时&#xff0c;分级色彩渲染是最有效的可视化手段之一。本文将深入探讨如何利用QGIS强大的C API&am…...

用PyTorch和ECANet18搞定RAF-DB表情分类:从数据集下载到模型部署的保姆级教程

基于ECANet18的RAF-DB表情识别实战&#xff1a;从零构建高精度分类模型 人脸表情识别&#xff08;FER&#xff09;作为计算机视觉领域的重要分支&#xff0c;在情感计算、智能交互等领域展现出巨大潜力。本文将带您完整实现一个基于PyTorch和ECANet18的端到端表情识别系统&…...

3倍效率提升:Gofile批量下载工具实战指南

3倍效率提升&#xff1a;Gofile批量下载工具实战指南 【免费下载链接】gofile-downloader Download files from https://gofile.io 项目地址: https://gitcode.com/gh_mirrors/go/gofile-downloader 您是否曾为Gofile平台的文件下载效率低下而烦恼&#xff1f;当面对大文…...

Thorium浏览器深度解析:5个核心优势与进阶配置实战

Thorium浏览器深度解析&#xff1a;5个核心优势与进阶配置实战 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of the RE…...

10分钟掌握Autovisor:智慧树网课自动化学习的完整解决方案

10分钟掌握Autovisor&#xff1a;智慧树网课自动化学习的完整解决方案 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 还在为繁重的智慧树网课任务而烦恼吗&am…...

使用mcp-maker快速构建AI工具调用服务器:从协议原理到工程实践

1. 项目概述与核心价值最近在折腾AI应用开发&#xff0c;特别是想给大语言模型&#xff08;LLM&#xff09;装上更强大的“手脚”&#xff0c;让它能直接操作我电脑上的各种软件和工具。这听起来很酷&#xff0c;对吧&#xff1f;但实际操作起来&#xff0c;你会发现一个核心痛…...

CircuitPython状态灯、安全模式与文件系统故障排查实战指南

1. 项目概述与核心价值 如果你正在用CircuitPython做项目&#xff0c;无论是物联网传感器节点、智能穿戴设备还是互动艺术装置&#xff0c;大概率都遇到过这样的瞬间&#xff1a;板子上的RGB状态灯突然开始闪烁诡异的颜色&#xff0c;或者电脑上那个熟悉的 CIRCUITPY U盘图标…...

m4s-converter终极指南:如何无损转换B站缓存视频并保留弹幕

m4s-converter终极指南&#xff1a;如何无损转换B站缓存视频并保留弹幕 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 在数字内容日益丰富的今天…...

Lingoose:轻量级LLM编排框架的设计哲学与工程实践

1. 项目概述&#xff1a;从“Lingo”到“Goose”&#xff0c;一个轻量级LLM编排框架的诞生最近在折腾大语言模型应用开发的朋友&#xff0c;估计都绕不开一个核心问题&#xff1a;如何高效、优雅地编排和串联多个LLM调用、工具调用以及数据处理流程&#xff1f;当你从简单的单次…...