某行 webpack 加密算法分析

news2024/11/19 5:50:23

本次的目标是某行购物网站的加密算法分析,网站如下

aHR0cHM6Ly93d3cuemtoLmNvbS8=

(注:该网站从整体上看来,是webpack加密,但是本文的实现方式,不是扣js代码也不补环境,因为最后分析此网站用的都是标准加密算法,所以单纯从算法的角度去实现)
进入网站后,任意搜索一个关键词,打开网络请求
在这里插入图片描述
在这里插入图片描述
我们任意找一个请求,这个应该是显示价格的请求,这里看到,发送的参数和返回的参数都是加密过的,也就是我们最后的请求需要加密发送后,再把返回的字符串解密最后才能得到结果,接下里,我们先搜索下关键词,看下是否有结果
在这里插入图片描述
搜索有发现后,我们依次查找,发现这个地方非常可疑,还有对请求头的加密过程,我们在这里打个断点
在这里插入图片描述
成功断下断点后,发现这里就是请求参数的加密,将商品的编号列表加密,对密码学有基础的小伙伴应该知道,使用ECB加密模式,Pkcs7填充方式的加密都是对称加密,一般在加密网站中用的最多的就是AES加密,经过堆栈查找后,确实是AES加密,这里我就不追溯这个查找流程了,这个加密我们用js去还原,代码如下:

const crypto = require('crypto');

function padString(data) {
  const blockSize = 16;
  const paddingSize = blockSize - (data.length % blockSize);
  const padding = Buffer.alloc(paddingSize, paddingSize);
  return Buffer.concat([Buffer.from(data, 'utf8'), padding]);
}
function aesEncrypt(plainText, key) {
  const iv = Buffer.alloc(0); // ECB 模式不需要 IV 向量
  const cipher = crypto.createCipheriv('aes-256-ecb', key, iv);
  cipher.setAutoPadding(false);
  const paddedText = padString(plainText);
  let encrypted = cipher.update(paddedText, 'utf8', 'base64');
  encrypted += cipher.final('base64');
  return encrypted;
}

接着,我们看headers中x-akac和x-rgn的变化
在这里插入图片描述
可以发现,这里用到了JSEncrypt这个加密库,我们跟栈进去看,发现是rsa加密,公钥是固定不变的,x-rgn参数是一个时间戳,我们再次还原这段代码

window = {}
const jsencrypt = require('jsencrypt')

function rsaenc(N){
	let s = new jsencrypt();
	s.setPublicKey('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCglz4D9dnGsJbt5HIjSjuM5KqBheaRZVBczbAJ1s5lkeWoOZHA7pbTo8lph5qj9fuVnUErY+XnlpMzMp7GtmnLPioxkY7zlcvOTsK90wnBxCxKN94/OvAtX/f4QivCR80B5KZYlvj4aVUEONVNls9hP6cHvt85gPFro8oeTs4fwIDAQAB')
	const encryptedData = s.encrypt(N)
	return encryptedData
}

基本上请求的加密参数就齐活了,接着我们看返回参数的解密过程,.接着跟栈寻找
在这里插入图片描述
发现这里也是用AES加密,使用的秘钥和发送请求的秘钥是一样的,这就好办了,加密发送出去,得到再回来解密,解密的js代码如下

function aesDecrypt(encryptedData, key) {
  const iv = Buffer.alloc(0); // ECB模式不需要IV向量
  const decipher = crypto.createDecipheriv('aes-256-ecb', key, iv);
  decipher.setAutoPadding(false);
  let decrypted = decipher.update(encryptedData, 'base64', 'utf8');
  decrypted += decipher.final('utf8');
  return decrypted;
}

最后,我们用python来组装代码后,正确得到了请求**(这里需要注意,上述分析步骤中提到的固定秘钥可能和当前会话有关,不一定是固定的,本文只分析整体的加密步骤)**
在这里插入图片描述
成功!!

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

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

相关文章

静态链接库和动态链接库(隐式载入显式载入)

文章目录 动态链接库和静态链接库什么是链接库?静态链接库动态链接库动态链接库的俩种链接方式加载时动态链接运行时动态链接 动态链接库和静态链接库 动态链接库和静态链接库都是共享代码的方法,只是二者略有区别。 以C/C为例,一个可执行文…

JDK多版本集成 Jacoco 配置指南

JDK多版本集成 Jacoco 配置指南 本篇相关 JDK 版本配置如下: JDK8 JDK11 JDK17 Jacoco 是什么 Jacoco 是一个用于Java程序的代码覆盖率报告工具。它通过动态分析(在代码执行时收集数据)来生成代码覆盖率报告文件。Jacoco 支持多种覆盖率标…

CSS新手入门笔记整理:元素类型相互转换

元素类型 块元素(block) 独占一行,排斥其他元素跟其位于同一行,包括块元素和行内元素。块元素内部可以容纳其他块元素和行内元素。可以定义 width,也可以定义 height。可以定义 4 个方向的 margin。 行内元素&#xf…

正运动ZDevelop软件使用流程

ZDevelop是正运动技术ZMoiton系列运动控制器的PC端程序开发调试与诊断软件,通过它用户能够很容易的对控制器进行程序编辑与配置,快速开发应用程序、实时诊断系统运行参数以及对运动控制器正在运行的程序进行实时调试,支持中英双语环境。 BAS…

川崎ZX-6R确定引进,636它真的来了,3C认证已过。

最新消息,兄弟们,你们期待已久的川崎ZX6R(636)基本已经确定引进了,官方的3C认证已经通过,那么从3C里面我们可以看到哪几个信息?产品代号ZX636J就是心心念念的ZX-6R了。 有些小伙伴不太清楚3C认…

MYsql第二次作业

目录 问题 解答 1. 2. 3. 4. 5. 6. 7.查看所有人的年龄 8. 9. 10 11 12.查询部门号为103或102的职工号,姓名,政治面貌 13. 14 15 16 17. 问题 解答 1. 2. 3. 4. 5. 6. 7.查看所有人的年龄 8. 9. 10 11 12.查询部门号为103或102的职…

基于PaddleOCR银行卡识别实现(四)之uni-app离线插件

目的 在前三篇文章中完成了银行卡识别整个模型训练等工作,通过了解PaddleOCR的端侧部署,我们也可以将银行卡号检测模型和识别模型移植到手机中,做成一款uni-app手机端离线银行卡号识别的应用。 准备工作 为了不占用过多篇幅,这…

字符统计[c]

#include<stdio.h> #include<string.h> int main() {int a,b,c;abc0;char s[100];int i0;while(1){i;scanf("%c",&s[i]);if(s[i]?)break;}for(int k1;k<i;k){if(s[k]>48&&s[k]<57){a;//数字}else if((s[k]>65&&s[k]<…

1. mycat入门

1、mycat介绍 Mycat 是一个开源的分布式数据库系统&#xff0c;但是由于真正的数据库需要存储引擎&#xff0c;而 Mycat 并没有存 储引擎&#xff0c;所以并不是完全意义的分布式数据库系统。MyCat是目前最流行的基于Java语言编写的数据库中间件&#xff0c;也可以理解为是数据…

I/O设备模型

I/O设备模型 绝大部分的嵌入式系统都包括一些I/O&#xff08;Input/Outut&#xff0c;输入/输出&#xff09;设备&#xff0c;例如仪器上的数据显示屏、工业设备上的串口通信、数据采集设备上用于保存数据的Flash或SD卡&#xff0c;以及网络设备的以太网接口等。 I/O设备模型…

视频剪辑:视频创意制作,背景图片融合视频制作画中画效果

随着社交媒体的兴起&#xff0c;视频制作不再仅仅是专业人士的专利。每个人都可以通过一些技巧&#xff0c;创作出独特而富有吸引力的视频内容。视频剪辑是一种非常重要的技术&#xff0c;它能让视频从平淡无奇变为生动有趣。背景图片融合视频制作画中画效果&#xff0c;也能增…

App自动化测试之Appium 环境搭建保姆级教程(全网最全)

前言 APP自动化测试运行环境比较复杂&#xff0c;稍微不注意安装就会失败。我见过不少朋友&#xff0c;装了1个星期&#xff0c;Appium 的运行环境还没有搭好的。 搭建环境本身不是一个有难度的工作&#xff0c;但是 Appium 安装过程中确实存在不少隐藏的比较深的坑&#xff…

fragment常用知识点

fragment基本使用 摘自官网的代码示例 class ExampleActivity : AppCompatActivity(R.layout.example_activity) {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)// 注意这里有判断&#xff0c;当saveInstanceState为空时再创建。…

git提交代码报错Git: husky > pre-commit

目录 git提交代码报错原因解决方法&#xff08;三种&#xff09;1、第一种2、第二种3、第三种 git提交代码报错原因 这个问题是因为当你在终端输入git commit -m “XXX”,提交代码的时候,pre-commit(客户端)钩子&#xff0c;它会在Git键入提交信息前运行做代码风格检查。如果代…

53 代码审计-TP5框架及无框架变量覆盖反序列化

目录 演示案例:Metinfo-无框架-变量覆盖-自动审计或搜索phpmyadmin-无框架-反序列化-自动审计或搜索Thinkphp5-有框架-搭建使用入口访问调试SQL等 演示案例: Metinfo-无框架-变量覆盖-自动审计或搜索 变量覆盖会直接覆盖原始变量&#xff0c;来形成新的变量值 搜索关键字或者…

智慧社区前景无限,科技引领未来发展

社区是城镇化发展的标志&#xff0c;作为人类现代社会的生活的基本圈子&#xff0c;是人类生活离不开的地方&#xff0c;社区人口密度大、车辆多&#xff0c;管理无序&#xff0c;社区的膨胀式发展多多少少带来一定的管理上的缺失。社区作为智慧城市建设的重要一环&#xff0c;…

zedbox 实现配置 yolov5

Stereolabs 的 ZED Box 是一款由 NVIDIA Jetson™ 提供支持的紧凑型网关&#xff0c;用于在移动和现场情况下挑战 AIoT&#xff08;物联网&#xff09;。它旨在将空间感知和理解带到边缘&#xff0c;并聚合、处理和分析来自 3D 传感器和设备的数据。 相关内容 1.win10下 cud…

A-23 P离子交换树脂:高效去除无机有机污染物的新选择

在当今水处理行业中&#xff0c;高效、环保的离子交换树脂备受关注。本文将为您介绍一款具有卓越性能的碱性季胺基阴离子交换树脂——Tulsion A-23 P。通过分析其特性和应用&#xff0c;展示其在水处理领域的优势。 一、Tulsion A-23 P离子交换树脂的特性 物理化学稳定性&#…

Connection refused: no further information

解决目录 一、报错信息二、解决方法 一、报错信息 二、解决方法 1、报错原因是开启了代理&#xff0c;像AS是绝对不能开代理的。 2、设置为No proxy&#xff0c;然后Apply再选择OK&#xff0c;重新同步。 要远离消耗你的人和事&#xff0c;不要花费任何情绪或者精力在他们身…

【排序算法】快速排序

一&#xff1a;基本概念 1.1 介绍 快速排序由C. A. R. Hoare在1962年提出&#xff0c;它是一种基于二叉树结构的交换排序算法&#xff0c;它采用了一种分治的策略&#xff0c;通常称其为分治法。该方法的基本思想是&#xff1a;先从数列中取出一个数作为基准数&#xff0c;然…