逆向|中国产业政策大数据平台|请求体加密

news2025/5/28 17:13:42

2025-04-11
逆向地址:aHR0cDovL3poZW5nY2UuMmIuY24v
打开开发者工具出现debugger,直接注入脚本过掉无限debugger
let aaa = Function.prototype.constructor;
Function.prototype.constructor = function (params) {
if(params === ‘debugger’){
console.log(params);
return null;
}
return aaa(params);
}

请求接口:http://zhengce.2b.cn/info_api/policyType/showPolicyType
然后发现这个POST请求的请求体是一段乱码一样的东西,然后再看一下它的content-type:
application/octet-stream表示的就是字节流数据.
在这里插入图片描述
在这里插入图片描述
然后从启动器进去,下一个断点,点击其他的请求接口,断点断住之后,看到那个r就是请求的数据,已经是ArrayBuffer了,也就是那个字节流数据.
然后我们看右边的栈,往前面跟栈,发现其是一个异步栈,且发现Promise后面的栈中,这个字节流数据都已经生成了.那么我们就到promise那个栈中下断点,然后重新点击其他的请求接口.

在这里插入图片描述
到promise那个栈下断点
在这里插入图片描述
这时候我们发现这个e.data变量的值就是
{
“policyType”: 6,
“province”: “”,
“city”: “”,
“downtown”: “”,
“garden”: “”,
“centralId”: “”,
“sort”: 0,
“homePageFlag”: 1,
“pageNum”: 1,
“pageSize”: 7
}
这个其实就是没有加密前的请求体的数据.
然后又通过r = Promise.resolve(e)返回一个新的promise,r = r.then(i.shift(), i.shift());当promise变为已完成的状态后会调用i这个数组中的函数,那么我们就直接进去数组i中的所有的函数,在其上面打断点,然后直接跳过断点,断点直接断在了函数里面,发现函数的参数e就是包含了请求体数据的参数

在这里插入图片描述

然后我们一直一步一步地往下跟栈,这个函数中把e赋值给了n,所以n和r和e里边都保存了请求体的数据,然后发现到了
r[i(0, 1557, “PlOv”, 0, 1281)] = o[c(835, “Kzp9”, 1060, 1387, 1012) + “e”](r[c(1961, “V)qg”, 2196, 1674, 1683)])i(0, 1200, “PlOv”, 0, 936) + "h"i(0, 1014, “ZftU”, 0, 1250)
这一行代码的时候,这一行代码执行完毕后,n变成了字节流数据,因此可以发现就是这一行代码对请求体的数据进行了加密. 然后把其他的所有断点去掉,只保留这一个断点,然后我们再重新请求接口.

在这里插入图片描述

稍微还原一下发现:其实这一行代码就是:
r[“data”] = o"encode"‘finish’‘slice’
只需要把o[“encode”]这个函数扣下来即可.
然后从函数进去,o[“encode”]其实就是PolicyInfoByTypeIdParam$encode函数,首先把这个函数给扣下来,然后发现需要找到w=Writer.create()是什么
然后我们进去到Writer后发现,其是在一个模块名为38的webpack模块当中,那么这时候,我们找到其webpack模块的加载器,发现是一个自执行的函数,就直接把这个webpack扣下来.

在这里插入图片描述

传进去的protobuf_min参数没啥用的,直接删除即可.执行代码报错:
ReferenceError: commonjsGlobal is not defined
那么直接赋值:commonjsGlobal = global;
再执行,发现已经不报错了.
然后这时候我们需要把加载器中的(16)这个代码删除,并用全局变量jzq将加载器导出.然后再执行38模块的代码,jzq(38); 注意:需要将
i2.util.global.protobuf = i2,
module && module.exports && (module.exports = i2)
这两行代码注释掉
然后
let ww = jzq(38);
w = new ww();
这里得到的w就是对应的PolicyInfoByTypeIdParam$encode函数中的w
正确得到请求体的字节流数据如下:
在这里插入图片描述

随后直接用python调用即可.成功请求得到的数据如下
需要注意的就是,js中返回的字节数据,在python中首先将其变成列表,也就是
[10, 1, 52, 18, 0, 26, 0, 34, 0, 42, 0, 50, 0, 56, 0, 64, 1, 72, 7, 80, 1]
然后再调用bytes(data)将其转换为为字节流

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏引擎学习第226天

引言,计划 我们目前的目标是开始构建“元游戏”结构。所谓元游戏,指的是不直接属于核心玩法本身,但又是游戏体验不可或缺的一部分,比如主菜单、标题画面、存档选择、选项设置、过场动画等。我们正在慢慢将这些系统结构搭建起来。…

Notepad++安装Markdown实时预览插件

具体操作 打开notepad -> 插件 -> 插件管理 -> 可用 -> “Markdown Panel” -> 安装,安装完成后工具栏点击"Markdown Panel"按钮。 注意:由于网络等原因可能安装失败 导致工具栏没出现""Markdown Panel"按钮&am…

Mysql-视图和存储过程

视图 1.介绍 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条…

stm32面试

数据结构相关问题 stm32面试 数据结构相关问题 目录基础数据结构树与图排序与查找算法 Linux相关问题Linux系统基础Linux命令与脚本Linux网络与服务 操作系统相关问题操作系统基础概念操作系统调度算法操作系统同步与通信 STM32相关问题STM32硬件基础STM32编程与开发STM32应用与…

202524 | 分布式事务

分布式事务(Distributed Transaction) 分布式事务是指跨多个数据库、服务或系统节点的事务操作,要求所有参与方要么全部成功提交,要么全部回滚,保证数据一致性。 1. 为什么需要分布式事务? 在单体应用中&…

在 macOS 上修改 最大文件描述符限制(Too many open files) 和 网络端口相关参数 需要调整系统级配置的详细步骤

在 macOS 上修改 最大文件描述符限制(Too many open files) 和 网络端口相关参数 需要调整系统级配置。以下是详细步骤: 在 macOS 上修改 最大文件描述符限制(Too many open files) 和 网络端口相关参数 需要调整系统级…

通过Arduino IDE向闪存文件系统上传文件

注意:适用于Arduino IDE 2.0版本以上。对于Arduino IDE版本在2.0以下的请参考太极创客的教程:http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/spiffs/upload-files/。 1. 下载脚本文件 下载地址:https://github.com/earl…

leetcode 121. Best Time to Buy and Sell Stock

题目描述 本题属于动态规划类问题。 dp数组的含义 dp[i][0]表示从第0天到第i天为止,处于持有股票的状态下,账户里的最大金额。 dp[i][1]表示从第0天到第i天为止,处于不持有股票的状态下,账户里的最大金额。 按照这个定义dp[n-…

【Docker-13】Docker Container容器

Docker Container(容器) 一、什么是容器? 通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有…

蓝宝石狼组织升级攻击工具包,利用新型紫水晶窃密软件瞄准能源企业

网络安全专家发现,被称为"蓝宝石狼"(Sapphire Werewolf)的威胁组织正在使用升级版"紫水晶"(Amethyst)窃密软件,对能源行业企业发起复杂攻击活动。此次攻击标志着该组织能力显著提升&am…

关于我的服务器

最近我买了台腾讯云服务器,然后新手小白只会用宝塔。。。 安装完之后默认的端口是8888,打开面板就会提示我有风险。然后 我改了端口之后,怎么都打不开。 于是 学到了几句命令可以使用: //查看端口是否已经修改成功 cat www/se…

vue + element-plus自定义表单验证(修改密码业务)

写一个vue组件Password.vue 没有表单验证只有3个表单项 <template><div><el-form><el-form-item label"旧密码"><el-input></el-input></el-form-item><el-form-item label"新密码"><el-input>&l…

2025年第十八届“认证杯”数学中国数学建模网络挑战赛【BC题】完整版+代码+结果

# 问题一&#xff1a;随机森林回归from sklearn.ensemble import RandomForestRegressormodel_rf RandomForestRegressor()model_rf.fit(X_train, y_train)# 问题二&#xff1a;LSTM时间序列预测from tensorflow.keras.models import Sequentialmodel_lstm Sequential()model…

一、小白如何用Pygame制作一款跑酷类游戏(成品展示+添加背景图和道路移动效果)

小白如何用Pygame制作一款跑酷类游戏 文章目录 小白如何用Pygame制作一款跑酷类游戏前言一、游戏最终效果展示二、创建项目并加载pygame模块1.创建项目2.下载pygame模块3. 项目结构安排 三、添加背景图和实现道路移动效果1.引入库2.窗口设置和资源加载3.游戏主循环和程序入口4.…

基础知识:Dify 安装

官方指南:https://docs.dify.ai/zh-hans/getting-started/install-self-hosted docker & docker-compose 安装 可参考:

JWT令牌:实现安全会话跟踪与登录认证的利器

摘要&#xff1a;本文深入探讨了JWT令牌在实现会话跟踪和登录认证方面的应用&#xff0c;详细介绍了JWT令牌的概念、组成、生成与校验方法&#xff0c;以及在实际案例中如何通过JWT令牌进行会话跟踪和登录认证的具体实现步骤&#xff0c;为系统的安全认证机制提供了全面且深入的…

springboot+tabula解析pdf中的表格数据

场景 在日常业务需求中&#xff0c;往往会遇到解析pdf数据获取文本的需求&#xff0c;常见的做法是使用 pdfbox 来做&#xff0c;但是它只适合做一些简单的段落文本解析&#xff0c;无法处理表格这种复杂类型&#xff0c;因为单元格中的文本有换行的情况&#xff0c;无法对应到…

阿里FPGA XCKU3P开箱- 25G 光纤

阿里FPGA XCKU3P开箱 - Hello-FPGA - 博客园 25G 光纤 板子有2个SFP的光纤接口&#xff0c;最大支持25G速率&#xff0c;使用ibert 进行验证&#xff0c;SFP在BANK227的GTY 接口。 ibert 配置如下&#xff1a; 测试 测试符合预期&#xff0c;确认了SFP的具体位置 和 支持的速…

.NET Core DI(依赖注入)的生命周期及应用场景

在.NET中&#xff0c;依赖注入&#xff08;DI&#xff0c;Dependency Injection&#xff09;是一种设计模式&#xff0c;它通过将依赖关系注入到类中&#xff0c;而不是让类自己创建依赖项&#xff0c;来降低类之间的耦合度。这使得代码更加模块化、灵活和易于测试。在.NET中&a…

新技术学习方法

新技术学习方法 学习新技术的路线需要结合系统性规划与实践验证&#xff0c;以下是基于行业经验和学习科学整理的高效路径框架&#xff0c;适用于编程语言、开发框架、前沿技术等领域&#xff1a; 一、明确学习目标与动机&#xff08;战略层&#xff09; 场景化需求分析 明确…