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

【JS逆向分析】某药品网站价格(Price)解密

文章目录

  • 1. 写在前面
  • 2. 断点调试
  • 3. 算法还原

【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

1. 写在前面

  有时候经常会碰到网站将一些敏感、有价值的信息进行加密,前端页面例如采用字体加密一类的方法对数据进行处理。后端接口则将字段的值进行处理后,返回一串密文

既然要呈现给用户浏览,那么展示的一定是明文的。所以接口返回的密文必然会经过前端JS算法的解密再进行渲染


分析网站

aHR0cHM6Ly9tYWxsLnlhb2V4LmNvbS92Mi9wYWdlcy8jL3Byb2R1Y3Qvc2VhcmNoP2tleXdvcmQ9JUU1JTg1JUFEJUU1JTkxJUIzJUU1JTlDJUIwJUU5JUJCJTg0JUU0JUI4JUI4

2. 断点调试

老规矩,打开目标网站随意搜索一个关键词查看一下发包内容,可以看到price相关的字段信息都是处理过的密文,如下所示:

在这里插入图片描述

接下来我们需要去对密文进行解密还原,不然采集数据的话此类数据于爬虫端业务来说是无效的。这里有经验的都知道大概率是一个AES的加密,通过关键词的盲搜是可以定位到的,如下所示:

在这里插入图片描述

这直接就可以结束了!AES.decrypt仿佛在告诉你,别看了它就是你要找的那个人~

如果按照常规的流程来,我们也是可以通过XHR断点配合堆栈来进行分析,首先我们下一个断刷新后查看堆栈简单的静态分析一下JS代码,如下所示:

在这里插入图片描述

当你往下看到N的这里时,这里的特征不要错过了,如下图所示:

在这里插入图片描述

从上面截图的这部分JS代码,是可以去下断分析的。首先t.forEach()的这一手循环处理操作的对象全都是价格字段。其二就是这个T(e[t])的调用,方法T极有可能就是用于实现价格解密处理的

这里我们可以直接跳到T函数处,可以看到通过循环调用,传过来的font color=#ff0033 size=3>e参数都是不同的价格的密文信息,如下所示:

在这里插入图片描述

密文信息再经过b方法进行处理,这里我们直接跟进去。特征一下就明显了!b方法里面用到了AES算法,打上断点进一步可以看到返回值o经过上面的解密处理之后得到了最终的明文价格信息,如下所示:

在这里插入图片描述

3. 算法还原

最后,对上面的解密逻辑做一个简单的分析就可以直接实现解密算法了,解密采用了ECB模式和PKCS7填充。e密文信息、t一个固定的短字符串,用来部分替代密钥的一部分、v基础密钥

v.slice(0, 10)v字符串的前10位,再取t前6位,并用0填充,保持长度为6位,最后两者相加组成新的密钥,解密算法实现如下:

const crypto = require('crypto');function aesDecrypt(e, t = '', v) {const key = Buffer.from(`${v.slice(0, 10)}${t.slice(0, 6).padStart(6, '0')}`, 'utf8');try {const decipher = crypto.createDecipheriv('aes-128-ecb', key, null);decipher.setAutoPadding(true);const decrypted = decipher.update(e, 'base64', 'utf8') + decipher.final('utf8');return decrypted;} catch (err) {return '';}
}const e = '2dPhq7KoBfA0YqBU8zTnBg==';
const t = '419397';
const v = 'GDLSAUO1KUMIIBCE';console.log(aesDecrypt(e, t, v));  // 输出解密后的明文

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AI基础 L22 Uncertainty over Time I 时间的不确定性
  • ELK预警方案:API+XXLJob
  • python画图|同时输出二维和三维图
  • 学习使用在windows系统上安装vue前端框架以及环境配置图文教程
  • Python快速入门 —— 第二节:函数与控制语句
  • macOS上谷歌浏览器的十大隐藏功能
  • maya-vray渲染蒙版
  • 高级Java程序员必备的技术点:你准备好了吗?
  • 图数据库 neo4j 安装
  • Scrapy 2.6 Spider Middleware 爬虫页中间件基本使用
  • 优化安防视频监控的关键体验:视频质量诊断技术如何应用在监控系统中?
  • 【字符串】AC自动机+dp
  • 基于YOLO深度学习和百度AI接口的手势识别与控制项目
  • 2. 变量和指令(omron 机器自动化控制器)——1
  • 速通LLaMA1:《LLaMA: Open and Efficient Foundation Language Models》全文解读
  • 分享一款快速APP功能测试工具
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • avalon2.2的VM生成过程
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • ES学习笔记(12)--Symbol
  • Js基础知识(四) - js运行原理与机制
  • leetcode46 Permutation 排列组合
  • spring boot下thymeleaf全局静态变量配置
  • Spring Cloud中负载均衡器概览
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vue2 SSR 的优化之旅
  • vue-router 实现分析
  • 程序员该如何有效的找工作?
  • 记录一下第一次使用npm
  • 警报:线上事故之CountDownLatch的威力
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 如何解决微信端直接跳WAP端
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 我与Jetbrains的这些年
  • 一些css基础学习笔记
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 7行Python代码的人脸识别
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​浅谈 Linux 中的 core dump 分析方法
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #Spring-boot高级
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (1)Jupyter Notebook 下载及安装
  • (3) cmake编译多个cpp文件
  • (LeetCode C++)盛最多水的容器
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027