js解密心得,记录一次抓包vue解密过程

背景

有个抓包结果被加密了

1、寻找入口,打断点

先正常请求一次,找到需要的请求接口。

寻找入口,需要重点关注几个关键字:new Promisenew XMLHttpRequest、onreadystatechange、.interceptors.response.use、.interceptors.request.use

入口这一步很关键,入口找好了,大大降低了下面调式的工作量。

2、调试

这一步目的:请求参数是怎么加密组装的,响应参数是如何解密的。

这个 过程比较繁琐,慢慢来,F11进入关键函数后,再使用F10 一步一步往下执行。

这里响应参数被base64编码了两次 

验证一下

3、代码验证测试

package com.study;import com.fasterxml.jackson.databind.ObjectMapper;import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.net.ssl.*;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Base64;
import java.util.Map;public class Test {public static void main(String[] args) throws Exception {String key = "8afccde05b2206ab681c65d6156b194a";String url = "https://127.0.0.1:443/movie/app/list";String param = "{\"pageParam\":{\"current\":1,\"size\":10},\"searchParam\":{\"movieType\":\"xxxxx\"}}";byte[] bytes = sendPost(url, param);ObjectMapper mapper = new ObjectMapper();Map<String, String> result = mapper.readValue(new String(bytes), Map.class);String data = result.get("data");String s = decryptECB(data, key);System.out.println(s);}/*** AES ECB 解密* @param message 密文* @param key     密匙* @return 解密后数据*/public static String decryptECB(String message, String key) {final String cipherMode = "AES/ECB/PKCS5Padding";try {// 一般这里只会Base64解码一次,但是这次比较特殊,数据被编码了2次。所以需要解码2次。byte[] messageByte = Base64.getDecoder().decode(Base64.getDecoder().decode(message));byte[] keyByte = key.getBytes(StandardCharsets.UTF_8);SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");Cipher cipher = Cipher.getInstance(cipherMode);cipher.init(Cipher.DECRYPT_MODE, keySpec);byte[] content = cipher.doFinal(messageByte);return new String(content, StandardCharsets.UTF_8);} catch (Exception e) {e.printStackTrace();}return null;}/*** 发送POST请求*/public static byte[] sendPost(String url, String params) {HttpsURLConnection con = null;InputStream is = null;try {con = (HttpsURLConnection) new URL(url).openConnection();// 绕过证书验证SSLContext sc = SSLContext.getInstance("SSL");sc.init(null, new TrustManager[]{new MyTrustManager()}, new java.security.SecureRandom());con.setSSLSocketFactory(sc.getSocketFactory());// 绕过验证主机名con.setHostnameVerifier(new MyHostnameVerifier());con.setRequestMethod("POST");con.setDoOutput(true);con.setDoInput(true);con.setUseCaches(false);con.setConnectTimeout(5000);con.setReadTimeout(15000);con.setRequestProperty("Content-Type", "application/json;charset=UTF-8");con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36");if (params != null) {OutputStream outputStream = con.getOutputStream();outputStream.write(params.getBytes(StandardCharsets.UTF_8));outputStream.close();}int len;byte[] buf = new byte[4096];is = con.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();while ((len = is.read(buf)) != -1) {baos.write(buf, 0, len);baos.flush();}return baos.toByteArray();} catch (Exception e) {e.printStackTrace();} finally {try {if (is != null) {is.close();}if (con != null) {con.disconnect();}} catch (IOException e) {e.printStackTrace();}}return null;}static class MyTrustManager implements X509TrustManager {public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[]{};}}static class MyHostnameVerifier implements HostnameVerifier {@Overridepublic boolean verify(String urlHostName, SSLSession session) {return true;}}
}

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

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

相关文章

c++的学习之路:25、map与set

摘要 本文中说一下map与set的使用 目录 摘要 一、关联式容器 二、键值对 三、map 1、map的介绍 2、map的使用 1、map的模板参数说明&#xff1a; 2、map的构造 3、map的迭代器 4、map的容量与元素访问 5、map中元素的修改 6、代码使用 ​编辑 三、总结 四、se…

PMM2 MySQL监控管理工具

目录 1. PMM介绍 2. 安装PMM服务端 2.1 安装docker 2.1.1 下载docker 2.1.2 上传docker包 2.1.3 启动守护进程 2.1.4 查看docker状态 2.2 安装PMM 2.2.1 下载镜像 2.2.2 load镜像 2.2.3 查看镜像 2.2.4 创建容器 2.2.5 运行镜像 2.2.6 验证PMM服务器 2.2.7 删除…

外包干了16天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四年的功能…

【剪映专业版】09定格、倒放、镜像、旋转、裁剪

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 分别为定格、倒放、镜像、旋转、裁剪 定格 时间指示器移动到需要定格的地方&#xff0c;点击定格&#xff0c;自动生成一张图片&#xff0c;时长为3秒。 定格出来的画面&#xff0c;可以任意调整长短时间。 如果需要导…

MySQL高级(性能分析-查看执行频次、慢查询日志)

目录 1、SQL性能分析 1.1、SQL执行频率 1.2、慢查询日志 1、SQL性能分析 1.1、SQL执行频率 MySQL 客户端连接成功后&#xff0c;通过 show [ session | global ] status 命令可以提供服务器状态信息。通过如下指令&#xff0c;可以查看当前数据库的 insert、update、delete、…

使用vite从头搭建一个vue3项目(四)使用axios封装request.js文件,并使用proxy解决跨域问题

目录 一、创建request.js文件二、创建axios实例三、创建请求、响应拦截器四、使用 request.js&#xff0c;测试接口&#xff1a;https://api.uomg.com/api/rand.qinghua1、调取接口代码书写2、注意&#xff08;跨域问题&#xff09; axios 的二次封装有三个要点&#xff1a; 创…

【智能算法】霸王龙优化算法(TROA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2023年&#xff0c;VSDM Sahu等人受到霸王龙狩猎行为启发&#xff0c;提出了霸王龙优化算法&#xff08;Tyrannosaurus Optimization Algorithm, TROA&#xff09;。 2.算法原理 2.1算法思想 TR…

【系统分析师】系统规划

文章目录 1、项目的机会选择2、可行性分析3、成本效益分析3.1 基本概念3.2 盈亏临界分析3.3 净现值分析3.4 投资回收期 截图&#xff1a;希赛讲义 视频&#xff1a;B站 系统规划对应的是 立项 阶段 1、项目的机会选择 2、可行性分析 3、成本效益分析 3.1 基本概念 例题 3.2 盈…

边缘计算智能分析网关V4地面垃圾AI检测算法介绍及场景应用

在传统的卫生监管场景中&#xff0c;无法及时发现地面遗留的垃圾&#xff0c;通过人工巡逻的方式需要大量的人力、物力和时间&#xff0c;而且效率不高&#xff0c;并存在一定的滞后性&#xff0c;而采用地面垃圾AI检测算法则可以大大提高监管效率。 TSINGSEE青犀AI智能分析网…

windows10安装Tensorflow-gpu 2.10.0

windows10安装Tensorflow-gpu 2.10.0 本文主要目的是 从0开始演示 在windows10 平台安装Tensorflow-gpu 2.10.0。 Tensorflow-gpu 2.10.0 之后的版本&#xff0c;不再支持这样的安装方式&#xff0c;如果有需要&#xff0c;请参考wsl安装ubuntu的方式&#xff0c;进行安装。 …

短视频矩阵源头====技术文档交付

短视频矩阵源头技术文档交付 搭建短视频矩阵系统源码需要以下步骤&#xff1a; 1. 确定系统需求和功能&#xff1a;明确系统需要支持哪些功能&#xff0c;例如短视频的上传、存储、播放、分享、评论、点赞等。 2. 选择合适的编程语言和框架&#xff1a;根据需求选择合适的编程…

存储人视角:人工智能AI + 大模型

原文来自于知乎存储专栏&#xff1a; 存储人视角&#xff1a;人工智能AI 大模型 前沿 我的角色 背景 AI 出场 效果 一个宠娃狂魔 娃喜爱并有奥特曼玩具 她的奥特曼玩具会跳舞了 娃对我的崇拜和爱又多了一分......amazing 杭州网商路艾弗森 球队需要制作LOGO 形象生动…

【办公软件word小技巧】如何一键提取word中的图片 几十张 几百张均可一键提取

在日常生活和工作中&#xff0c;我们经常会遇到需要从Word文档中提取图片的情况。无论是为了单独保存这些图片&#xff0c;还是为了在其他地方使用它们&#xff0c;一键提取Word中的图片都是一个非常实用的技能。提取Word文件中的图片并不是一件复杂的事情&#xff0c;只要掌握…

照片jpg格式小于50kb怎么弄?jpg压缩到指定大小

我们经常需要处理大量的图片&#xff0c;特别是在分享到社交媒体时&#xff0c;然而&#xff0c;图片文件的大小常常成为困扰我们的问题&#xff0c;尤其是当我们的设备存储空间有限时。有些平台甚至会需要将图片压缩到50kb大小&#xff0c;那么&#xff0c;如何有效地压缩图片…

WAF攻防-权限控制代码免杀异或运算变量覆盖混淆加密传参

知识点 1、脚本后门基础&原理 2、脚本后门查杀绕过机制 3、权限维持-覆盖&传参&加密&异或等 章节点&#xff1a; WAF绕过主要集中在信息收集&#xff0c;漏洞发现&#xff0c;漏洞利用&#xff0c;权限控制四个阶段。 代码表面层免杀-ASP&PHP&JSP&a…

电商数据接口开发|淘宝商品接口|天猫商品接口|京东商品接口|拼多多商品接口|API接口申请指南

电商数据接口开发涉及到多个电商平台&#xff0c;包括淘宝、天猫、京东和拼多多等。这些平台都提供了丰富的API接口&#xff0c;以便开发者能够获取商品信息、订单数据等&#xff0c;从而构建出各种电商应用和服务。 1.请求方式&#xff1a;HTTP POST GET &#xff08;复制薇&…

Python经典游戏:乒乓球对战(单人+双人模式)

Python108款&#xff0c;小游戏集合&#xff0c;总有一个是你想要的 中国象棋 像素鸟 五子棋 24点小游戏 贪吃蛇 扫雷 俄罗斯方块 魂斗罗 消消乐 坦克大战 外星人入侵 汤姆猫 斗地主 乒乓球 推箱子 植物大战僵尸 围棋 超级玛丽 飞机大战 迷宫 滑雪 吃豆人…等等 &#xff0…

基于springboot实现信息化在线教学平台设计【项目源码+论文说明】计算机毕业设计

基于springboot实现信息化在线教学平台设计演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了信息化在线教学平台的开发全过程。通过分析信息化在线教学平台管理的不足&#xff0c;创建了一个计算机管理信息…

【OpenGL开发】PyQt在关闭应用程序时没有运行析构函数的问题

PyQt在关闭应用程序时没有运行析构函数的问题 目录 一、说明二、python的析构函数三、通用版QT5 存在一些问题四、python版PyQt5 存在一些问题五、OpenGL的析构问题5.1 OpenGL很脆弱,这不是危言耸听5.2 以上OpenGL问题解决方法六、一些保留意见一、说明 应用QT做程序界面,在…

电视盒子哪个牌子好?博主总结网络电视盒子推荐

电视盒子是我们使用最多的产品&#xff0c;追剧、游戏、上网课都离不开电视盒子&#xff0c;但很多朋友不知道电视盒子哪个牌子好&#xff0c;我这周共计测评了18款不同品牌的电视盒子&#xff0c;今天整理了五款网络电视盒子推荐&#xff0c;想买电视盒子可以看看下面这些。 第…