当前位置: 首页 > 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));  // 输出解密后的明文

在这里插入图片描述


http://www.mrgr.cn/news/27965.html

相关文章:

  • Qt Quazip压缩解压实例
  • 1、使用vscode+eide+stm32cubeMx开发stm32
  • 【ARM Coresight OpenOCD 系列 5 -- arp_examine 使用介绍】
  • React Query在现代前端开发中的应用
  • 51c大模型~合集42
  • 前后端交互之动态列
  • NFS在docker环境下无法写入文件的问题解决、NFS文件共享查看挂载客户端列表、mount监控及使用script命令保存屏幕终端输出内容
  • TS.38-2
  • 基于yolov8的无人机检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • THREE.js:网页上的3D世界构建者
  • AIGC文本生成
  • Luogu P1874 快速求和 (线性DP)
  • 【MySQL学习】基础指令全解:构建你的数据库技能
  • MySQL之约束
  • ArrayList 源码解析
  • 1.2 交换技术
  • Java contains()方法
  • 电基础理解
  • 轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数
  • Linux设备驱动开发:从基础理论到实战经验的全面解析
  • 网络安全学习(二)初识kali
  • 经验——IMX6UL的uboot无法ping主机或Ubuntu
  • 每日一问:C++ 中重写和重载的区别
  • 精简实用!一分钟搭建文件管理服务!
  • 企业竞争文化数据,词频分析(2007-2022年)
  • C++菜鸟教程 - 从入门到精通 第二节