爬虫+RPC+js逆向---直接获取加密值

news/2024/5/6 13:39:26/文章来源:https://blog.csdn.net/2303_80857229/article/details/137594431

免责声明:本文仅做技术交流与学习,请勿用于其它违法行为;如果造成不便,请及时联系...

目录

爬虫+RPC+js逆向---直接获取加密值

target网址:

抓包

下断点

找到加密函数

分析参数

RPC流程

一坨:

二坨:

运行py,拿到加密值


爬虫+RPC+js逆向---直接获取加密值


target网址:

优志愿_2024高考志愿填报系统-新高考志愿填报选科指南

数据往下滑,发现是异步加载数据.

抓包

找到XHR,都清空,刷新一下.

这里返回了几个包,我们单个看一下他返回(响应)的数据,发现其中一个包的响应就是我们想要的数据.

"/youzy.dms.basiclib.api.college.query"
#这个包里就是我们想要的数据.

--分析这些数据包,发现这个参数U-Sign每次都在变.(不简单)

--所以我们直接关键字搜索,U-Sign

找到关键字加密的位置,

下断点

刷新

--断住了

找到加密函数

这里我们看一下整个o函数,发现o函数出来就是个加密值了.

分析参数

--接着看里面的参数, e.url

发现就是我们要获取数据的接口的url(对照着右面的值看)

这里的 e.data 是一个定值,那我们直接在控制台copy一下就行.

--这样就是复制成功了.

{"keyword": "","provinceNames": [],"natureTypes": [],"eduLevel": "","categories": [],"features": [],"pageIndex": 1,"pageSize": 20,"sort": 11
}
#这就是第二个参数的值.

RPC流程

打开工具RPC

先断点

控制台赋值 --给加密函数赋值.

取消(禁用)断点--跑完

最后甩那两坨.(第二坨注意要改值.)

运行py代码.

一坨:

function Hlclient(wsURL) {this.wsURL = wsURL;this.handlers = {_execjs: function (resolve, param) {var res = eval(param)if (!res) {resolve("没有返回值")} else {resolve(res)}
​}};this.socket = {};if (!wsURL) {throw new Error('wsURL can not be empty!!')}this.connect()this.socket["ySocket"].addEventListener('close', (event) => {console.log('rpc已关闭');});
}
​
Hlclient.prototype.connect = function () {console.log('begin of connect to wsURL: ' + this.wsURL);var _this = this;try {this.socket["ySocket"] = new WebSocket(this.wsURL);this.socket["ySocket"].onmessage = function (e) {try {let blob = e.datablob.text().then(data => {_this.handlerRequest(data);})} catch {console.log("not blob")_this.handlerRequest(blob)}
​}} catch (e) {console.log("connection failed,reconnect after 10s");setTimeout(function () {_this.connect()}, 10000)}this.socket["ySocket"].onclose = function () {console.log("connection failed,reconnect after 10s");setTimeout(function () {_this.connect()}, 10000)}this.socket["ySocket"].addEventListener('open', (event) => {console.log("rpc连接成功");});this.socket["ySocket"].addEventListener('error', (event) => {console.error('rpc连接出错,请检查是否打开服务端:', event.error);});
​
};
Hlclient.prototype.send = function (msg) {this.socket["ySocket"].send(msg)
}
​
Hlclient.prototype.regAction = function (func_name, func) {if (typeof func_name !== 'string') {throw new Error("an func_name must be string");}if (typeof func !== 'function') {throw new Error("must be function");}console.log("register func_name: " + func_name);this.handlers[func_name] = func;return true
​
}
​
//收到消息后这里处理,
Hlclient.prototype.handlerRequest = function (requestJson) {var _this = this;var result = JSON.parse(requestJson);//console.log(result)if (!result['action']) {this.sendResult('', 'need request param {action}');return}var action = result["action"]var theHandler = this.handlers[action];if (!theHandler) {this.sendResult(action, 'action not found');return}try {if (!result["param"]) {theHandler(function (response) {_this.sendResult(action, response);})} else {var param = result["param"]try {param = JSON.parse(param)} catch (e) {console.log("")}theHandler(function (response) {_this.sendResult(action, response);}, param)}
​} catch (e) {console.log("error: " + e);_this.sendResult(action , e);}
}
​
Hlclient.prototype.sendResult = function (action, e) {this.send(action + atob("aGxeX14") + e);
}
demo = new Hlclient("ws://127.0.0.1:12080/ws?group=o&name=sign");

--rpc连接成功.

二坨:

demo.regAction("get_sign", function (resolve,param) {//这里还是param参数 param里面的key 是先这里写,但到时候传接口就必须对应的上//注意这里的接口要和py里面的接口一致.   函数名称.res=o(param["url"],param["data"])resolve(res);
})

--true

运行py,拿到加密值

注意: 最后这里写爬虫获取数据时,浏览器不能刷新.

RPC那个工具在github上直接搜进行了...

RPC是什么?

http://t.csdnimg.cn/3FcRJ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1045885.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 上传视频

controlslist 属性可以用于告诉浏览器在视频播放过程中应该显示哪些默认的用户界面控件 代码&#xff1a; <template><div class"schematicDiagramIndex"><el-container><el-header v-if"this.radiooCar1"><el-button click&qu…

解决插件在word中的宏禁用问题。MathType, Microsoft Office, powerpoint

背景&#xff1a;破解版的Microsoft Office,以及破解版的MathType。启动word后&#xff0c;会出现“宏禁用”的警告&#xff0c;并且MathType插件不可用&#xff0c;MathType对象也无法编辑&#xff0c;需要手动点击警告里的“启用”&#xff0c;主要是每次打开MS都得重新启用。…

智慧城市中的物联网革命——青创智通

工业物联网解决方案-工业IOT-青创智通 得益于物联网 (IoT)的变革力量&#xff0c;智慧城市的概念正在迅速成为现实。物联网正在从根本上改变城市的运作方式&#xff0c;为城市居民带来更高的效率、可持续性和生活质量。在本文中&#xff0c;我们将探讨物联网在智慧城市中的作用…

【3GPP】【核心网】核心网/蜂窝网络重点知识面试题二(超详细)

1. 欢迎大家订阅和关注&#xff0c;3GPP通信协议精讲&#xff08;2G/3G/4G/5G/IMS&#xff09;知识点&#xff0c;专栏会持续更新中.....敬请期待&#xff01; 目录 1. 对于主要的LTE核心网接口&#xff0c;给出运行在该接口上数据的协议栈&#xff0c;并给出协议特征 2. 通常…

vue快速入门(十五)监听键盘事件

注释很详细&#xff0c;直接上代码 上一篇 新增内容 特定按键监听事件全按键监听事件及两种判断方法 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthde…

李廉洋:4.9黄金屡创新高。黄金原油晚间最新分析建议。

但当下不管是战争因素所带来的避险情绪影响还是美国降息与否所带来的经济影响都无疑还是支撑着黄金继续走高&#xff0c;那么接下来&#xff0c;只要市场不出现较大的利空影响&#xff0c;黄金都不会有较大的回调力度&#xff0c;所以我们当下不管是短线还是长线仍旧以继续看多…

【JavaWeb】Servlet与过滤器

目录 ServletServlet做了什么JSP与Servlet的关系主要Servlet API介绍如何创建ServletServlet中主要方法ServletRequestServletResponseServletConfig Servlet生命周期Servlet创建Servlet部署与运行 ServletConfig类ServletConfig类的三大作用 ServletContext类ServletContext类…

图像生成:Pytorch实现一个简单的对抗生成网络模型

图像生成&#xff1a;Pytorch实现一个简单的对抗生成网络模型 前言相关介绍具体步骤准备并读取数据集定义生成器定义判别器定义损失函数定义优化器开始训练完整代码 训练生成的图片 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&…

【vim 学习系列文章 20 -- a:mode 的值有哪些?】

请阅读【嵌入式开发学习必备专栏 之 Vim】 文章目录 a:mode 的值有哪些?举例Vim 底部状态栏设置 a:mode 的值有哪些? 在 Vim 脚本语言中&#xff0c;a:mode 常常用于函数内部&#xff0c;以获取该函数被调用时 Vim 正处于的模式。它主常用于那些可以从不同模式下被调用的函数…

websocket分析和前后端如何接入websocket

1、前言 websocket一般用途为消息提醒&#xff0c;股票行情数据推送等等&#xff0c;有很多用途。 我们这里简单举例理解websocket和如何前后端接入websocket&#xff1b; 使用网络抓包分析软件。主要是截取网络封包&#xff0c;并尽可能显示出最为详细的网络封包资料。 2、…

怎么快速围绕“人、货、场”做零售数据分析?

做零售数据分析多了&#xff0c;不难发现零售数据分析的关键就是“人、货、场”&#xff0c;那么怎么又快又灵活地分析这三个关键点&#xff1f;不妨参考下奥威BI零售数据分析方案。 奥威BI零售数据分析方案是一套吸取大量项目经验&#xff0c;结合零售企业数据分析共性需求打…

MyBatis 等类似的 XML 映射文件中,当传入的参数为空字符串时,<if> 标签可能会导致 SQL 语句中的条件判断出现意外结果。

问题 传入的参数为空字符串&#xff0c;但还是根据参数查询了。 原因 在 XML 中使用 标签进行条件判断时&#xff0c;需要明确理解其行为。在 MyBatis 等类似的 XML 映射文件中&#xff0c; 标签通常用于动态拼接 SQL 语句的条件部分。当传入的参数 riskLevel 为空字符串时…

acwing总结-线性质数筛

质数筛 题目链接:质数筛线性筛法 ac代码&#xff1a; #include<iostream> #include<algorithm> //https://www.bilibili.com/video/BV1LR4y1Z7pm/?spm_id_from333.337.search-card.all.click&vd_source436ccbb3a8f50110aa75654f38e35672 //链接到b站视频 us…

如何在 YouTube、Medium、Twitter 和 Linkedin 上使用 ChatGPT 赚钱

人工智能SEO&#xff1a;未来内容优化的革命 介绍 在当今的数字时代&#xff0c;利用 ChatGPT 等人工智能工具已经成为在线内容创建和货币化领域的游戏规则改变者。 本指南探讨了如何在 YouTube、Medium、Twitter 和 Linkedin 等各种平台上有效使用 ChatGPT&#xff0c;不仅可以…

el-table动态合并列

需要合并列&#xff0c;并且不确定需要合并多少列的&#xff0c;可以参照如下代码 首先需要再el-table上传入span-method方法 arraySpan({ row, column, rowIndex, columnIndex }){if (row.groupName 汇总 && columnIndex 0) {return [0,0]} else if (row.groupName…

机器学习-08-关联规则和协同过滤

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中关联规则和协同过滤。 参考 机器学习&#xff08;三&#xff09;&#xff1a;Apriori算法&#xff08;算法精讲&#xff09; Apriori 算法 理论 重点 MovieLens:一个常用的电影推荐系统领域的数据集 2…

01、ArcGIS For JavaScript 4.29对3DTiles数据的支持

综述 Cesium从1.99版本开始支持I3S服务的加载&#xff0c;到目前位置&#xff0c;已经支持I3S的倾斜模型、3D Object模型以及属性查询的支持。Cesium1.115又对I3S标准的Building数据实现了加载支持。而ArcGIS之前一直没有跨越对3DTiles数据的支持&#xff0c;所以在一些开发过…

数字社交的新典范:解析Facebook的成功密码

在当今数字化时代&#xff0c;社交媒体已经成为人们日常生活的重要组成部分&#xff0c;而Facebook作为最知名的社交媒体平台之一&#xff0c;其成功之处备受瞩目。本文将深入解析Facebook的成功密码&#xff0c;探讨其在数字社交领域的新典范。 1. 用户体验的优化 Facebook注…

Docker容器嵌入式开发:在Ubuntu上配置Postman和flatpak

在 Ubuntu 上配置 Postman 可以通过 Snap 命令完成&#xff0c;以下是所有命令的总结&#xff1a; sudo snap install postmansudo snap install flatpak在 Ubuntu 上配置 Postman 和 Flatpak 非常简单。以下是一些简单的步骤&#xff1a; 配置 Flatpak 安装 Flatpak&#x…

【力扣】104. 二叉树的最大深度、111. 二叉树的最小深度

104. 二叉树的最大深度 题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a; 输…